UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
LumenSceneLighting.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "RHIDefinitions.h"
7#include "SceneView.h"
8#include "SceneRendering.h"
10#include "Lumen.h"
12
15class FLumenLight;
16
19 RDG_BUFFER_ACCESS(DispatchIndirectArgs, ERHIAccess::IndirectArgs)
24
44
60
61template<typename VertexShaderType, typename PixelShaderType, typename PassParametersType, typename SetParametersLambdaType>
63 FIntPoint ViewportSize,
67 const FGlobalShaderMap* GlobalShaderMap,
68 FRHIBlendState* BlendState,
69 FRHICommandList& RHICmdList,
73{
75 RHICmdList.ApplyCachedRenderTargets(GraphicsPSOInit);
76
77 RHICmdList.SetViewport(0, 0, 0.0f, ViewportSize.X, ViewportSize.Y, 1.0f);
78
81 GraphicsPSOInit.BlendState = BlendState;
82
84
85 GraphicsPSOInit.BoundShaderState.VertexDeclarationRHI = GEmptyVertexDeclaration.VertexDeclarationRHI;
86 GraphicsPSOInit.BoundShaderState.VertexShaderRHI = VertexShader.GetVertexShader();
87 GraphicsPSOInit.BoundShaderState.PixelShaderRHI = PixelShader.GetPixelShader();
88
89 SetGraphicsPipelineState(RHICmdList, GraphicsPSOInit, 0);
90
91 SetShaderParameters(RHICmdList, VertexShader, VertexShader.GetVertexShader(), PassParameters->VS);
92 SetShaderParameters(RHICmdList, PixelShader, PixelShader.GetPixelShader(), PassParameters->PS);
93 SetParametersLambda(RHICmdList, PixelShader, PixelShader.GetPixelShader(), PassParameters->PS);
94
95 RHICmdList.DrawPrimitiveIndirect(DrawIndirectArgs->GetIndirectRHICallBuffer(), DrawIndirectArgOffset);
96}
97
99{
102
103 BEGIN_SHADER_PARAMETER_STRUCT(FParameters, )
107
108 class FNumTargets : SHADER_PERMUTATION_RANGE_INT("NUM_TARGETS", 1, 2);
109 using FPermutationDomain = TShaderPermutationDomain<FNumTargets>;
110
111 static bool ShouldCompilePermutation(const FGlobalShaderPermutationParameters& Parameters)
112 {
113 return DoesPlatformSupportLumenGI(Parameters.Platform);
114 }
115};
116
118{
121
122 BEGIN_SHADER_PARAMETER_STRUCT(FParameters, )
135
136 class FIndirectLighting : SHADER_PERMUTATION_BOOL("INDIRECT_LIGHTING");
137 class FResample : SHADER_PERMUTATION_BOOL("RESAMPLE");
138 using FPermutationDomain = TShaderPermutationDomain<FIndirectLighting, FResample>;
139
140 static bool ShouldCompilePermutation(const FGlobalShaderPermutationParameters& Parameters)
141 {
142 return DoesPlatformSupportLumenGI(Parameters.Platform);
143 }
144};
145
146// Must match LIGHT_TYPE_* in LumenSceneDirectLighting.usf
148{
150 Point,
151 Spot,
152 Rect,
153
154 MAX
155};
156
166
173
180
181namespace Lumen
182{
184 const FViewInfo& View,
185 const FLightSceneInfo* LightSceneInfo,
187
189 FScene* Scene,
190 const FViewInfo& View,
191 FRDGBuilder& GraphBuilder,
195 ERDGPassFlags ComputePassFlags);
196
198 FRDGBuilder& GraphBuilder,
199 const FLumenSceneData& LumenSceneData,
200 const TArray<FViewInfo>& Views,
202 bool bIndirectLightingHistoryValid,
205 ERDGPassFlags ComputePassFlags);
206
208 FRDGBuilder& GraphBuilder,
211 const TRDGUniformBufferRef<FLumenCardScene>& LumenCardSceneUniformBuffer,
213 ERDGPassFlags ComputePassFlags);
214
218};
219
220namespace LumenSceneLighting
221{
222 bool UseAsyncCompute(const FViewFamilyInfo& ViewFamily);
223}
224
226{
231
233
238
239 bool UseStochasticLighting(const FSceneViewFamily& ViewFamily);
241}
242
244 FRDGBuilder& GraphBuilder,
245 const FScene* Scene,
246 const FViewInfo& View,
247 int32 ViewIndex,
254 FRDGBufferRef LightTileAllocator,
255 FRDGBufferRef LightTiles,
257 ERDGPassFlags ComputePassFlags);
258
259// Return debug information of the cards pointing by the mouse cursor
261 FRDGBuilder& GraphBuilder,
262 const FScene* Scene,
263 const FViewInfo& View,
264 int32 ViewIndex,
266 ERDGPassFlags ComputePassFlags);
TGlobalResource< FEmptyVertexDeclaration, FRenderResource::EInitPhase::Pre > GEmptyVertexDeclaration
Definition CommonRenderResources.cpp:14
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
#define DECLARE_GLOBAL_SHADER(ShaderClass)
Definition GlobalShader.h:408
void TraceLumenHardwareRayTracedDirectLightingShadows(FRDGBuilder &GraphBuilder, const FScene *Scene, const FViewInfo &View, int32 ViewIndex, const FLumenSceneFrameTemporaries &FrameTemporaries, const FLumenDirectLightingStochasticData &StochasticData, const LumenSceneDirectLighting::FLightDataParameters &LumenLightData, FRDGBufferRef ShadowTraceIndirectArgs, FRDGBufferRef ShadowTraceAllocator, FRDGBufferRef ShadowTraces, FRDGBufferRef LightTileAllocator, FRDGBufferRef LightTiles, FRDGBufferUAVRef ShadowMaskTilesUAV, ERDGPassFlags ComputePassFlags)
Definition LumenSceneDirectLightingHardwareRayTracing.cpp:361
FRDGBufferSRVRef TraceLumenHardwareRayTracedDebug(FRDGBuilder &GraphBuilder, const FScene *Scene, const FViewInfo &View, int32 ViewIndex, const FLumenSceneFrameTemporaries &FrameTemporaries, ERDGPassFlags ComputePassFlags)
Definition LumenSceneDirectLightingHardwareRayTracing.cpp:488
ELumenLightType
Definition LumenSceneLighting.h:148
ELumenDispatchCardTilesIndirectArgsOffset
Definition LumenSceneLighting.h:168
void DrawQuadsToAtlas(FIntPoint ViewportSize, TShaderRefBase< VertexShaderType, FShaderMapPointerTable > VertexShader, TShaderRefBase< PixelShaderType, FShaderMapPointerTable > PixelShader, const PassParametersType *PassParameters, const FGlobalShaderMap *GlobalShaderMap, FRHIBlendState *BlendState, FRHICommandList &RHICmdList, SetParametersLambdaType &&SetParametersLambda, FRDGBufferRef DrawIndirectArgs, uint32 DrawIndirectArgOffset)
Definition LumenSceneLighting.h:62
const bool
Definition NetworkReplayStreaming.h:178
void SetGraphicsPipelineState(FRHICommandList &RHICmdList, const FGraphicsPipelineStateInitializer &Initializer, uint32 StencilRef, EApplyRendertargetOption ApplyFlags, bool bApplyAdditionalState)
Definition PipelineStateCache.cpp:1478
EPixelFormat
Definition PixelFormat.h:16
@ PF_R8
Definition PixelFormat.h:88
ERHIAccess
Definition RHIAccess.h:11
@ PT_RectList
Definition RHIDefinitions.h:844
@ PT_TriangleList
Definition RHIDefinitions.h:824
#define GRHISupportsRectTopology
Definition RHIGlobals.h:789
ERDGPassFlags
Definition RenderGraphDefinitions.h:128
bool DoesPlatformSupportLumenGI(EShaderPlatform Platform, bool bSkipProjectCheck)
Definition RenderUtils.cpp:2358
#define SHADER_PARAMETER_RDG_BUFFER_SRV(ShaderType, MemberName)
Definition ShaderParameterMacros.h:1800
#define SHADER_PARAMETER_RDG_TEXTURE(ShaderType, MemberName)
Definition ShaderParameterMacros.h:1752
#define RDG_BUFFER_ACCESS(MemberName, Access)
Definition ShaderParameterMacros.h:1923
#define SHADER_PARAMETER_RDG_BUFFER_UAV(ShaderType, MemberName)
Definition ShaderParameterMacros.h:1812
#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_UNIFORM_BUFFER(StructType, MemberName)
Definition ShaderParameterMacros.h:1823
#define END_SHADER_PARAMETER_STRUCT()
Definition ShaderParameterMacros.h:1485
#define SHADER_PARAMETER(MemberType, MemberName)
Definition ShaderParameterMacros.h:1684
void SetShaderParameters(FRHIBatchedShaderParameters &BatchedParameters, const FShaderParameterBindings &Bindings, const FShaderParametersMetadata *ParametersMetadata, const void *InParametersData)
Definition ShaderParameterStruct.cpp:883
#define SHADER_USE_PARAMETER_STRUCT(ShaderClass, ShaderParentClass)
Definition ShaderParameterStruct.h:62
#define SHADER_PERMUTATION_RANGE_INT(InDefineName, Start, Count)
Definition ShaderPermutation.h:499
#define SHADER_PERMUTATION_BOOL(InDefineName)
Definition ShaderPermutation.h:482
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition LumenSceneLighting.h:99
Definition LumenSceneLighting.h:118
Definition GlobalShader.h:173
Definition GlobalShader.h:269
Definition RHIResources.h:4572
FBoundShaderStateInput BoundShaderState
Definition RHIResources.h:4754
FRHIBlendState * BlendState
Definition RHIResources.h:4755
FRHIRasterizerState * RasterizerState
Definition RHIResources.h:4756
FRHIDepthStencilState * DepthStencilState
Definition RHIResources.h:4757
EPrimitiveType PrimitiveType
Definition RHIResources.h:4760
Definition LightSceneInfo.h:208
Definition DeferredShadingRenderer.h:88
Definition LumenSceneLighting.h:26
FRDGBufferRef CardPageIndexAllocator
Definition LumenSceneLighting.h:35
EIndirectArgOffset
Definition LumenSceneLighting.h:29
FRDGBufferRef DispatchCardPageIndicesIndirectArgs
Definition LumenSceneLighting.h:38
uint32 MaxUpdateTiles
Definition LumenSceneLighting.h:41
FRDGBufferRef CardPageIndexData
Definition LumenSceneLighting.h:36
uint32 UpdateFactor
Definition LumenSceneLighting.h:42
FRDGBufferRef DrawCardPageIndicesIndirectArgs
Definition LumenSceneLighting.h:37
FIntPoint UpdateAtlasSize
Definition LumenSceneLighting.h:40
Definition LumenSceneData.h:1002
Definition RenderGraphResources.h:1426
Definition RenderGraphResources.h:1452
Definition RenderGraphResources.h:1321
Definition RenderGraphBuilder.h:49
Definition RenderGraphResources.h:571
Definition RHIResources.h:696
Definition RHICommandList.h:3819
void DrawPrimitiveIndirect(FRHIBuffer *ArgumentBuffer, uint32 ArgumentOffset)
Definition RHICommandList.h:4127
void SetViewport(float MinX, float MinY, float MinZ, float MaxX, float MaxY, float MaxZ)
Definition RHICommandList.h:4015
void ApplyCachedRenderTargets(FGraphicsPipelineStateInitializer &GraphicsPSOInit)
Definition RHICommandList.h:4048
Definition LumenSceneLighting.h:46
Definition SceneView.h:2212
Definition ScenePrivate.h:2875
Definition SceneRendering.h:1970
Definition SceneRendering.h:1132
Definition Array.h:670
Definition RenderGraphResources.h:251
Definition Shader.h:1021
static RHIParamRefType GetRHI()
Definition RHIStaticStates.h:57
Definition ShaderParameterMacros.h:229
Definition LumenSceneDirectLightingHardwareRayTracing.cpp:76
constexpr uint32 NumBatchableLightTypes
Definition LumenSceneLighting.h:232
float GetGlobalSDFShadowRayBias()
Definition LumenSceneDirectLighting.cpp:117
float GetMeshSDFShadowRayBias()
Definition LumenSceneDirectLighting.cpp:107
bool UseLightTilesPerLightType()
Definition LumenSceneDirectLighting.cpp:127
bool UseStochasticLighting(const FSceneViewFamily &ViewFamily)
Definition LumenSceneDirectLightingStochastic.inl:57
float GetHeightfieldShadowRayBias()
Definition LumenSceneDirectLighting.cpp:112
float GetHardwareRayTracingShadowRayBias()
Definition LumenSceneDirectLighting.cpp:122
Definition LumenSceneLighting.cpp:76
bool UseAsyncCompute(const FViewFamilyInfo &ViewFamily)
Definition LumenSceneLighting.cpp:210
Definition DeferredShadingRenderer.cpp:316
EPixelFormat GetNumFramesAccumulatedAtlasFormat()
Definition LumenSceneLighting.h:217
void BuildCardUpdateContext(FRDGBuilder &GraphBuilder, const FLumenSceneData &LumenSceneData, const TArray< FViewInfo > &Views, const FLumenSceneFrameTemporaries &FrameTemporaries, bool bIndirectLightingHistoryValid, FLumenCardUpdateContext &DirectLightingCardUpdateContext, FLumenCardUpdateContext &IndirectLightingCardUpdateContext, ERDGPassFlags ComputePassFlags)
Definition LumenSceneLighting.cpp:538
EPixelFormat GetDirectLightingAtlasFormat()
Definition LumenSceneDirectLighting.cpp:132
void SetDirectLightingDeferredLightUniformBuffer(const FViewInfo &View, const FLightSceneInfo *LightSceneInfo, TUniformBufferBinding< FDeferredLightUniformStruct > &UniformBuffer)
void SpliceCardPagesIntoTiles(FRDGBuilder &GraphBuilder, const FGlobalShaderMap *GloablShaderMap, const FLumenCardUpdateContext &CardUpdateContext, const TRDGUniformBufferRef< FLumenCardScene > &LumenCardSceneUniformBuffer, FLumenCardTileUpdateContext &OutCardTileUpdateContext, ERDGPassFlags ComputePassFlags)
Definition LumenSceneDirectLighting.cpp:306
EPixelFormat GetIndirectLightingAtlasFormat()
Definition LumenSceneDirectLighting.cpp:137
void CombineLumenSceneLighting(FScene *Scene, const FViewInfo &View, FRDGBuilder &GraphBuilder, const FLumenSceneFrameTemporaries &FrameTemporaries, const FLumenCardUpdateContext &CardUpdateContext, const FLumenCardTileUpdateContext &CardTileUpdateContext, ERDGPassFlags ComputePassFlags)
Definition LumenSceneLighting.cpp:169
FRHIPixelShader * PixelShaderRHI
Definition RHIResources.h:4510
FRHIVertexShader * VertexShaderRHI
Definition RHIResources.h:4509
FRHIVertexDeclaration * VertexDeclarationRHI
Definition RHIResources.h:4508
Definition GlobalShader.h:73
Definition LumenSceneLighting.h:175
FRDGBufferRef CardTiles
Definition LumenSceneLighting.h:177
FRDGBufferRef DispatchCardTilesIndirectArgs
Definition LumenSceneLighting.h:178
FRDGBufferRef CardTileAllocator
Definition LumenSceneLighting.h:176
Definition LumenSceneLighting.h:158
FRDGTextureRef SceneDataTexture
Definition LumenSceneLighting.h:163
bool IsValid() const
Definition LumenSceneLighting.h:159
FRDGBufferRef CompactedLightSampleAllocator
Definition LumenSceneLighting.h:162
FRDGTextureRef LightSamples
Definition LumenSceneLighting.h:164
FRDGBufferRef CompactedLightSampleData
Definition LumenSceneLighting.h:161
Definition LumenSceneDirectLighting.cpp:1605
Definition LumenSceneData.h:895
Definition RHI.h:560
Definition ShaderPermutation.h:229
Definition IntPoint.h:25
IntType Y
Definition IntPoint.h:37
IntType X
Definition IntPoint.h:34