This guide has been designed to simplify migration to a newer version.
(based on v2.12)
NRD_USE_MATERIAL_ID_AWARE_FILTERING
renamed toNRD_USE_MATERIAL_ID
NRD_NORMAL_ENCODING
simplified toNRD_NORMAL_ENCODING_UNORM
andNRD_NORMAL_ENCODING_OCT
NRD_MATERIAL_ID_AWARE_FILTERING
renamed toNRD_USE_MATERIAL_ID
- changed parameters in
NRD_GetCorrectedHitDist
- REFERENCE:
- denoiser input & output changed to dedicated
IN_RADIANCE
andOUT_RADIANCE
- denoiser input & output changed to dedicated
- REBLUR:
- settings collapsed to
ReblurSettings
shared across all REBLUR denoisers LobeTrimmingParameters
renamed toSpecularLobeTrimmingParameters
normalWeightStrictness
replaced bylobeAngleFraction
(a different value with similar meaning)materialMask
replaced withenableMaterialTestForDiffuse
andenableMaterialTestForSpecular
- exposed
minConvergedStateBaseRadiusScale
- exposed
roughnessFraction
- exposed
responsiveAccumulationRoughnessThreshold
- exposed
inputMix
- exposed
enablePerformanceMode
- settings collapsed to
- RELAX:
rejectDiffuseHistoryNormalThreshold
renamed todiffuseHistoryRejectionNormalThreshold
enableSkipReprojectionTestWithoutMotion
renamed toenableReprojectionTestSkippingWithoutMotion
phiNormal
replaced bydiffuseLobeAngleFraction
(a different value with similar meaning)- exposed
roughnessFraction
- exposed
enableMaterialTest
NRD requires explicit definitions of NRD_USE_OCT_NORMAL_ENCODING
and NRD_USE_MATERIAL_ID
to avoid a potential confusion when NRD was compiled using one set of values, but an application uses other values. The CMake file has been modified to simplify NRD integration into projects, where it is used as a Git submodule. Now these macro definitions are exposed as Cmake options.
- removed
PrePassMode
- added
maxSupportedMaterialBitNum
andisCompiledWithOctPackNormalEncoding
toLibraryDesc
- added optional
worldPrevToWorldMatrix
toCommonSettings
- REBLUR:
- exposed
diffusePrepassBlurRadius
andspecularPrepassBlurRadius
- exposed
enableAdvancedPrepass
matching previously usedPrePassMode::ADVANCED
- exposed
enableHitDistanceReconstruction
- exposed
- RELAX:
- removed
diffuseHistoryRejectionNormalThreshold
- removed
minLuminanceWeight
and added separateddiffuseMinLuminanceWeight
andspecularMinLuminanceWeight
- exposed
enableSpecularHitDistanceReconstruction
- removed
- exposed
HitDistanceReconstructionMode
- REBLUR:
enableHitDistanceReconstruction
replaced withhitDistanceReconstructionMode
- removed
residualNoiseLevel
- RELAX:
enableSpecularHitDistanceReconstruction
replaced withhitDistanceReconstructionMode
- exposed
REBLUR_DIFFUSE_SH
,REBLUR_SPECULAR_SH
andREBLUR_DIFFUSE_SPECULAR_SH
denoisers - NRD.hlsli:
REBLUR_FrontEnd_PackRadianceAndHitDist
renamed toREBLUR_FrontEnd_PackRadianceAndNormHitDist
REBLUR_FrontEnd_PackDirectionAndHitDist
renamed toREBLUR_FrontEnd_PackDirectionAndNormHitDist
REBLUR_BackEnd_UnpackRadianceAndHitDist
renamed toREBLUR_BackEnd_UnpackRadianceAndNormHitDist
REBLUR_BackEnd_UnpackDirectionAndHitDist
renamed toREBLUR_BackEnd_UnpackDirectionAndNormHitDist
RELAX_BackEnd_UnpackRadianceAndHitDist
renamed toRELAX_BackEnd_UnpackRadiance
- removed
NRD_GetCorrectedHitDist
- API:
- exposed miscellaneous function
GetMethodString
- exposed miscellaneous function
- REBLUR:
- removed
inputMix
- removed
- RELAX:
- exposed
confidenceDrivenRelaxationMultiplier
- exposed
confidenceDrivenLuminanceEdgeStoppingRelaxation
- exposed
confidenceDrivenNormalEdgeStoppingRelaxation
- exposed
- NRD.hlsli:
REBLUR_FrontEnd_PackDirectionAndNormHitDist
renamed toREBLUR_FrontEnd_PackDirectionalOcclusion
- REBLUR:
- exposed
historyFixFrameNum
- exposed
historyFixStrideBetweenSamples
- removed
historyFixStrength
- exposed
- RELAX:
disocclusionFixEdgeStoppingNormalPower
renamed tohistoryFixEdgeStoppingNormalPower
disocclusionFixMaxRadius
renamed tohistoryFixStrideBetweenSamples
disocclusionFixNumFramesToFix
renamed tohistoryFixFrameNum
- REBLUR:
- Removed
SpecularLobeTrimmingParameters
- Removed
- NRD.hlsli:
- Removed
NRD_GetTrimmingFactor
- Removed
NRD_USE_OCT_NORMAL_ENCODING
and NRD_USE_MATERIAL_ID
replaced with more explicit NRD_NORMAL_ENCODING
and NRD_ROUGHNESS_ENCODING
to offer more encoding variants out of the box.
- API:
- removed
maxSupportedMaterialBitNum
andisCompiledWithOctPackNormalEncoding
fromLibraryDesc
- added
normalEncoding
androughnessEncoding
toLibraryDesc
- removed
- REBLUR:
- Removed
enableAdvancedPrepass
- Removed
Introduced optional NRDEncoding.hlsli
file which can be included prior NRD.hlsli
to properly setup NRD encoding for usage outside of NRD project, if encoding variants are not set via Cmake parameters. Also introduced optional IN_DISOCCLUSION_THRESHOLD_MIX
which allows to smoothly mix CommonSettings::disocclusionThreshold
(0) into CommonSettings::disocclusionThresholdAlternate
(1).
- API:
- Exposed
IN_DISOCCLUSION_THRESHOLD_MIX
,CommonSettings::disocclusionThresholdAlternate
&CommonSettings::isDisocclusionThresholdMixAvailable
- Exposed
- REBLUR:
- Removed
minConvergedStateBaseRadiusScale
- Removed
maxAdaptiveRadiusScale
- Removed
Introduced optional OUT_VALIDATION
output, which contains debug visualization layer if CommonSettings::enableValidation = true
.
- API:
- Removed
DenoiserCreationDesc::enableValidation
- Exposed
CommonSettings::enableValidation
- Extened
CommonSettings::motionVectorScale
to 3 floats
- Removed
Since NRD tracks specular motion, now, if requested, it can modify provided diffuse-like motion in IN_MV
with internally computed specular-like motion if specularity is high. For this purpose an optional IN_BASECOLOR_METALNESS
input has been added. This feature improves behavior of spatio-temporal upscalers, like TAA or DLSS.
- API:
- Introduced
CommonSettings::isBaseColorMetalnessAvailable
- Reworked
DenoiserDesc
to clearly indicate that there are 3 types of resources each of which "sits" in a predefinedspace
(set
in VK):- constant buffer - binding is shared across all pipelines
- samplers - bindings are shared across all pipelines
- resources - bindings vary per pipeline
- Name changes:
isHistoryConfidenceInputsAvailable
=>isHistoryConfidenceAvailable
Resource
=>ResourceDesc
DescriptorRangeDesc
=>ResourceRangeDesc
ComputeShader
=>ComputeShaderDesc
DescriptorSetDesc
=>DescriptorPoolDesc
- all
fooNum
=>foosNum
GetComputeDispatches
return type changed tovoid
- Introduced
- REBLUR:
- Exposed
specularProbabilityThresholdsForMvModification
to control diffuse / specular motion mixing
- Exposed
- RELAX:
- Removed
enableSpecularVirtualHistoryClamping
- Removed
SH (spherical harmonics) have been replaced with SG (spherical gaussians). It unlocks physically-based high quality diffuse & specular resolve. The following functions have been added to NRD.hlsli
(or renamed):
NRD_SG_ExtractColor
- extracts unresolved denoised radianceNRD_SG_ExtractDirection
- extracts light dominant directionNRD_SG_ExtractRoughnessAA
- extracts modified roughness (increased in areas with high normal variance)NRD_SG_ResolveDiffuse
- reconstructs diffuse macro detailsNRD_SG_ResolveSpecular
- reconstructs specular macro detailsNRD_SG_ReJitter
- reconstructs diffuse & specular micro details (resurrects jitter vanished out after denoising)NRD_SH_ResolveDiffuse
- reconstructs diffuse macro details using SH resolve (for comparison only)NRD_SH_ResolveSpecular
- reconstructs specular macro details using SH resolve (for comparison only)
A single NRD instance can now include any combination of denoisers, including repeating ones (for example, RELAX_DIFFUSE
, RELAX_DIFFUSE
and SIGMA_SHADOW
). Transient memory pool is internally optimized to reduce memory consumption.
- API:
- Introduced
Identifier
to distinguish one denoiser in the instance from another one - Introduced
SetCommonSettings
GetComputeDispatches
now expects a list of identifiers, specifying which denoisers collect dispatches for- Added explicit
CommonSettings::cameraJitterPrev
andCommonSettings::resolutionScalePrev
(sinceSetCommonSettings
can be called several times per frame) - Name changes (including sub-name usages):
Denoiser
=>Instance
Method
=>Denoiser
fullResolutionWidth
=>renderWidth
fullResolutionHeight
=>renderHeight
- Introduced
- NRD INTEGRATION:
- Introduced
NewFrame
- Introduced
SetCommonSettings
- Introduced
- RELAX:
- Introduced
AntilagSettings
- Introduced
- REBLUR:
- Removed
enableReferenceAccumulation
- Introduced
usePrepassOnlyForSpecularMotionEstimation
AntilagIntensitySettings
andAntilagHitDistanceSettings
replaced with simplerReblurAntilagSettings
- Removed