Repository navigation
v4.18.0
Pre-release
Pre-release
HIGHLIGHTS:
- NRD: added separate input and output viewport origins, including offset history reads and writes, and fixed active-rect handling across denoisers
- NRD: added
CommonSettings::motionVectorBiasfor motion-vector unpacking and de-jittering - NRD: fixed frame-time tracking when
SetCommonSettingsis called repeatedly - NRD: added
NRD_ComputeCavityShadowfor SG-guided cavity shadows and reduced ringing in re-jittering - REBLUR/RELAX: enabled time-based accumulation by default to better handle uneven frame pacing
- REBLUR: improved specular tracking on glossy surfaces and camera-attached objects, disocclusion rejection and curvature estimation
- RELAX: synchronized pre-pass and curvature logic with REBLUR and fixed roughness weighting in hit-distance reconstruction
- SIGMA: added checkerboard support, improved spatial filtering and temporal stabilization, switched to a 12-tap spatial kernel, and added
SIGMA_PRESERVE_SHADOWS_IN_PENUMBRAto preserve darker shadows inside penumbras - SHADERS: added Slang compatibility, improved GLSL compatibility, and exposed
NRD_SUPPORTS_QUAD_INTRINSICSto control quad-intrinsic usage - BUILD/INTEGRATION: updated dependencies and NRI integration, refactored CMake and scripts, and added Windows ARM64 and ARM64EC CI builds
- updated documentation, including tracing versus denoising resolution and guidance on FPS-dependent accumulation
BREAKING CHANGES:
- renamed
CommonSettings::rectOrigintoCommonSettings::inputRectOrigin. The offset now applies toIN_resources, including noisy inputs, exceptIN_DIFF_CONFIDENCE,IN_SPEC_CONFIDENCEandIN_DISOCCLUSION_THRESHOLD_MIX - custom shader resource declarations:
NRD_INPUTandNRD_OUTPUTnow require a sixthpolicyargument and must invokeNRD_DECLARE_RESOURCE. Denoiser shader builds must defineNRD_INTERNALand use the updated permutation definitions - moved helper scripts from the repository root into
Scripts/WindowsandScripts/Linux - raised the minimum CMake version from 3.22 to 3.30
- removed the ill-formed gather-specific
NRD_FrontEnd_UnpackRoughnesshelper; useNRD_FrontEnd_UnpackNormalAndRoughnessto decode normal and roughness data
CLOSED:
CONTRIBUTORS:
DETAILS:
- NRD: added Slang support for shaders
- NRD: added
CommonSettings::outputRectOriginsupport- renamed
rectOrigintoinputRectOrigin - added per-resource input, output, permanent and dispatch origin policies
- applied
outputRectOrigintoOUT_and permanent resource reads and writes
- renamed
- NRD: added
IN_MVbias viaCommonSettings::motionVectorBias(which can also be used for de-jittering) and MV jittering detection in the debug visualization - NRD: added cavity shadow resolve
- NRD: addressed GLSL compatibility issues
- NRD: addressed ringing issues in re-jittering
- NRD: allowed
wave(quad) intrinsics usage on consoles (out of spec usage was resolved!), also allowed explicit enablement/disablement - NRD: clarified expected
cameraAttachedReflectionMaterialIDusage (and updated REBLUR behavior) - NRD: fixed a misplaced line to calculate elapsed time between frames rather than between
SetCommonSettingscalls - NRD: fixed behavior of
SpecHitDistAveragingifNRD_INF = 1e6is used in the client's code - NRD: fixed non-standard
Idusage inSV_*IDsemantics - NRD: fixed out-of-rect shader behavior (prerequisite for
outputRectOriginsupport) - NRD: honored
gRectOriginovergRectOffset(prerequisite foroutputRectOriginsupport) - NRD: reduced redundant float/int conversions
- NRD: refactored permutation names
- NRD: reported an error if
NRD_INTERNALis not defined at NRD compile time (simplified debugging of custom integrations) - NRD: updated
acosapproximation (accurate for small values) - NRD: updated the internal timer only when
frameIndexchanges, so repeatedSetCommonSettingscalls do not skew the frame delta - Docs: added a note about decoupling direct emission from primary surfaces
- Docs: added section
IQ VS PERFORMANCE: TRACING AND DENOISING RESOLUTION(#108) - Docs: clarified FPS-dependent accumulation guidance
- Integration: NRI updated to the latest WIP
- Integration: increased robustness
- Validation: added projection matrix jittering detection
- REBLUR/RELAX: applied time-based scaling to confidence factors only and kept geometry frame-based
- REBLUR/RELAX: honored
WithRectOriginoverWithRectOffset - REBLUR/RELAX: made accumulation time-based by default to honor uneven frame pacing (see
RELAX_FRAME_RATE_COMPENSATIONandREBLUR_FRAME_RATE_COMPENSATION) - REBLUR: added time-based accumulation
- REBLUR: eliminated a redundant roughness gather in
Temporal Accumulation- slightly improved performance
- removed the buggy gather-specific roughness unpacking path
- REBLUR: fixed banding in curvature estimation
- REBLUR: fixed regression -
REBLUR_FrontEnd_GetNormHitDistmust not addEPSto0values, because they may be naturally produced by rays pointing inside the surface. REBLUR and RELAX try to ignore0hit distances if possible (no changes here). The regression negatively affected glossy specular tracking - REBLUR: fixed shader compilation warnings
- REBLUR: fixed variable name shadowing
- REBLUR: improved IQ by adjusting disocclusion threshold computation for a
2x2bilinear footprint:- evaluated normals individually for each sample
- fixed potential specular smearing on surfaces perpendicular to the screen that could become visible during slow movement, such as strafing
- improved diffuse quality by rejecting out-of-lobe samples
- introduced
NRD_USE_PREV_WORLD_SPACE_MATRIX(0by default) to avoid unnecessary computations - removed
smbNavg - minimized usage of
Navg
- REBLUR: improved specular tracking
- better tracking on flat surfaces with thin cavity lines (like tiles)
- less reprojection ghosting left by bright
foregroundreflections (for low non-0 roughness)
- REBLUR: improved specular tracking on camera-attached objects
- REBLUR: reduced expensive
itofconversions in spatial passes - REBLUR: refined curvature estimation
- REBLUR: refined surface and virtual motion selection for camera-attached objects
- REBLUR: refined temporal accumulation
- REBLUR: respected
CommonSettings::rectOriginusage contract - REBLUR: simplified specular temporal accumulation (improved IQ and performance):
- removed roughness variance calculations
- tweaked
modified roughnessusage (roughness from normal variance) - allowed
smbandvmbUV interpolation when both are valid, with no additional cost
- RELAX: fixed incorrect roughness weighting in the
HitDistanceReconstructionpass - RELAX: respected
CommonSettings::rectOriginusage contract - RELAX: synchronized outdated curvature calculation with REBLUR
- RELAX: synchronized outdated pre-pass code with REBLUR
- SIGMA/RELAX: slightly improved performance
- SIGMA: added checkerboard support and integrated recent logic improvements for spatial processing from REBLUR (out-of-screen samples mirroring) (#107)
- SIGMA: decoupled tile early-outs from
NRD_USE_TILE_CHECK - SIGMA: faded blur radius from 2x to 1x instead of 0
- SIGMA: fixed a portability issue
- SIGMA: improved handling of umbras in penumbras
- SIGMA: introduced
SIGMA_PRESERVE_SHADOWS_IN_PENUMBRAknob - SIGMA: made minor general improvements
- SIGMA: refined spatial shadow filtering and checkerboard sample coordinates, and removed the debug switch
- SIGMA: refined temporal stabilization and cleaned up the implementation
- SIGMA: removed experimental penumbra-radius relaxation and simplified umbra protection
- SIGMA: switched spatial processing from 8 to 12 taps
- Scripts: moved scripts to
Scriptsfolder - CI: added Windows
ARM64andARM64ECbuilds - CMake: added
NRD_SUPPORTS_QUAD_INTRINSICS - CMake: refactored build configuration
- cleaned up code
- refactored code
- updated docs