Skip to content

v4.18.0

Pre-release
Pre-release

Choose a tag to compare

@dzhdanNV dzhdanNV released this 09 Oct 10:39
· 3 commits to master since this 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::motionVectorBias for motion-vector unpacking and de-jittering
  • NRD: fixed frame-time tracking when SetCommonSettings is called repeatedly
  • NRD: added NRD_ComputeCavityShadow for 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_PENUMBRA to preserve darker shadows inside penumbras
  • SHADERS: added Slang compatibility, improved GLSL compatibility, and exposed NRD_SUPPORTS_QUAD_INTRINSICS to 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::rectOrigin to CommonSettings::inputRectOrigin. The offset now applies to IN_ resources, including noisy inputs, except IN_DIFF_CONFIDENCE, IN_SPEC_CONFIDENCE and IN_DISOCCLUSION_THRESHOLD_MIX
  • custom shader resource declarations: NRD_INPUT and NRD_OUTPUT now require a sixth policy argument and must invoke NRD_DECLARE_RESOURCE. Denoiser shader builds must define NRD_INTERNAL and use the updated permutation definitions
  • moved helper scripts from the repository root into Scripts/Windows and Scripts/Linux
  • raised the minimum CMake version from 3.22 to 3.30
  • removed the ill-formed gather-specific NRD_FrontEnd_UnpackRoughness helper; use NRD_FrontEnd_UnpackNormalAndRoughness to decode normal and roughness data

CLOSED:

CONTRIBUTORS:

DETAILS:

  • NRD: added Slang support for shaders
  • NRD: added CommonSettings::outputRectOrigin support
    • renamed rectOrigin to inputRectOrigin
    • added per-resource input, output, permanent and dispatch origin policies
    • applied outputRectOrigin to OUT_ and permanent resource reads and writes
  • NRD: added IN_MV bias via CommonSettings::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 cameraAttachedReflectionMaterialID usage (and updated REBLUR behavior)
  • NRD: fixed a misplaced line to calculate elapsed time between frames rather than between SetCommonSettings calls
  • NRD: fixed behavior of SpecHitDistAveraging if NRD_INF = 1e6 is used in the client's code
  • NRD: fixed non-standard Id usage in SV_*ID semantics
  • NRD: fixed out-of-rect shader behavior (prerequisite for outputRectOrigin support)
  • NRD: honored gRectOrigin over gRectOffset (prerequisite for outputRectOrigin support)
  • NRD: reduced redundant float/int conversions
  • NRD: refactored permutation names
  • NRD: reported an error if NRD_INTERNAL is not defined at NRD compile time (simplified debugging of custom integrations)
  • NRD: updated acos approximation (accurate for small values)
  • NRD: updated the internal timer only when frameIndex changes, so repeated SetCommonSettings calls 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 WithRectOrigin over WithRectOffset
  • REBLUR/RELAX: made accumulation time-based by default to honor uneven frame pacing (see RELAX_FRAME_RATE_COMPENSATION and REBLUR_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_GetNormHitDist must not add EPS to 0 values, because they may be naturally produced by rays pointing inside the surface. REBLUR and RELAX try to ignore 0 hit 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 2x2 bilinear 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 (0 by 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 foreground reflections (for low non-0 roughness)
  • REBLUR: improved specular tracking on camera-attached objects
  • REBLUR: reduced expensive itof conversions 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::rectOrigin usage contract
  • REBLUR: simplified specular temporal accumulation (improved IQ and performance):
    • removed roughness variance calculations
    • tweaked modified roughness usage (roughness from normal variance)
    • allowed smb and vmb UV interpolation when both are valid, with no additional cost
  • RELAX: fixed incorrect roughness weighting in the HitDistanceReconstruction pass
  • RELAX: respected CommonSettings::rectOrigin usage 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_PENUMBRA knob
  • 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 Scripts folder
  • CI: added Windows ARM64 and ARM64EC builds
  • CMake: added NRD_SUPPORTS_QUAD_INTRINSICS
  • CMake: refactored build configuration
  • cleaned up code
  • refactored code
  • updated docs