UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ScreenSpaceDenoise.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "RenderGraph.h"
7
8
9class FViewInfo;
11class FLightSceneInfo;
13
14
15// TODO(Denoiser): namespace.
16
18static const int32 kMaxDenoiserBufferProcessingCount = 4;
19
20
39
40
43 SHADER_PARAMETER_RDG_TEXTURE_ARRAY(Texture2D, Textures, [kMaxDenoiserBufferProcessingCount])
45
46
49{
50public:
52 static const int32 kMaxBatchSize = 4;
53
54 // Number of screen space harmonic to be feed when denoising multiple lights.
55 static constexpr int32 kMultiPolychromaticPenumbraHarmonics = 4;
56
57 // Number of border between screen space harmonics are used to denoise harmonical signal.
58 static constexpr int32 kHarmonicBordersCount = kMultiPolychromaticPenumbraHarmonics + 1;
59
60 // Number of texture to store spherical harmonics.
61 static constexpr int32 kSphericalHarmonicTextureCount = 2;
62
63
65 enum class EMode
66 {
67 // Denoising is disabled.
69
70 // Using default denoiser of the renderer.
71 DefaultDenoiser,
72
73 // Using a denoiser from a third party.
74 ThirdPartyDenoiser,
75 };
76
77
83
88
93
97
103
109
116
121
124 // TODO: Merge this back to MaskAndRayHitDistance into RG texture for performance improvement of denoiser's reconstruction pass. May also support RayDistanceOnly for 1spp AO ray tracing.
128
131 // Ambient occlusion mask stored in the red channel as [0; 1].
134
137 // Irradiance in RGB, AO mask in alpha.
139
140 // Ambient occlusion mask stored in the red channel as [0; 1].
142
143 // Hit distance in world space.
146
149 // Irradiance in RGB, AO mask in alpha.
151
152 // Ambient occlusion mask stored in the red channel as [0; 1].
155
158 SHADER_PARAMETER_RDG_TEXTURE_ARRAY(Texture2D, SphericalHarmonic, [kSphericalHarmonicTextureCount])
160
164
165
168 {
169 // Denoiser is unable to denoise that configuration.
170 Bailout,
171
172 // Denoiser only need ray hit distance and the diffuse mask of the penumbra.
173 // FShadowPenumbraInputs::Penumbra: average diffuse penumbra mask in [0; 1]
174 // FShadowPenumbraInputs::ClosestOccluder:
175 // -1: invalid sample
176 // >0: average hit distance of occluding geometry
177 PenumbraAndAvgOccluder,
178
179 PenumbraAndClosestOccluder,
180 };
181
184 {
185 // Number of rays per pixels.
186 int32 RayCountPerPixel = 1;
187 };
188
196
199 {
200 // Resolution fraction the ray tracing is being traced at.
201 float ResolutionFraction = 1.0f;
202
203 // Number of rays per pixels.
204 int32 RayCountPerPixel = 1;
205 };
206
209 {
210 // Resolution fraction the ray tracing is being traced at.
211 float ResolutionFraction = 1.0f;
212
213 // Number of rays per pixels.
214 float RayCountPerPixel = 1.0f;
215 };
216
217
218 static RENDERER_API FHarmonicTextures CreateHarmonicTextures(FRDGBuilder& GraphBuilder, FIntPoint Extent, const TCHAR* DebugName);
219 static RENDERER_API FHarmonicUAVs CreateUAVs(FRDGBuilder& GraphBuilder, const FHarmonicTextures& Textures);
221
222
223
225
227 virtual const TCHAR* GetDebugName() const = 0;
228
231 const FViewInfo& View,
232 const FLightSceneInfo& LightSceneInfo,
233 const FShadowRayTracingConfig& RayTracingConfig) const = 0;
234
236 // TODO(Denoiser): Denoise specular occlusion. But requires refactor of direct lighting code.
238 FRDGBuilder& GraphBuilder,
239 const FViewInfo& View,
241 const FSceneTextureParameters& SceneTextures,
245
248 FRDGBuilder& GraphBuilder,
249 const FViewInfo& View,
251 const FSceneTextureParameters& SceneTextures,
252 const FPolychromaticPenumbraHarmonics& Inputs) const = 0;
253
256 FRDGBuilder& GraphBuilder,
257 const FViewInfo& View,
259 const FSceneTextureParameters& SceneTextures,
261 const FReflectionsRayTracingConfig RayTracingConfig) const = 0;
262
265 FRDGBuilder& GraphBuilder,
266 const FViewInfo& View,
268 const FSceneTextureParameters& SceneTextures,
270 const FReflectionsRayTracingConfig RayTracingConfig) const = 0;
271
274 FRDGBuilder& GraphBuilder,
275 const FViewInfo& View,
277 const FSceneTextureParameters& SceneTextures,
279 const FAmbientOcclusionRayTracingConfig RayTracingConfig) const = 0;
280
283 FRDGBuilder& GraphBuilder,
284 const FViewInfo& View,
286 const FSceneTextureParameters& SceneTextures,
287 const FDiffuseIndirectInputs& Inputs,
288 const FAmbientOcclusionRayTracingConfig Config) const = 0;
289
292 FRDGBuilder& GraphBuilder,
293 const FViewInfo& View,
295 const FSceneTextureParameters& SceneTextures,
296 const FDiffuseIndirectInputs& Inputs,
297 const FAmbientOcclusionRayTracingConfig Config) const = 0;
298
301 FRDGBuilder& GraphBuilder,
302 const FViewInfo& View,
304 const FSceneTextureParameters& SceneTextures,
305 const FDiffuseIndirectHarmonic& Inputs,
306 const HybridIndirectLighting::FCommonParameters& CommonDiffuseParameters) const = 0;
307
311 FRDGBuilder& GraphBuilder,
312 const FViewInfo& View,
314 const FSceneTextureParameters& SceneTextures,
315 const FDiffuseIndirectInputs& Inputs,
316 const FAmbientOcclusionRayTracingConfig Config) const = 0;
317
319 static RENDERER_API FSSDSignalTextures DenoiseIndirectProbeHierarchy(
320 FRDGBuilder& GraphBuilder,
321 const FViewInfo& View,
323 const FSceneTextureParameters& SceneTextures,
325 FRDGTextureRef CompressedDepthTexture,
326 FRDGTextureRef CompressedShadingModelTexture);
327
329 static RENDERER_API const IScreenSpaceDenoiser* GetDefaultDenoiser();
330
332 static RENDERER_API EMode GetDenoiserMode(const TAutoConsoleVariable<int32>& CVar);
333
335 static RENDERER_API FDiffuseIndirectOutputs DenoiseSkyLight(
336 FRDGBuilder& GraphBuilder,
339 const FSceneTextureParameters& SceneTextures,
340 const FDiffuseIndirectInputs& Inputs,
342
343}; // class IScreenSpaceDenoiser
344
345
346// The interface for the renderer to denoise what it needs, Plugins can come and point this to custom interface.
348
349extern int GetReflectionsDenoiserMode();
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EShaderPlatform
Definition RHIShaderPlatform.h:11
const IScreenSpaceDenoiser * GScreenSpaceDenoiser
Definition ScreenSpaceDenoise.cpp:142
int GetReflectionsDenoiserMode()
Definition ScreenSpaceDenoise.cpp:3033
#define SHADER_PARAMETER_RDG_TEXTURE(ShaderType, MemberName)
Definition ShaderParameterMacros.h:1752
#define SHADER_PARAMETER_RDG_TEXTURE_ARRAY(ShaderType, MemberName, ArrayDecl)
Definition ShaderParameterMacros.h:1755
#define SHADER_PARAMETER_RDG_TEXTURE_UAV_ARRAY(ShaderType, MemberName, ArrayDecl)
Definition ShaderParameterMacros.h:1791
#define BEGIN_SHADER_PARAMETER_STRUCT(StructTypeName, DllStorage)
Definition ShaderParameterMacros.h:1482
#define END_SHADER_PARAMETER_STRUCT()
Definition ShaderParameterMacros.h:1485
#define SHADER_PARAMETER_STRUCT(StructType, MemberName)
Definition ShaderParameterMacros.h:1847
#define SHADER_PARAMETER(MemberType, MemberName)
Definition ShaderParameterMacros.h:1684
Definition LightSceneInfo.h:208
Definition RenderGraphBuilder.h:49
Definition RenderGraphResources.h:571
Definition SceneRendering.h:1132
Definition ScreenSpaceDenoise.h:49
virtual FDiffuseIndirectOutputs DenoiseSkyLight(FRDGBuilder &GraphBuilder, const FViewInfo &View, FPreviousViewInfo *PreviousViewInfos, const FSceneTextureParameters &SceneTextures, const FDiffuseIndirectInputs &Inputs, const FAmbientOcclusionRayTracingConfig Config) const =0
virtual const TCHAR * GetDebugName() const =0
EMode
Definition ScreenSpaceDenoise.h:66
virtual FAmbientOcclusionOutputs DenoiseAmbientOcclusion(FRDGBuilder &GraphBuilder, const FViewInfo &View, FPreviousViewInfo *PreviousViewInfos, const FSceneTextureParameters &SceneTextures, const FAmbientOcclusionInputs &ReflectionInputs, const FAmbientOcclusionRayTracingConfig RayTracingConfig) const =0
virtual FPolychromaticPenumbraOutputs DenoisePolychromaticPenumbraHarmonics(FRDGBuilder &GraphBuilder, const FViewInfo &View, FPreviousViewInfo *PreviousViewInfos, const FSceneTextureParameters &SceneTextures, const FPolychromaticPenumbraHarmonics &Inputs) const =0
virtual ~IScreenSpaceDenoiser()
Definition ScreenSpaceDenoise.h:224
virtual void DenoiseShadowVisibilityMasks(FRDGBuilder &GraphBuilder, const FViewInfo &View, FPreviousViewInfo *PreviousViewInfos, const FSceneTextureParameters &SceneTextures, const TStaticArray< FShadowVisibilityParameters, IScreenSpaceDenoiser::kMaxBatchSize > &InputParameters, const int32 InputParameterCount, TStaticArray< FShadowVisibilityOutputs, IScreenSpaceDenoiser::kMaxBatchSize > &Outputs) const =0
virtual FReflectionsOutputs DenoiseReflections(FRDGBuilder &GraphBuilder, const FViewInfo &View, FPreviousViewInfo *PreviousViewInfos, const FSceneTextureParameters &SceneTextures, const FReflectionsInputs &ReflectionInputs, const FReflectionsRayTracingConfig RayTracingConfig) const =0
virtual EShadowRequirements GetShadowRequirements(const FViewInfo &View, const FLightSceneInfo &LightSceneInfo, const FShadowRayTracingConfig &RayTracingConfig) const =0
virtual FSSDSignalTextures DenoiseDiffuseIndirectHarmonic(FRDGBuilder &GraphBuilder, const FViewInfo &View, FPreviousViewInfo *PreviousViewInfos, const FSceneTextureParameters &SceneTextures, const FDiffuseIndirectHarmonic &Inputs, const HybridIndirectLighting::FCommonParameters &CommonDiffuseParameters) const =0
virtual FReflectionsOutputs DenoiseWaterReflections(FRDGBuilder &GraphBuilder, const FViewInfo &View, FPreviousViewInfo *PreviousViewInfos, const FSceneTextureParameters &SceneTextures, const FReflectionsInputs &ReflectionInputs, const FReflectionsRayTracingConfig RayTracingConfig) const =0
virtual bool SupportsScreenSpaceDiffuseIndirectDenoiser(EShaderPlatform Platform) const =0
virtual FSSDSignalTextures DenoiseDiffuseIndirect(FRDGBuilder &GraphBuilder, const FViewInfo &View, FPreviousViewInfo *PreviousViewInfos, const FSceneTextureParameters &SceneTextures, const FDiffuseIndirectInputs &Inputs, const FAmbientOcclusionRayTracingConfig Config) const =0
virtual FSSDSignalTextures DenoiseScreenSpaceDiffuseIndirect(FRDGBuilder &GraphBuilder, const FViewInfo &View, FPreviousViewInfo *PreviousViewInfos, const FSceneTextureParameters &SceneTextures, const FDiffuseIndirectInputs &Inputs, const FAmbientOcclusionRayTracingConfig Config) const =0
EShadowRequirements
Definition ScreenSpaceDenoise.h:168
Definition IConsoleManager.h:1792
Definition StaticArray.h:26
Definition ScreenSpaceDenoise.h:22
void SetupCommonShaderParameters(const FViewInfo &View, const FSceneTextureParameters &SceneTextures, const FIntRect DenoiserFullResViewport, float DenoisingResolutionFraction, FCommonShaderParameters *OutPublicCommonParameters)
Definition SceneRendering.h:975
Definition ScreenSpaceDenoise.h:199
Definition ScreenSpaceDenoise.h:184
Definition ScreenSpaceDenoise.h:191
FShadowRayTracingConfig RayTracingConfig
Definition ScreenSpaceDenoise.h:193
FShadowVisibilityInputs InputTextures
Definition ScreenSpaceDenoise.h:194
Definition IntPoint.h:25