UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Substrate.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
7#include "MeshPassProcessor.h"
8#include "UnifiedBuffer.h"
9#include "RHIUtilities.h"
10#include "SubstrateDefinitions.h"
11#include "GBufferInfo.h"
12#include "RendererUtils.h"
14#include "SceneView.h"
15
16// Forward declarations.
17class FScene;
18class FSceneRenderer;
19class FRDGBuilder;
20struct FDBufferTextures;
26
28 SHADER_PARAMETER(uint32, MaxBytesPerPixel)
29 SHADER_PARAMETER(uint32, MaxClosurePerPixel)
30 SHADER_PARAMETER(uint32, bRoughDiffuse)
31 SHADER_PARAMETER(uint32, PeelLayersAboveDepth)
32 SHADER_PARAMETER(uint32, bRoughnessTracking)
33 SHADER_PARAMETER(uint32, bStochasticLighting)
35
38 SHADER_PARAMETER(int32, SliceStoringDebugSubstrateTreeDataWithoutMRT)
39 SHADER_PARAMETER(int32, FirstSliceStoringSubstrateSSSDataWithoutMRT)
40 SHADER_PARAMETER_RDG_TEXTURE_UAV(RWTexture2DArray<uint>, MaterialTextureArrayUAVWithoutRTs)
41 SHADER_PARAMETER_RDG_TEXTURE_UAV(RWTexture2D<float3>, OpaqueRoughRefractionTextureUAV)
43
46 SHADER_PARAMETER(int32, FirstSliceStoringSubstrateSSSData)
50
54
58 SHADER_PARAMETER(uint32, TileEncoding)
61
62// This parameter struct is declared with RENDERER_API even though it is not public. This is
63// to workaround other modules doing 'private include' of the Renderer module
66 SHADER_PARAMETER(int32, SliceStoringDebugSubstrateTreeData)
67 SHADER_PARAMETER(int32, FirstSliceStoringSubstrateSSSData)
68 SHADER_PARAMETER(uint32, TileSize)
70 SHADER_PARAMETER(FIntPoint, TileCount)
73 SHADER_PARAMETER_RDG_TEXTURE(Texture2D<float3>, OpaqueRoughRefractionTexture)
74 SHADER_PARAMETER_RDG_TEXTURE(Texture2D<uint>, ClosureOffsetTexture)
76 SHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint>, ClosureTileCountBuffer)
77 SHADER_PARAMETER_RDG_TEXTURE(Texture2D<uint4>, SampledMaterialTexture)
79
82 SHADER_PARAMETER(int32, FirstSliceStoringSubstrateSSSData)
86
90
92{
93 // Track max BytesPerPixel / ClosurePerPixel amoung all views
94 uint32 ViewsMaxBytesPerPixel = 0;
95 uint32 ViewsMaxClosurePerPixel = 0;
96
97 // Track max BytesPerPixel / ClosurePerPixel ever encountered since the scene was created
98 uint32 PersistentMaxBytesPerPixel = 0;
99 uint32 PersistentMaxClosurePerPixel = 0;
100 uint8 UsesTileTypeMask = 0;
101 bool bUsesAnisotropy = false;
102
103 // Current max BytesPerPixel / ClosurePerPixel
104 uint32 EffectiveMaxBytesPerPixel = 0;
105 uint32 EffectiveMaxClosurePerPixel = 0;
106
107 int32 PeelLayersAboveDepth = -1;
108 bool bRoughDiffuse = false;
109 bool bRoughnessTracking = false;
110 bool bStochasticLighting = false;
111
112 int32 SliceStoringDebugSubstrateTreeDataWithoutMRT = -1;
113 int32 SliceStoringDebugSubstrateTreeData = -1;
114 int32 FirstSliceStoringSubstrateSSSDataWithoutMRT = -1;
115 int32 FirstSliceStoringSubstrateSSSData = -1;
116
117 // Resources allocated and updated each frame
118
119 FRDGTextureRef MaterialTextureArray = nullptr;
120 FRDGTextureUAVRef MaterialTextureArrayUAVWithoutRTs = nullptr;
121 FRDGTextureUAVRef MaterialTextureArrayUAV = nullptr;
122 FRDGTextureSRVRef MaterialTextureArraySRV = nullptr;
123
124 FRDGTextureRef TopLayerTexture = nullptr;
125 FRDGTextureRef OpaqueRoughRefractionTexture = nullptr;
126
127 FRDGTextureUAVRef TopLayerTextureUAV = nullptr;
128 FRDGTextureUAVRef OpaqueRoughRefractionTextureUAV = nullptr;
129
130 FRDGTextureRef ClosureOffsetTexture = nullptr;
131
132 FRDGTextureRef SampledMaterialTexture = nullptr;
133
134 // Used when the subsurface luminance is separated from the scene color
135 FRDGTextureRef SeparatedSubSurfaceSceneColor = nullptr;
136
137 // Used for Luminance that should go through opaque rough refraction (when under a top layer interface)
138 FRDGTextureRef SeparatedOpaqueRoughRefractionSceneColor = nullptr;
139
140 //Public facing minimal uniform data.
142};
143
181
182// The substrate debug data for each view
209
210namespace Substrate
211{
212constexpr uint32 StencilBit_Fast = 0x10; // In sync with SceneRenderTargets.h - GET_STENCIL_BIT_MASK(STENCIL_SUBSTRATE_FASTPATH)
213constexpr uint32 StencilBit_Single = 0x20; // In sync with SceneRenderTargets.h - GET_STENCIL_BIT_MASK(STENCIL_SUBSTRATE_SINGLEPATH)
214constexpr uint32 StencilBit_Complex = 0x40; // In sync with SceneRenderTargets.h - GET_STENCIL_BIT_MASK(STENCIL_SUBSTRATE_COMPLEX)
215constexpr uint32 StencilBit_ComplexSpecial = 0x80; // In sync with SceneRenderTargets.h - GET_STENCIL_BIT_MASK(STENCIL_SUBSTRATE_COMPLEX_SPECIAL)
216
219UE_DEPRECATED(5.7, "Please, use the GetSubstrateUsesTileType() function instead")
221bool GetSubstrateUsesAnisotropy(const FViewInfo& View);
224bool GetSubstrateUsesTileType(const FViewInfo& View, ESubstrateTileType TileType);
225
226void InitialiseSubstrateFrameSceneData(FRDGBuilder& GraphBuilder, FSceneRenderer& SceneRenderer);
227
231TRDGUniformBufferRef<FSubstrateGlobalUniformParameters> BindSubstrateGlobalUniformParameters(const FViewInfo& View);
232
235
238
239void AddSubstrateMaterialClassificationPass(FRDGBuilder& GraphBuilder, const FMinimalSceneTextures& SceneTextures, const FDBufferTextures& DBufferTextures, const TArray<FViewInfo>& Views);
240void AddSubstrateDBufferPass(FRDGBuilder& GraphBuilder, const FSceneTextures& SceneTextures, const FDBufferTextures& DBufferTextures, const TArray<FViewInfo>& Views);
241
242void AddSubstrateStencilPass(FRDGBuilder& GraphBuilder, const TArray<FViewInfo>& Views, const FMinimalSceneTextures& SceneTextures);
243void AddSubstrateSampleMaterialPass(FRDGBuilder& GraphBuilder, const FScene* Scene, const FMinimalSceneTextures& SceneTextures, const TArray<FViewInfo>& Views);
244void AddSubstrateMaterialClassificationIndirectArgsPass(FRDGBuilder& GraphBuilder, const FViewInfo& View, ERDGPassFlags ComputePassFlags);
245
247 FRDGBuilder& GraphBuilder,
248 FSceneTextures& SceneTextures,
249 TArrayView<const FViewInfo> Views);
250
253
255
257{
260
261 class FEnableDebug : SHADER_PERMUTATION_BOOL("PERMUTATION_ENABLE_DEBUG");
262 class FEnableTexCoordScreenVector : SHADER_PERMUTATION_BOOL("PERMUTATION_ENABLE_TEXCOORD_SCREENVECTOR");
263 using FPermutationDomain = TShaderPermutationDomain<FEnableDebug, FEnableTexCoordScreenVector>;
264
265 BEGIN_SHADER_PARAMETER_STRUCT(FParameters, )
266 SHADER_PARAMETER_STRUCT_REF(FViewUniformShaderParameters, View)
267 SHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint>, TileListBuffer)
268 SHADER_PARAMETER(uint32, TileListBufferOffset)
269 SHADER_PARAMETER(uint32, TileEncoding)
270 RDG_BUFFER_ACCESS(TileIndirectBuffer, ERHIAccess::IndirectArgs)
272
273 static bool ShouldCompilePermutation(const FGlobalShaderPermutationParameters& Parameters);
274 static void ModifyCompilationEnvironment(const FGlobalShaderPermutationParameters& Parameters, FShaderCompilerEnvironment& OutEnvironment);
275};
276
277FSubstrateTileParameter SetTileParameters(FRDGBuilder& GraphBuilder, const FViewInfo& View, const ESubstrateTileType Type);
278FSubstrateTilePassVS::FParameters SetTileParameters(FRDGBuilder& GraphBuilder, const FViewInfo& View, const ESubstrateTileType Type, EPrimitiveType& PrimitiveType);
279FSubstrateTilePassVS::FParameters SetTileParameters(const FViewInfo& View, const ESubstrateTileType Type, EPrimitiveType& PrimitiveType);
280uint32 TileTypeDrawIndirectArgOffset(const ESubstrateTileType Type);
281uint32 TileTypeDispatchIndirectArgOffset(const ESubstrateTileType Type);
282
283bool IsStochasticLightingActive(EShaderPlatform In);
284
285uint32 GetClosureTileIndirectArgsOffset(uint32 InDownsampleFactor);
286
288 FRDGBuilder& GraphBuilder,
289 TArray<FViewInfo>& Views,
290 const FSceneTextures& InSceneTextures,
291 FDBufferTextures& DBufferTextures,
292 FDecalVisibilityTaskData* DecalVisibility,
293 FInstanceCullingManager& InstanceCullingManager,
294 const FSubstrateSceneData& SubstrateSceneData);
295
296
297class FSubstrateTileType : SHADER_PERMUTATION_INT("SUBSTRATE_TILETYPE", 4);
298bool ShouldCompileSubstrateTileTypePermutations(const int32 SubstrateTileType, const EShaderPlatform Platform);
299
300}; // namespace Substrate
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
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
EGBufferLayout
Definition GBufferInfo.h:107
#define DECLARE_GLOBAL_SHADER(ShaderClass)
Definition GlobalShader.h:408
FInt32Point FIntPoint
Definition MathFwd.h:124
const bool
Definition NetworkReplayStreaming.h:178
ERHIAccess
Definition RHIAccess.h:11
EShaderPlatform
Definition RHIShaderPlatform.h:11
ERDGPassFlags
Definition RenderGraphDefinitions.h:128
#define SHADER_PARAMETER_RDG_BUFFER_SRV(ShaderType, MemberName)
Definition ShaderParameterMacros.h:1800
#define SHADER_PARAMETER_RDG_TEXTURE(ShaderType, MemberName)
Definition ShaderParameterMacros.h:1752
#define END_GLOBAL_SHADER_PARAMETER_STRUCT
Definition ShaderParameterMacros.h:1669
#define RDG_BUFFER_ACCESS(MemberName, Access)
Definition ShaderParameterMacros.h:1923
#define BEGIN_SHADER_PARAMETER_STRUCT(StructTypeName, DllStorage)
Definition ShaderParameterMacros.h:1482
#define SHADER_PARAMETER_STRUCT_REF(StructType, MemberName)
Definition ShaderParameterMacros.h:1909
#define SHADER_PARAMETER_RDG_TEXTURE_UAV(ShaderType, MemberName)
Definition ShaderParameterMacros.h:1788
#define BEGIN_GLOBAL_SHADER_PARAMETER_STRUCT
Definition ShaderParameterMacros.h:1663
#define SHADER_PARAMETER_STRUCT_INCLUDE(StructType, MemberName)
Definition ShaderParameterMacros.h:1895
#define END_SHADER_PARAMETER_STRUCT()
Definition ShaderParameterMacros.h:1485
#define SHADER_PARAMETER(MemberType, MemberName)
Definition ShaderParameterMacros.h:1684
#define SHADER_USE_PARAMETER_STRUCT(ShaderClass, ShaderParentClass)
Definition ShaderParameterStruct.h:62
#define SHADER_PERMUTATION_INT(InDefineName, Count)
Definition ShaderPermutation.h:492
#define SHADER_PERMUTATION_BOOL(InDefineName)
Definition ShaderPermutation.h:482
ESubstrateTileType
Definition SubstrateMaterialShared.h:67
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition DecalRenderingShared.h:95
Definition GlobalShader.h:269
Definition InstanceCullingManager.h:45
Definition RenderGraphResources.h:1426
Definition RenderGraphResources.h:1452
Definition RenderGraphResources.h:1321
Definition RenderGraphBuilder.h:49
Definition RenderGraphResources.h:839
Definition RenderGraphResources.h:905
Definition RenderGraphResources.h:571
Definition SceneRendering.h:2080
Definition ScenePrivate.h:2875
Definition SceneRendering.h:1132
Definition Substrate.h:257
Definition ArrayView.h:139
Definition Array.h:670
Definition Queue.h:48
Definition RenderGraphResources.h:251
Definition RenderUtils.cpp:2080
bool GetSubstrateUsesComplexSpecialPath(const FViewInfo &View)
Definition Substrate.cpp:213
void AddSubstrateMaterialClassificationIndirectArgsPass(FRDGBuilder &GraphBuilder, const FViewInfo &View, ERDGPassFlags ComputePassFlags)
Definition Substrate.cpp:1615
void BindSubstrateForwardPasslUniformParameters(FRDGBuilder &GraphBuilder, const FViewInfo &View, FSubstrateForwardPassUniformParameters &OutSubstrateUniformParameters)
Definition Substrate.cpp:798
uint32 GetSubstrateMaxClosureCount(const FViewInfo &View)
Definition Substrate.cpp:158
bool UsesSubstrateMaterialBuffer(EShaderPlatform In)
Definition Substrate.cpp:143
bool ShouldRenderSubstrateDebugPasses(const FViewInfo &View)
Definition SubstrateVisualize.cpp:1446
bool UsesStochasticLightingClassification(EShaderPlatform InPlatform)
Definition Substrate.cpp:245
void AddSubstrateDBufferPass(FRDGBuilder &GraphBuilder, const FSceneTextures &SceneTextures, const FDBufferTextures &DBufferTextures, const TArray< FViewInfo > &Views)
Definition Substrate.cpp:1792
void AddSubstrateMaterialClassificationPass(FRDGBuilder &GraphBuilder, const FMinimalSceneTextures &SceneTextures, const FDBufferTextures &DBufferTextures, const TArray< FViewInfo > &Views)
Definition Substrate.cpp:1638
void AppendSubstrateMRTs(const FSceneRenderer &SceneRenderer, uint32 &RenderTargetCount, TArrayView< FTextureRenderTargetBinding > RenderTargets)
Definition Substrate.cpp:1549
uint32 TileTypeDispatchIndirectArgOffset(const ESubstrateTileType Type)
Definition Substrate.cpp:1285
void BindSubstratePublicGlobalUniformParameters(FRDGBuilder &GraphBuilder, const FSubstrateSceneData *SubstrateSceneData, FSubstratePublicParameters &OutSubstrateParameters)
Definition Substrate.cpp:861
constexpr uint32 StencilBit_ComplexSpecial
Definition Substrate.h:215
void AddProcessAndPrintSubstrateMaterialPropertiesPasses(FRDGBuilder &GraphBuilder, const FViewInfo &View, FRDGTextureRef SceneColorTexture, EShaderPlatform Platform, FSubstrateViewDebugData::FTransientPixelDebugBuffer &NewSubstratePixelDebugBuffer)
Definition SubstrateVisualize.cpp:281
void AddSubstrateStencilPass(FRDGBuilder &GraphBuilder, const TArray< FViewInfo > &Views, const FMinimalSceneTextures &SceneTextures)
Definition Substrate.cpp:1446
void AddSubstrateOpaqueRoughRefractionPasses(FRDGBuilder &GraphBuilder, FSceneTextures &SceneTextures, TArrayView< const FViewInfo > Views)
Definition SubstrateRoughRefraction.cpp:66
FIntPoint GetSubstrateTextureResolution(const FViewInfo &View, const FIntPoint &InResolution)
Definition Substrate.cpp:183
void BindSubstrateMobileForwardPasslUniformParameters(FRDGBuilder &GraphBuilder, const FViewInfo &View, FSubstrateMobileForwardPassUniformParameters &OutSubstrateUniformParameters)
Definition Substrate.cpp:831
void AddSubstrateSampleMaterialPass(FRDGBuilder &GraphBuilder, const FScene *Scene, const FMinimalSceneTextures &SceneTextures, const TArray< FViewInfo > &Views)
Definition Substrate.cpp:1956
bool GetSubstrateUsesAnisotropy(const FViewInfo &View)
Definition Substrate.cpp:224
uint32 GetClosureTileIndirectArgsOffset(uint32 InDownsampleFactor)
Definition Substrate.cpp:125
FScreenPassTexture AddSubstrateDebugPasses(FRDGBuilder &GraphBuilder, const FViewInfo &View, FScreenPassTexture &ScreenPassSceneColor)
Definition SubstrateVisualize.cpp:1451
uint32 TileTypeDrawIndirectArgOffset(const ESubstrateTileType Type)
Definition Substrate.cpp:1279
bool ShouldCompileSubstrateTileTypePermutations(const int32 SubstrateTileType, const EShaderPlatform Platform)
Definition Substrate.cpp:1992
bool IsStochasticLightingActive(EShaderPlatform InPlatform)
Definition Substrate.cpp:138
constexpr uint32 StencilBit_Single
Definition Substrate.h:213
void SetBasePassRenderTargetOutputFormat(const EShaderPlatform Platform, const FMaterialShaderParameters &MaterialParameters, FShaderCompilerEnvironment &OutEnvironment, EGBufferLayout GBufferLayout)
Definition Substrate.cpp:1579
constexpr uint32 StencilBit_Complex
Definition Substrate.h:214
FSubstrateTilePassVS::FParameters SetTileParameters(const FViewInfo &View, const ESubstrateTileType TileType, EPrimitiveType &PrimitiveType)
Definition Substrate.cpp:1257
void InitialiseSubstrateFrameSceneData(FRDGBuilder &GraphBuilder, FSceneRenderer &SceneRenderer)
Definition Substrate.cpp:434
TRDGUniformBufferRef< FSubstratePublicGlobalUniformParameters > CreatePublicGlobalUniformBuffer(FRDGBuilder &GraphBuilder, FSubstrateSceneData *SubstrateScene)
Definition Substrate.cpp:880
bool GetSubstrateUsesTileType(const FViewInfo &View, ESubstrateTileType TileType)
Definition Substrate.cpp:199
void BindSubstrateBasePassUniformParameters(FRDGBuilder &GraphBuilder, const FViewInfo &View, FSubstrateBasePassUniformParameters &OutSubstrateUniformParameters)
Definition Substrate.cpp:683
void AddSubstrateDBufferBasePass(FRDGBuilder &GraphBuilder, TArray< FViewInfo > &Views, const FSceneTextures &InSceneTextures, FDBufferTextures &DBufferTextures, FDecalVisibilityTaskData *DecalVisibility, FInstanceCullingManager &InstanceCullingManager, const FSubstrateSceneData &SubstrateSceneData)
Definition Substrate.cpp:1922
constexpr uint32 StencilBit_Fast
Definition Substrate.h:212
Definition DBufferTextures.h:35
Definition MaterialShared.h:1181
Definition SceneTextures.h:52
Definition SceneTextures.h:110
Definition ScreenPass.h:41
Definition ShaderCore.h:544
Definition Substrate.h:92
Definition Substrate.h:145
FRDGBufferRef ClosureTileCountBuffer
Definition Substrate.h:170
FSubstrateSceneData * SceneData
Definition Substrate.h:175
uint32 MaxBytesPerPixel
Definition Substrate.h:148
FRDGBufferRef ClassificationTileDispatchIndirectBuffer
Definition Substrate.h:166
FIntPoint TileCount
Definition Substrate.h:154
FRDGBufferRef ClosureTilePerThreadDispatchIndirectBuffer
Definition Substrate.h:173
FRDGBufferUAVRef ClassificationTileDrawIndirectBufferUAV
Definition Substrate.h:164
uint8 UsesTileTypeMask
Definition Substrate.h:151
FRDGBufferRef ClosureTileRaytracingIndirectBuffer
Definition Substrate.h:172
FRDGBufferRef ClosureTileDispatchIndirectBuffer
Definition Substrate.h:171
FRDGBufferUAVRef ClassificationTileListBufferUAV
Definition Substrate.h:160
bool bUsesAnisotropy
Definition Substrate.h:152
uint32 TileEncoding
Definition Substrate.h:155
FRDGBufferSRVRef ClassificationTileListBufferSRV
Definition Substrate.h:159
uint32 LayerCount
Definition Substrate.h:156
FRDGBufferRef ClassificationTileDrawIndirectBuffer
Definition Substrate.h:163
uint32 MaxClosurePerPixel
Definition Substrate.h:147
uint32 ClassificationTileListBufferOffset[SUBSTRATE_TILE_TYPE_COUNT]
Definition Substrate.h:161
TRDGUniformBufferRef< FSubstrateGlobalUniformParameters > SubstrateGlobalUniformParameters
Definition Substrate.h:177
FRDGBufferUAVRef ClassificationTileDispatchIndirectBufferUAV
Definition Substrate.h:167
void Reset()
Definition Substrate.cpp:94
FRDGBufferRef ClassificationTileListBuffer
Definition Substrate.h:158
FRDGBufferRef ClosureTileBuffer
Definition Substrate.h:169
FRDGBufferUAVRef DebugDataUAV
Definition Substrate.h:197
FRDGBufferRef DebugData
Definition Substrate.h:196
uint32 DebugDataSizeInUints
Definition Substrate.h:195
Definition Substrate.h:184
TQueue< TSharedPtr< FRHIGPUBufferReadback > > PixelMaterialDebugDataReadbackQueries
Definition Substrate.h:186
FTransientPixelDebugBuffer CreateTransientPixelDebugBuffer(FRDGBuilder &GraphBuilder)
Definition SubstrateVisualize.cpp:1547
void SafeRelease()
Definition SubstrateVisualize.cpp:1566
uint32 SystemInfoDebugDataSizeBytes
Definition Substrate.h:188
static FTransientPixelDebugBuffer CreateDummyPixelDebugBuffer(FRDGBuilder &GraphBuilder)
Definition SubstrateVisualize.cpp:1554
FTransientSystemInfoDebugBuffer CreateTransientSystemInfoDebugBuffer(FRDGBuilder &GraphBuilder)
Definition SubstrateVisualize.cpp:1559
TQueue< TSharedPtr< FRHIGPUBufferReadback > > SystemInfoDebugDataReadbackQueries
Definition Substrate.h:189
FSubstrateViewDebugData()
Definition SubstrateVisualize.cpp:1526
uint32 PixelMaterialDebugDataSizeBytes
Definition Substrate.h:185
Definition RenderGraphUtils.h:135
Definition ShaderPermutation.h:229
Definition IntPoint.h:25