NVIDIA-RTX/NRD
NVIDIA Real-time Denoising (NRD) library
30 Releases
Latest: 1mo ago
v4.17.3Latest
📋 Changes
- REBLUR: fixed a critical bug leading to visual artefacts on some AMD configs, including SteamDeck (it was initially reported as Linux-exclusive issue). Special thanks to @Ganaboy2k and @Aeternitae for triaging! Consoles were not affected (problematic code was PC only)
- RELAX/SH: improved performance in SH mode `5.05 => 4.80 ms` on RTX 4080 @ 1440p
- INTEGRATION: added support for resource residency priority, which is a game changer in VIDMEM-heavy scenarios
- improved robustness (sensitivity to "bad" data)
- IQ improvements and bug fixes
- NRD/SH: removed leftover `NRD_SG_ExtractRoughnessAA`, which could cause material demodulation issues
- NRD/SH: fixed numerical imprecision issues for `~0` roughness in `NRD_SG_ResolveSpecular`
- RELAX/SH: removed dead code responsible for never used and problematic `roughnessAA` and replaced `float4` with `float3` for SH data
- + 8 more
v4.17.2
📋 Changes
- REBLUR: improved performance
- REBLUR: less noise/pixelation on specular lobe boundaries
- REBLUR: generic improvements and simplifications
- REBLUR: hit distances are spatially unprocessed to minimize bias and better preserve shadows (occlusion-only denoisers are not affected)
- REBLUR: more good stuff for (or tested in) Dark Souls 2: PT (#100)
- removed `IN_BASECOLOR_METALNESS` with all dependencies (was largely misunderstood, "specular MV export" feature will be added in the future)
- removed `ReblurHitDistanceParameters::D`, which was a leftover from the antient times, `smc` is used instead under the hood (it's a remapped roughness)
- NRD: `NRD_REJITTER_AMPLITUDE` default value reduced from `PI` to `2` (was "too much")
- + 14 more
v4.17.1
📋 Changes
- REBLUR: many tiny quality improvements and bug fixes requested or inspired by and tested in _Dark Souls 2: PT_
- improved robustness
- updated docs
- NRD: folder `Shader/Include` moved into `Shaders` for more convenient navigation
- NRD: disabled `NRD_BORDER`, `GROUP_X` and `GROUP_Y` macros in C++ code (refactoring)
- NRD: used `NRD_BORDER` explicitly (refactoring)
- NRD: improved grouping of functions in `NRD.hlsli` (no functional changes)
- REBLUR: fixed accessing potentially garbage data in SMEM calculations (properly ignored INF pixels). It was a time-bomb bug, which could fire up if NRD got a non-cleared resource used else-where (for example, a render graph texture reuse)
- + 9 more
v4.17.0
📋 Changes
- improved history confidence support essential for responsive dynamic lighting (see [History confidence](https://github.com/NVIDIA-RTX/NRD?tab=readme-ov-file#history-confidence) section to README and #100)
- significantly improved "SG resolve and re-jittering" essential for maintaining high-quality results when paired with upscalers (DLSS/FSR/XESS/TAAU)
- overhauled curvature calculations: concave mirrors are functional again, convex mirrors look better, wavy surfaces now behave more predictably
- REBLUR: anti-firefly logic is now almost free and enabled by default
- `HitDistanceParameters` renamed to `ReblurHitDistanceParameters` (no changes in meaning)
- `ReblurResponsiveAccumulationSettings` renamed to `ReblurReblurResponsiveAccumulationSettings` (no changes in meaning)
- removed `float3 Rf0` from `NRD_SG_ReJitter`
- added `float3 V, float roughness` to `NRD_SG_ResolveDiffuse`
- + 19 more
v4.16.1
📋 Changes
- NRD: improved `10_10_10_2` precision utilization (implemented #97)
- bug fixes and improvements
- NRD: improved `10_10_10_2` precision utilization
- NRD: hair (strand) denoising tweaks
- REBLUR: internal hair (strand) denoising tweaks
- REBLUR: reviewed `NRD_NORMAL_ENCODING_ERROR` usage
- REBLUR: fixed wrong delivery of "allow CatRom" flag to "TemporalStabilization" pass in diffuse-only denoisers (fixed #96)
- REBLUR: fixed `NRD_NORMAL_ENCODING` not delivered to REBLUR files causing "curr-prev" normal comparisons less accurate (regression)
- + 3 more
v4.16.0
📋 Changes
- removed 160+ hand-crafted shader permutations, generation is done via [ShaderMake](https://github.com/NVIDIA-RTX/ShaderMake)
- improved support of custom shader build systems, see [UPDATE.md/Custom shader compilation](https://github.com/NVIDIA-RTX/NRD/blob/master/UPDATE.md#custom-shader-compilation)
- added an option to get history length in the output `.w` channel (read comments for `OUT_` resources):
- REBLUR: use `ReblurSettings::returnHistoryLengthInsteadOfOcclusion`
- RELAX: returns history length by default (instead of squared variance)
- REBLUR: improved behavior in disocclusions
- REBLUR: increased flexibility of responsive accumulation (see `ResponsiveAccumulationSettings`)
- improvements and bug fixes
- + 20 more
v4.15.1-fixed
Same as v4.15.1, but resolved CMake's inability to shallow-clone a commit hash.
v4.15.1
📋 Changes
- improvements and bug fixes
- Slightly improved performance by compile-time specialization (see new CMake options, no breaking changes)
- Integration: banned `ResourceSnapshot` copying to immediately reveal invalid usage (the structure stores pointers to itself)
- GitHub actions: fixed always successful build
- REBLUR: dynamic `enablePerformanceMode` setting replaced with static `REBLUR_PERFORMANCE_MODE` macro and corresponding CMake option (low run-time value and high maintenance cost)
- CMake: updated ShaderMake and tagged the specific hash to prevent regressions
- CMake: added Arm64 support, including cross compilation
- NRI updated to v174
- + 1 more
v4.15.0
📋 Changes
- NRD: bug fixes and improvements
- NRD INTEGRATION: reworked, improved and simplified usage (added support for auto-wrapping of native objects)
- NRD: samplers moved to a separate set (space) for sharing
- NRD: reworked `DescriptorPoolDesc` (and improved filling)
- NRD: reduced binding insanity
- NRD INTEGRATION: reworked and improved:
- `Destroy + Create` simplified to `Recreate` (`Destroy` is still there)
- added support for D3D11/D3D12/VK native objects (i.e. wrapping to NRI objects implemented "under the hood")
- + 18 more
v4.14.3
📋 Changes
- tagged a specific MathLib release
v4.14.2
📋 Changes
- fixed compilation with GCC
- updated MathLib
v4.14.1
📋 Changes
- resolved issue #87
- bug fixes and improvements
- REBLUR: fixed broken `OCCLUSION` denoisers if `HitDistanceReconstructionMode != OFF`
- REBLUR: `DIRECTIONAL_OCCLUSION` memory usage reduced by 5%
v4.14.0-fixed
📋 Changes
- REBLUR: fixed wrong order of arguments breaking `virtualHistoryAmount` delivery to the Temporal Stabilization pass
- same as v4.14.0
v4.14.0
📋 Changes
- REBLUR: improved performance (+6% in non-SH mode, +10% in SH mode)
- REBLUR: reduced memory usage (-10% in all modes)
- REBLUR: outputs are not used as history buffers anymore! (removed inter-frame dependencies)
- REBLUR: improved IQ by regaining more contact shadows
- RELAX/REBLUR: more flexible `material ID` support
- RELAX/REBLUR: improved specular motion calculation:
- less dependent on curvature related hacks
- better IQ on bumpy and wavy surfaces (common) in exchange of worsened IQ on concave mirrors (rare)
- + 14 more
v4.12.0
📋 Changes
- RELAX/REBLUR: returned back `historyFixBasePixelStride` to maximize flexibility (the default matches old behavior)
- CMake: various improvements
- NRD: improved `NRD_STATIC_LIBRARY` support
- GIT: removed `MathLib` and `ShaderMake` submodules (conditionally downloaded via `FetchContent`)
- CMake: made `Include` folder PUBLIC for comfortable use in the parent project linking NRD
- CMake: adjustments
- CMake: added INTERFACE target `NRDIntegration`
- RELAX/REBLUR: returned back `historyFixBasePixelStride`
- + 3 more
v4.11.4 (fixed)v4.11.4-fixed
REBLUR/RELAX: fixed a critical regression breaking the Pre-pass logic
v4.11.4
📋 Changes
- improved robustness
- NRD: GLSL-related replacements come into play if not already defined
- NRD: improved robustness
- RELAX: fixed touching of pixels outside of denoising range (can be garbage) in "HistoryClamping" pass
- RELAX/REBLUR: fixed touching of wrong data (can be garbage) in "checkerboard" mode on the left side of the screen
- REBLUR: pedantic IQ changes in "TemporalStabilization" pass if "split screen" mode is active
- Integration: NRI updated to v1.161
- updated docs
v4.11.3
📋 Changes
- various improvements
- NRD: improved performance by reusing data already stored in caches, ~3% for REBLUR/RELAX (reversed CTA order for consumers following after producers)
- NRD: added `NRD_MaterialFactors` to `NRD.hlsli` for "no-brain" material demodulation on the application side (without a need to look-copy-paste sample code)
- NRD: improved roughness details by embedding roughness demodulation into `NRD_MaterialFactors`
- NRD: improved constant data reuse between a series of dispatches (significantly reduced constant data traffic)
- Integration: fixed a "non-issue" bug blocking optimizations for constant data reuse between dispatches
- Integration: added ability to restore initial state of resources in `UserPool`
- RELAX/REBLUR: improved curvature calculations for high parallax
- + 6 more
v4.11.2
📋 Changes
- NRD: improved robustness
- REBLUR: improvements
- NRD: clarified importance and valid usage of `CommonSettings::frameIndex`
- NRD: added more debug checks for user provided `CommonSettings`
- NRD: `SetCommonSettings` returns `INVALID_ARGUMENT` if validation of user provided settings fails. It happens only at the end of the function. The return code is informational and doesn't affect function body. In debug builds a failed check invokes `assert` with a description of the problem
- REBLUR: HistoryFix-ed data should not sneak into fast history for low roughness specular (test 115)
- REBLUR: roughness based confidence should affect "vmb" max accumulated frames (actually it's a NOP due to fallback to "smb" logic)
- Integration: logging goes into files instead of `stdout`
- + 1 more
v4.11.1
📋 Changes
- improvements
- REBLUR: cleaner specular disocclusions (tests 65, 66)
- REBLUR: reduced fluffiness and boily look (tests 216, 205)
- REBLUR: reduced overall specular "fatty look" bias, observed under glancing angles (tests 12, 186)
- REBLUR: tweaked antilag default settings (to be more on the safe side, no changes in the logic)
- REBLUR: more flexible `cameraAttachedReflectionMaterialID` support, allowing relative camera motion
- RELAX: hooked up `CommonSettings::cameraAttachedReflectionMaterialID`
v4.11.0
📋 Changes
- NRD: added `GetMaxAccumulatedFrameNum` helper, emphasizing the importance of time-based accumulation, also added `DEFAULT_ACCUMULATION_TIME` constants for all denoisers
- NRD: added `cameraAttachedReflectionMaterialID` to `CommonSettings` (currently used by REBLUR only), helping to deal with mirror reflections of objects attached to the camera. It's a suboptimal solution, future releases will address this problem better
- REBLUR/SIGMA: `stabilizationStrength` replaced with `maxStabilizedFrameNum` for consistency with other accumulation related settings and `GetMaxAccumulatedFrameNum` helper. The progression `0, 1, 2, 3... 9` is more understandable than `1.00, 0.50, 0.33, 0.25... 0.10`
- improvements and bug fixes
- settings related (please, read `UPDATE.md`)
- `NRD_FrontEnd_UnpackNormalAndRoughness` returns `materialID` in the same range, as it was passed to `NRD_FrontEnd_PackNormalAndRoughness`
- NRD: added `GetMaxAccumulatedFrameNum` helper to the main header
- NRD: added `cameraAttachedReflectionMaterialID` to `CommonSettings` (currently used by REBLUR only, WIP longer term)
- + 36 more
v4.10.0
📋 Changes
- SIGMA: notable IQ improvements (less flickering in motion, better responsiveness)
- REBLUR / RELAX: improvements and bug fixes
- NRD integration: API changes, dictated by new optional features
- no changes in NRD \O/
- Integration: read UPDATE.md
- NRD: deleted unnecessary curvature flattening if delta between normals is close to normal ULP
- REBLUR: eliminated repacking for normal-roughness
- REBLUR: improved specular tracking
- + 15 more
v4.9.4
📋 Changes
- Cmake: minor improvements
- updated deps
v4.9.3
📋 Changes
- bug fixes and improvements
- REBLUR: fixed potential edge smoothing
- updated docs
- updated deps
v4.9.2
📋 Changes
- improvements and bug fixes
- `MemoryAllocatorInterface` renamed to `AllocationCallbacks`
- NRD: fixed `NRD_STATIC_LIBRARY`
- REBLUR: improved MV patching (if enabled)
- updated docs
v4.9.1
📋 Changes
- improvements and bug fixes
- NRD: improved per-frame random rotations offer better distribution of samples across frames (barely visible in OCCLUSION and SIGMA)
- REFERENCE: split-screen and resolution scaling related bug fixes
v4.9.0fix
📋 Changes
- GCC: fixed compilation
- updated GitHub workflow
v4.9.0
📋 Changes
- NRD: exposed `CommonSettings::strandMaterialID` and `CommonSettings::strandThickness` to improve denoising on hair and grass
- REBLUR: improved IQ without stabilization pass
- REBLUR: improved behavior in disocclusions and in case of a short history
- REBLUR: improved specular tracking
- REBLUR: exposed new settings `hitDistanceStabilizationStrength` and `fireflySuppressorMinRelativeScale`
- improvements and bug fixes
- REBLUR: changed usage of `maxBlurRadius` and its default value, old values should be multiplied by `2`
- NRD: improved comments in main headers, added missing info
- + 24 more
v4.8.2
📋 Changes
- SIGMA improvements
- SIGMA: fixed 1 pixel wide blur on shadows with penumbra size < 1 pixel
- SIGMA: better behavior for multi-layered shadows (a narrow penumbra inside a wide penumbra)
- SIGMA: reduced potential flickering
- SIGMA: fixed suboptimal output of the blur pass affecting TS pass
- SIGMA: improved weights for moments calculations in TS pass
- NRD: resolved some TODOs
- updated deps
- + 1 more
v4.8.1
📋 Changes
- Bug fixes and improvements
- REBLUR_SH: fixed mis-normalized weighted sum for `diffSh` and `specSh` in `HistoryFix` pass (the regression appeared after finding a better initial weight for the center pixel)
- REBLUR_SH: minor performance optimization in "Temporal Stabilization" pass
- REBLUR_SH: fixed "touching" of `specSh.w` in `HistoryFix` pass, which is "modified roughness" and must not be processed in any way