UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DeferredShadingRenderer.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 DeferredShadingRenderer.h: Scene rendering definitions.
5=============================================================================*/
6
7#pragma once
8
9#include "CoreMinimal.h"
10#include "Stats/Stats.h"
11#include "RendererInterface.h"
13#include "ScenePrivateBase.h"
14#include "LightSceneInfo.h"
15#include "SceneRendering.h"
16#include "DepthRendering.h"
18#include "ScreenSpaceDenoise.h"
24#include "RenderGraphUtils.h"
25#include "LightFunctionAtlas.h"
26
29
35class UStaticMeshComponent;
46{
47 struct FFrameTemporaries;
48}
53
55
67struct FDBufferTextures;
71
72namespace Froxel
73{
74 class FFroxelRenderer;
75}
76
78
79namespace RayTracing
80{
82}
83
88{
89public:
91
95
97
100
101 // If true, at least one card page is copied instead of being captured. A copy can be downsampling
102 // from self or copying from another matching card with the same or higher resolution
103 bool bHasAnyCardCopy = false;
104
105 void Reset()
106 {
107 CardPagesToRender.Reset();
111 bHasAnyCardCopy = false;
112 }
113};
114
116{
117 None = 0,
118 ScreenProbeGather = 1u << 0,
119 Reflections = 1u << 1,
120 Composite = 1u << 3,
122};
124
172
176template<typename PermutationVectorType>
178{
179public:
181 {
182 FPlatformMemory::Memset(&Vector, 0, sizeof(Vector));
183 }
184
186 template<typename DimensionType>
188 {
189 SIZE_T ByteOffset = GetByteOffset(Dimension);
190
191 // Make sure not updating a value of the pipeline already initialized, to ensure there is no cycle in the dependency of the different dimensions.
192 checkf(ByteOffset >= InitializedOffset, TEXT("This member of the pipeline state has already been committed."));
193
194 Vector.*Dimension = DimensionValue;
195
196 // Update the initialised offset to make sure this is not set only once.
197 InitializedOffset = ByteOffset + sizeof(DimensionType);
198 }
199
201 void Commit()
202 {
203 // Force the pipeline state to be initialized exactly once.
204 checkf(!IsCommitted(), TEXT("Pipeline state has already been committed."));
205 InitializedOffset = ~SIZE_T(0);
206 }
207
209 bool IsCommitted() const
210 {
211 return InitializedOffset == ~SIZE_T(0);
212 }
213
215 template<typename DimensionType>
217 {
218 SIZE_T ByteOffset = GetByteOffset(Dimension);
219
220 checkf(ByteOffset < InitializedOffset, TEXT("This dimension has not been initialized yet."));
221
222 return Vector.*Dimension;
223 }
224
227 {
228 // Make sure the pipeline state is committed to catch accesses to uninitialized settings.
229 checkf(IsCommitted(), TEXT("The pipeline state needs to be fully commited before being able to reference directly the pipeline state structure."));
230 return &Vector;
231 }
232
235 {
236 // Make sure the pipeline state is committed to catch accesses to uninitialized settings.
237 checkf(IsCommitted(), TEXT("The pipeline state needs to be fully commited before being able to reference directly the pipeline state structure."));
238 return Vector;
239 }
240
241private:
242
243 template<typename DimensionType>
245 {
246 return (SIZE_T)(&(((PermutationVectorType*) 0)->*Dimension));
247 }
248
250
251 SIZE_T InitializedOffset = 0;
252};
253
254
269
289
291{
292 Disabled,
293 SSGI,
294 Lumen,
295 Plugin,
296};
297
299{
300 Disabled,
301 SSAO,
302 SSGI, // SSGI can produce AO buffer at same time to correctly comp SSGI within the other indirect light such as skylight and lightmass.
303 RTAO,
304};
305
307{
308 Disabled,
309 SSR,
310 Lumen
311};
312
317{
318public:
319
321
323
326
329
332
337 void RenderPrePassView(FRHICommandList& RHICmdList, const FViewInfo& View);
338
344
348 void DebugLightGrid(FRDGBuilder& GraphBuilder, FSceneTextures& SceneTextures, bool bNeedLightGrid);
349
355 static void RenderBasePass(
357 FRDGBuilder& GraphBuilder,
359 FSceneTextures& SceneTextures,
360 const FDBufferTextures& DBufferTextures,
361 FExclusiveDepthStencil::Type BasePassDepthStencilAccess,
363 FInstanceCullingManager& InstanceCullingManager,
364 bool bNaniteEnabled,
365 struct FNaniteShadingCommands& NaniteBasePassShadingCommands,
367
368 static void RenderBasePassInternal(
370 FRDGBuilder& GraphBuilder,
372 const FSceneTextures& SceneTextures,
374 FExclusiveDepthStencil::Type BasePassDepthStencilAccess,
376 const FDBufferTextures& DBufferTextures,
379 FInstanceCullingManager& InstanceCullingManager,
380 bool bNaniteEnabled,
381 struct FNaniteShadingCommands& NaniteBasePassShadingCommands,
383
384 static void RenderAnisotropyPass(
385 FRDGBuilder& GraphBuilder,
387 FSceneTextures& SceneTextures,
388 const FScene* Scene,
389 bool bDoParallelPass);
394 FRDGBuilder& GraphBuilder,
396 const FSceneTextures& SceneTextures,
399
401 FRDGBuilder& GraphBuilder,
403 const FSceneTextures& SceneTextures,
406 FSceneWithoutWaterTextures& SceneWithoutWaterTextures,
407 FLumenSceneFrameTemporaries& LumenFrameTemporaries,
409
411 FRDGBuilder& GraphBuilder,
413 const FSceneTextures& SceneTextures,
414 const FSceneWithoutWaterTextures& SceneWithoutWaterTextures,
416
418 FRDGBuilder& GraphBuilder,
420 const FSceneTextures& SceneTextures,
421 const FSceneWithoutWaterTextures& SceneWithoutWaterTextures,
423 FLumenSceneFrameTemporaries& LumenFrameTemporaries);
424
425 void RenderOcclusion(
426 FRDGBuilder& GraphBuilder,
427 const FSceneTextures& SceneTextures,
431
433
435 virtual void Render(FRDGBuilder& GraphBuilder, const FSceneRenderUpdateInputs* SceneUpdateInputs) override;
436
438 virtual void RenderHitProxies(FRDGBuilder& GraphBuilder, const FSceneRenderUpdateInputs* SceneUpdateInputs) override;
439
440 virtual bool ShouldRenderVelocities() const override;
441
442 virtual bool ShouldRenderPrePass() const override;
443
444 virtual bool ShouldRenderNanite() const override;
445
446#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
448#endif
449
450private:
451
452#if RHI_RAYTRACING
454#endif
455
457 struct FPerViewPipelineState
458 {
459 EDiffuseIndirectMethod DiffuseIndirectMethod;
460 IScreenSpaceDenoiser::EMode DiffuseIndirectDenoiser;
461
462 // Method to use for ambient occlusion.
463 EAmbientOcclusionMethod AmbientOcclusionMethod;
464
465 // Method to use for reflections.
466 EReflectionsMethod ReflectionsMethod;
467
468 // Method to use for reflections on water.
469 EReflectionsMethod ReflectionsMethodWater;
470
471 // Whether there is planar reflection to compose to the reflection.
472 bool bComposePlanarReflections;
473
474 // Whether need to generate HZB from the depth buffer.
475 bool bFurthestHZB;
476 bool bClosestHZB;
477 };
478
479 // Structure that contains the final state of deferred shading pipeline for the FSceneViewFamily
480 struct FFamilyPipelineState
481 {
482#if RHI_RAYTRACING
483 // Whether the scene has lights with ray traced shadows.
484 bool bRayTracingShadows = false;
485
486 // Whether any ray tracing passes are enabled.
487 bool bRayTracing = false;
488#endif
489
490 // Whether Nanite is enabled.
491 bool bNanite;
492
493 // Whether the scene occlusion is made using HZB.
494 bool bHZBOcclusion;
495 };
496
504 TPipelineState<FFamilyPipelineState> FamilyPipelineState;
505
506 FORCEINLINE const FPerViewPipelineState& GetViewPipelineState(const FViewInfo& View) const
507 {
508 return *ViewPipelineStates[View.SceneRendererPrimaryViewId];
509 }
510
511 FORCEINLINE TPipelineState<FPerViewPipelineState>& GetViewPipelineStateWritable(const FViewInfo& View)
512 {
513 return ViewPipelineStates[View.SceneRendererPrimaryViewId];
514 }
515
516 virtual bool IsLumenEnabled(const FViewInfo& View) const override
517 {
518 return (GetViewPipelineState(View).DiffuseIndirectMethod == EDiffuseIndirectMethod::Lumen || GetViewPipelineState(View).ReflectionsMethod == EReflectionsMethod::Lumen);
519 }
520
521 virtual bool IsLumenGIEnabled(const FViewInfo& View) const override
522 {
523 return GetViewPipelineState(View).DiffuseIndirectMethod == EDiffuseIndirectMethod::Lumen;
524 }
525
526 virtual bool AnyViewHasGIMethodSupportingDFAO() const override
527 {
529
530 for (int32 ViewIndex = 0; ViewIndex < Views.Num(); ViewIndex++)
531 {
532 if (GetViewPipelineState(Views[ViewIndex]).DiffuseIndirectMethod != EDiffuseIndirectMethod::Lumen)
533 {
535 }
536 }
537
539 }
540
541 FSeparateTranslucencyDimensions SeparateTranslucencyDimensions;
542
544 void CreatePerObjectProjectedShadow(
545 FRHICommandListImmediate& RHICmdList,
549 const TArray<FProjectedShadowInfo*, SceneRenderingAllocator>& ViewDependentWholeSceneShadows,
551
552 struct FInitViewTaskDatas
553 {
554 FInitViewTaskDatas(IVisibilityTaskData* InVisibilityTaskData)
555 : VisibilityTaskData(InVisibilityTaskData)
556 {}
557
558 IVisibilityTaskData* VisibilityTaskData;
559 FILCUpdatePrimTaskData* ILCUpdatePrim = nullptr;
560 RayTracing::FGatherInstancesTaskData* RayTracingGatherInstances = nullptr;
561 FDynamicShadowsTaskData* DynamicShadows = nullptr;
562 FDecalVisibilityTaskData* Decals = nullptr;
563 FLumenDirectLightingTaskData* LumenDirectLighting = nullptr;
564 FLumenSceneFrameTemporaries* LumenFrameTemporaries = nullptr;
565 };
566
567 void PreVisibilityFrameSetup(FRDGBuilder& GraphBuilder);
568
569 void BeginInitDynamicShadows(FRDGBuilder& GraphBuilder, FInitViewTaskDatas& TaskDatas, FInstanceCullingManager& InstanceCullingManager);
570 void FinishInitDynamicShadows(FRDGBuilder& GraphBuilder, FDynamicShadowsTaskData*& TaskData, FInstanceCullingManager& InstanceCullingManager);
571
572 void ComputeLightVisibility();
573
575 void BeginInitViews(
576 FRDGBuilder& GraphBuilder,
577 const FSceneTexturesConfig& SceneTexturesConfig,
578 FInstanceCullingManager& InstanceCullingManager,
580 FInitViewTaskDatas& TaskDatas);
581
582 void EndInitViews(
583 FRDGBuilder& GraphBuilder,
585 FInstanceCullingManager& InstanceCullingManager,
586 FInitViewTaskDatas& TaskDatas);
587
588 void BeginUpdateLumenSceneTasks(FRDGBuilder& GraphBuilder, FLumenSceneFrameTemporaries& FrameTemporaries);
589 void UpdateLumenScene(FRDGBuilder& GraphBuilder, FLumenSceneFrameTemporaries& FrameTemporaries);
590 void RenderLumenSceneLighting(FRDGBuilder& GraphBuilder, const FLumenSceneFrameTemporaries& FrameTemporaries, const FLumenDirectLightingTaskData* DirectLightingTaskData);
591
593
594 void RenderDirectLightingForLumenScene(
595 FRDGBuilder& GraphBuilder,
599 ERDGPassFlags ComputePassFlags);
600
601 void RenderRadiosityForLumenScene(
602 FRDGBuilder& GraphBuilder,
606 ERDGPassFlags ComputePassFlags);
607
608 void ClearLumenSurfaceCacheAtlas(
609 FRDGBuilder& GraphBuilder,
611 const FGlobalShaderMap* GlobalShaderMap);
612
613 void DilateCardPageOneTexel(
614 FRDGBuilder& GraphBuilder,
615 const FViewInfo& View,
618 TConstArrayView<FCardPageRenderData> CardPagesToRender,
620
621 void UpdateLumenSurfaceCacheAtlas(
622 FRDGBuilder& GraphBuilder,
623 const FViewInfo& View,
628 const struct FResampledCardCaptureAtlas& ResampledCardCaptureAtlas);
629
630 LumenRadianceCache::FUpdateInputs GetLumenTranslucencyGIVolumeRadianceCacheInputs(
631 FRDGBuilder& GraphBuilder,
632 const FViewInfo& View,
634 ERDGPassFlags ComputePassFlags);
635
636 void ComputeLumenTranslucencyGIVolume(
637 FRDGBuilder& GraphBuilder,
638 FViewInfo& View,
640 LumenRadianceCache::FRadianceCacheInterpolationParameters& RadianceCacheParameters,
641 ERDGPassFlags ComputePassFlags);
642
643 void CreateIndirectCapsuleShadows();
644
645 void RenderPrePass(FRDGBuilder& GraphBuilder, TArrayView<FViewInfo> InViews, FRDGTextureRef SceneDepthTexture, FInstanceCullingManager& InstanceCullingManager, FRDGTextureRef* FirstStageDepthBuffer);
646 void RenderPrePassHMD(FRDGBuilder& GraphBuilder, TArrayView<FViewInfo> InViews, FRDGTextureRef SceneDepthTexture);
647
648 void RenderFog(
649 FRDGBuilder& GraphBuilder,
650 const FMinimalSceneTextures& SceneTextures,
653
654 void RenderUnderWaterFog(
655 FRDGBuilder& GraphBuilder,
656 const FSceneWithoutWaterTextures& SceneWithoutWaterTextures,
658
659 void RenderAtmosphere(
660 FRDGBuilder& GraphBuilder,
661 const FMinimalSceneTextures& SceneTextures,
663
664 // TODO: Address tech debt to that directly in RenderDiffuseIndirectAndAmbientOcclusion()
665 void SetupCommonDiffuseIndirectParameters(
666 FRDGBuilder& GraphBuilder,
667 const FSceneTextureParameters& SceneTextures,
668 const FViewInfo& View,
669 HybridIndirectLighting::FCommonParameters& OutCommonDiffuseParameters);
670
672 void DispatchAsyncLumenIndirectLightingWork(
673 FRDGBuilder& GraphBuilder,
674 FSceneTextures& SceneTextures,
675 FInstanceCullingManager& InstanceCullingManager,
676 FLumenSceneFrameTemporaries& LumenFrameTemporaries,
678 FRDGTextureRef LightingChannelsTexture,
680
682 void RenderDiffuseIndirectAndAmbientOcclusion(
683 FRDGBuilder& GraphBuilder,
684 FSceneTextures& SceneTextures,
686 FRDGTextureRef LightingChannelsTexture,
688 bool bIsVisualizePass,
690
692 void RenderDeferredReflectionsAndSkyLighting(
693 FRDGBuilder& GraphBuilder,
694 const FSceneTextures& SceneTextures,
695 FLumenSceneFrameTemporaries& LumenFrameTemporaries,
697
698 void RenderDeferredReflectionsAndSkyLightingHair(FRDGBuilder& GraphBuilder);
699
700#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
702 void RenderGlobalIlluminationPluginVisualizations(FRDGBuilder& GraphBuilder, FRDGTextureRef LightingChannelsTexture);
703#endif
704
706 void RenderDFAOAsIndirectShadowing(
707 FRDGBuilder& GraphBuilder,
708 const FSceneTextures& SceneTextures,
710
711 TSharedPtr<FMegaLightsFrameTemporaries> GenerateMegaLightsSamples(
712 FRDGBuilder& GraphBuilder,
713 const FSceneTextures& SceneTextures,
715 FRDGTextureRef LightingChannelsTexture);
716
717 void RenderMegaLights(
718 FRDGBuilder& GraphBuilder,
720 const FSceneTextures& SceneTextures,
722 FRDGTextureRef LightingChannelsTexture);
723
724 FSSDSignalTextures RenderLumenFinalGather(
725 FRDGBuilder& GraphBuilder,
726 const FSceneTextures& SceneTextures,
728 FRDGTextureRef LightingChannelsTexture,
729 FViewInfo& View,
731 class FLumenMeshSDFGridParameters& MeshSDFGridParameters,
732 LumenRadianceCache::FRadianceCacheInterpolationParameters& RadianceCacheParameters,
734 ERDGPassFlags ComputePassFlags);
735
736 FSSDSignalTextures RenderLumenScreenProbeGather(
737 FRDGBuilder& GraphBuilder,
738 const FSceneTextures& SceneTextures,
740 FRDGTextureRef LightingChannelsTexture,
741 FViewInfo& View,
743 class FLumenMeshSDFGridParameters& MeshSDFGridParameters,
744 LumenRadianceCache::FRadianceCacheInterpolationParameters& RadianceCacheParameters,
745 class FLumenScreenSpaceBentNormalParameters& ScreenBentNormalParameters,
746 LumenRadianceCache::FRadianceCacheInterpolationParameters& TranslucencyVolumeRadianceCacheParameters,
747 ERDGPassFlags ComputePassFlags);
748
749 FSSDSignalTextures RenderLumenReSTIRGather(
750 FRDGBuilder& GraphBuilder,
751 const FSceneTextures& SceneTextures,
753 FRDGTextureRef LightingChannelsTexture,
754 FViewInfo& View,
756 ERDGPassFlags ComputePassFlags,
758
759 bool RequiresStochasticLightingPass();
760 void StochasticLightingTileClassificationMark(FRDGBuilder& GraphBuilder, FLumenSceneFrameTemporaries& FrameTemporaries, const FSceneTextures& SceneTextures);
761
763 void QueueExtractStochasticLighting(FRDGBuilder& GraphBuilder, FLumenSceneFrameTemporaries& FrameTemporaries, const FMinimalSceneTextures& SceneTextures);
764
765 FSSDSignalTextures RenderLumenIrradianceFieldGather(
766 FRDGBuilder& GraphBuilder,
767 const FSceneTextures& SceneTextures,
769 const FViewInfo& View,
770 LumenRadianceCache::FRadianceCacheInterpolationParameters& TranslucencyVolumeRadianceCacheParameters,
771 ERDGPassFlags ComputePassFlags);
772
773 FRDGTextureRef RenderLumenReflections(
774 FRDGBuilder& GraphBuilder,
775 const FViewInfo& View,
776 const FSceneTextures& SceneTextures,
778 const class FLumenMeshSDFGridParameters& MeshSDFGridParameters,
779 const LumenRadianceCache::FRadianceCacheInterpolationParameters& RadianceCacheParameters,
782 ERDGPassFlags ComputePassFlags);
783
784 void RenderRayTracedTranslucencyView(
785 FRDGBuilder& GraphBuilder,
786 FViewInfo& View,
787 FSceneTextures& SceneTextures,
792
793 bool RenderRayTracedTranslucency(
794 FRDGBuilder& GraphBuilder,
795 FSceneTextures& SceneTextures,
798
799 void RenderLumenFrontLayerTranslucencyReflections(
800 FRDGBuilder& GraphBuilder,
801 FViewInfo& View,
802 const FSceneTextures& SceneTextures,
803 FLumenSceneFrameTemporaries& LumenFrameTemporaries,
805
806 FFrontLayerTranslucencyData RenderFrontLayerTranslucency(
807 FRDGBuilder& GraphBuilder,
809 const FSceneTextures& SceneTextures,
811
812 bool IsLumenFrontLayerTranslucencyEnabled(const FViewInfo& View) const;
813
814 void RenderLumenMiscVisualizations(FRDGBuilder& GraphBuilder, const FMinimalSceneTextures& SceneTextures, const FLumenSceneFrameTemporaries& FrameTemporaries);
815 void RenderLumenRadianceCacheVisualization(FRDGBuilder& GraphBuilder, const FMinimalSceneTextures& SceneTextures);
816 void RenderLumenRadiosityProbeVisualization(FRDGBuilder& GraphBuilder, const FMinimalSceneTextures& SceneTextures, const FLumenSceneFrameTemporaries& FrameTemporaries);
817 void LumenScenePDIVisualization();
818
820 void BeginGatheringLumenSurfaceCacheFeedback(FRDGBuilder& GraphBuilder, const FViewInfo& View, FLumenSceneFrameTemporaries& FrameTemporaries);
821 void FinishGatheringLumenSurfaceCacheFeedback(FRDGBuilder& GraphBuilder, const FViewInfo& View, FLumenSceneFrameTemporaries& FrameTemporaries, const FFrontLayerTranslucencyData& FrontLayerTranslucencyData, const FMinimalSceneTextures& SceneTextures);
822
823 void RenderTranslucencyVolumeVisualization(FRDGBuilder& GraphBuilder, const FMinimalSceneTextures& SceneTextures, const FTranslucencyLightingVolumeTextures& TranslucencyLightingVolumeTextures);
824
828 bool ShouldUseClusteredDeferredShading(EShaderPlatform InPlatform) const;
829
833 bool AreLightsInLightGrid() const;
834
835
837 void AddClusteredDeferredShadingPass(
838 FRDGBuilder& GraphBuilder,
839 const FMinimalSceneTextures& SceneTextures,
844
846 void RenderLights(
847 FRDGBuilder& GraphBuilder,
848 FMinimalSceneTextures& SceneTextures,
849 FRDGTextureRef LightingChannelsTexture,
851
852 void RenderTranslucencyLightingVolume(
853 FRDGBuilder& GraphBuilder,
856
857 void GatherTranslucencyVolumeMarkedVoxels(FRDGBuilder& GraphBuilder);
858
860 void RenderStationaryLightOverlap(
861 FRDGBuilder& GraphBuilder,
862 const FMinimalSceneTextures& SceneTextures,
863 FRDGTextureRef LightingChannelsTexture);
864
866 static void RenderTranslucency(
868 FRDGBuilder& GraphBuilder,
869 const FSceneTextures& SceneTextures,
874 const FSeparateTranslucencyDimensions& SeparateTranslucencyDimensions,
875 FInstanceCullingManager& InstanceCullingManager,
878
880 static void RenderTranslucencyInner(
882 FRDGBuilder& GraphBuilder,
883 const FMinimalSceneTextures& SceneTextures,
889 const FSeparateTranslucencyDimensions& SeparateTranslucencyDimensions,
891 ETranslucencyPass::Type TranslucencyPass,
892 FInstanceCullingManager& InstanceCullingManager,
894
895 void UpscaleTranslucencyIfNeeded(
896 FRDGBuilder& GraphBuilder,
897 const FSceneTextures& SceneTextures,
901
903 FRDGTextureRef RenderLightShaftOcclusion(
904 FRDGBuilder& GraphBuilder,
905 const FMinimalSceneTextures& SceneTextures);
906
907 void RenderLightShaftBloom(
908 FRDGBuilder& GraphBuilder,
909 const FMinimalSceneTextures& SceneTextures,
911
912 bool ShouldRenderDistortion() const;
913 void RenderDistortion(FRDGBuilder& GraphBuilder,
914 FRDGTextureRef SceneColorTexture,
915 FRDGTextureRef SceneDepthTexture,
916 FRDGTextureRef SceneVelocityTexture,
918
919 void CollectLightForTranslucencyLightingVolumeInjection(
920 const FLightSceneInfo* LightSceneInfo,
923
925 void RenderIndirectCapsuleShadows(FRDGBuilder& GraphBuilder, const FSceneTextures& SceneTextures) const;
926
927
928
929 void RenderDeferredShadowProjections(
930 FRDGBuilder& GraphBuilder,
931 const FMinimalSceneTextures& SceneTextures,
932 const FLightSceneInfo* LightSceneInfo,
935
936 void RenderForwardShadowProjections(
937 FRDGBuilder& GraphBuilder,
938 const FMinimalSceneTextures& SceneTextures,
941
943 bool RenderLightFunction(
944 FRDGBuilder& GraphBuilder,
945 const FMinimalSceneTextures& SceneTextures,
946 const FLightSceneInfo* LightSceneInfo,
950 bool bUseHairStrands);
951
953 bool RenderPreviewShadowsIndicator(
954 FRDGBuilder& GraphBuilder,
955 const FMinimalSceneTextures& SceneTextures,
956 const FLightSceneInfo* LightSceneInfo,
959 bool bUseHairStrands);
960
962 bool RenderLightFunctionForMaterial(
963 FRDGBuilder& GraphBuilder,
964 const FMinimalSceneTextures& SceneTextures,
965 const FLightSceneInfo* LightSceneInfo,
971 bool bUseHairStrands);
972
973 void RenderLightsForHair(
974 FRDGBuilder& GraphBuilder,
975 const FMinimalSceneTextures& SceneTextures,
978 FRDGTextureRef LightingChannelsTexture);
979
981 void RenderLightForHair(
982 FRDGBuilder& GraphBuilder,
983 FViewInfo& View,
984 const FMinimalSceneTextures& SceneTextures,
985 const FLightSceneInfo* LightSceneInfo,
987 FRDGTextureRef LightingChannelsTexture,
989 const bool bForwardRendering,
991 TRDGUniformBufferRef<FVirtualShadowMapUniformParameters> VirtualShadowMapUniformBuffer = nullptr,
993 int32 VirtualShadowMapId = INDEX_NONE);
994
996 void RenderSimpleLightsStandardDeferred(
997 FRDGBuilder& GraphBuilder,
998 const FMinimalSceneTextures& SceneTextures,
1000
1001 FRDGTextureRef CopyStencilToLightingChannelTexture(
1002 FRDGBuilder& GraphBuilder,
1005
1006 void RenderHeterogeneousVolumeShadows(FRDGBuilder& GraphBuilder, const FSceneTextures& SceneTextures);
1007 void RenderHeterogeneousVolumes(FRDGBuilder& GraphBuilder, const FSceneTextures& SceneTextures);
1008 void CompositeHeterogeneousVolumes(FRDGBuilder& GraphBuilder, const FSceneTextures& SceneTextures);
1009
1010 void VisualizeVolumetricLightmap(FRDGBuilder& GraphBuilder, const FSceneTextures& SceneTextures);
1011
1014
1015 bool HasDeferredPlanarReflections(const FViewInfo& View) const;
1016 void RenderDeferredPlanarReflections(FRDGBuilder& GraphBuilder, const FSceneTextureParameters& SceneTextures, const FViewInfo& View, FRDGTextureRef& ReflectionsOutput);
1017
1018 void SetupImaginaryReflectionTextureParameters(
1019 FRDGBuilder& GraphBuilder,
1020 const FViewInfo& View,
1022
1023 void RenderRayTracingReflections(
1024 FRDGBuilder& GraphBuilder,
1025 const FSceneTextures& SceneTextures,
1026 const FViewInfo& View,
1027 int DenoiserMode,
1028 const FRayTracingReflectionOptions& Options,
1029 IScreenSpaceDenoiser::FReflectionsInputs* OutDenoiserInputs);
1030
1031 void RenderRayTracingDeferredReflections(
1032 FRDGBuilder& GraphBuilder,
1033 const FSceneTextureParameters& SceneTextures,
1034 const FViewInfo& View,
1035 int DenoiserMode,
1036 const FRayTracingReflectionOptions& Options,
1037 IScreenSpaceDenoiser::FReflectionsInputs* OutDenoiserInputs);
1038
1039 void RenderDitheredLODFadingOutMask(FRDGBuilder& GraphBuilder, const FViewInfo& View, FRDGTextureRef SceneDepthTexture);
1040
1041 void RenderRayTracingShadows(
1042 FRDGBuilder& GraphBuilder,
1043 const FSceneTextureParameters& SceneTextures,
1044 const FViewInfo& View,
1045 const FLightSceneInfo& LightSceneInfo,
1046 const IScreenSpaceDenoiser::FShadowRayTracingConfig& RayTracingConfig,
1048 FRDGTextureRef LightingChannelsTexture,
1052 void CompositeRayTracingSkyLight(
1053 FRDGBuilder& GraphBuilder,
1054 const FMinimalSceneTextures& SceneTextures,
1057
1058 void RenderRayTracingAmbientOcclusion(
1059 FRDGBuilder& GraphBuilder,
1060 FViewInfo& View,
1061 const FSceneTextureParameters& SceneTextures,
1063
1064#if RHI_RAYTRACING
1065 template <int TextureImportanceSampling>
1067 FRDGBuilder& GraphBuilder,
1069 const TArray<FViewInfo>& Views,
1073
1075 FRDGBuilder& GraphBuilder,
1076 FRDGTextureRef SceneColorTexture,
1079
1080 void RenderRayTracingTranslucency(FRDGBuilder& GraphBuilder, FRDGTextureMSAA SceneColorTexture);
1081
1083 FRDGBuilder& GraphBuilder,
1084 const FViewInfo& View,
1089 float ResolutionFraction);
1090
1092 void SetupRayTracingDefaultMissShader(FRHICommandList& RHICmdList, const FViewInfo& View);
1093 void SetupPathTracingDefaultMissShader(FRHICommandList& RHICmdList, const FViewInfo& View);
1094
1096 void SetupRayTracingLightingMissShader(FRHICommandList& RHICmdList, const FViewInfo& View);
1097
1099 void RenderPathTracing(
1100 FRDGBuilder& GraphBuilder,
1101 const FViewInfo& View,
1105 struct FPathTracingResources& PathTracingResources);
1106
1109
1110 void SetupRayTracingRenderingData(FRDGBuilder& GraphBuilder, RayTracing::FGatherInstancesTaskData& RayTracingGatherInstances);
1111
1114
1118
1122
1125
1128
1129 // #dxr_todo: UE-72565: refactor ray tracing effects to not be member functions of DeferredShadingRenderer. Register each effect at startup and just loop over them automatically
1146
1147 // Versions for setting up the lumen material pipeline
1157#endif // RHI_RAYTRACING
1158
1159
1160 struct FNaniteBasePassVisibility
1161 {
1162 FNaniteVisibilityQuery* Query = nullptr;
1163 FNaniteVisibility* Visibility = nullptr;
1164
1165 } NaniteBasePassVisibility;
1166
1167 void RenderNanite(FRDGBuilder& GraphBuilder, const TArray<FViewInfo>& InViews, FSceneTextures& SceneTextures, bool bIsEarlyDepthComplete,
1168 FNaniteBasePassVisibility& InNaniteBasePassVisibility,
1172
1173 // FSceneRendererBase interface
1174 virtual FDeferredShadingSceneRenderer* GetDeferredShadingSceneRenderer() override { return this; }
1175
1177 bool bAreLightsInLightGrid;
1178};
#define FORCEINLINE
Definition AndroidPlatform.h:140
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::SIZE_T SIZE_T
An unsigned integer the same size as a pointer, the same as UPTRINT.
Definition Platform.h:1150
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
ELumenIndirectLightingSteps
Definition DeferredShadingRenderer.h:116
EReflectionsMethod
Definition DeferredShadingRenderer.h:307
EDiffuseIndirectMethod
Definition DeferredShadingRenderer.h:291
EAmbientOcclusionMethod
Definition DeferredShadingRenderer.h:299
constexpr void EnumRemoveFlags(Enum &Flags, Enum FlagsToRemove)
Definition EnumClassFlags.h:98
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
ELumenReflectionPass
Definition LumenSceneData.h:24
ERHIPipeline
Definition RHIPipeline.h:13
EShaderPlatform
Definition RHIShaderPlatform.h:11
ERayTracingPrimaryRaysFlag
Definition RaytracingOptions.h:25
ERDGPassFlags
Definition RenderGraphDefinitions.h:128
ESingleLayerWaterPrepassLocation
Definition SingleLayerWaterRendering.h:49
ETranslucencyView
Definition TranslucencyPass.h:8
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 DeferredShadingRenderer.h:317
void RenderSingleLayerWater(FRDGBuilder &GraphBuilder, TArrayView< FViewInfo > InViews, const FSceneTextures &SceneTextures, const FSingleLayerWaterPrePassResult *SingleLayerWaterPrePassResult, bool bShouldRenderVolumetricCloud, FSceneWithoutWaterTextures &SceneWithoutWaterTextures, FLumenSceneFrameTemporaries &LumenFrameTemporaries, bool bIsCameraUnderWater)
Definition SingleLayerWaterRendering.cpp:1710
void DebugLightGrid(FRDGBuilder &GraphBuilder, FSceneTextures &SceneTextures, bool bNeedLightGrid)
static void RenderAnisotropyPass(FRDGBuilder &GraphBuilder, TArrayView< FViewInfo > InViews, FSceneTextures &SceneTextures, const FScene *Scene, bool bDoParallelPass)
Definition AnisotropyRendering.cpp:357
void CommitFinalPipelineState()
Definition DeferredShadingRenderer.cpp:1277
void ClearView(FRHICommandListImmediate &RHICmdList)
static void RenderBasePassInternal(FDeferredShadingSceneRenderer &Renderer, FRDGBuilder &GraphBuilder, TArrayView< FViewInfo > InViews, const FSceneTextures &SceneTextures, const FRenderTargetBindingSlots &BasePassRenderTargets, FExclusiveDepthStencil::Type BasePassDepthStencilAccess, const FForwardBasePassTextures &ForwardBasePassTextures, const FDBufferTextures &DBufferTextures, bool bParallelBasePass, bool bRenderLightmapDensity, FInstanceCullingManager &InstanceCullingManager, bool bNaniteEnabled, struct FNaniteShadingCommands &NaniteBasePassShadingCommands, const TArrayView< Nanite::FRasterResults > &NaniteRasterResults)
Definition BasePassRendering.cpp:1449
void RenderSingleLayerWaterReflections(FRDGBuilder &GraphBuilder, TArrayView< FViewInfo > InViews, const FSceneTextures &SceneTextures, const FSceneWithoutWaterTextures &SceneWithoutWaterTextures, const FSingleLayerWaterPrePassResult *SingleLayerWaterPrePassResult, FLumenSceneFrameTemporaries &LumenFrameTemporaries)
Definition SingleLayerWaterRendering.cpp:1362
static void RenderBasePass(FDeferredShadingSceneRenderer &Renderer, FRDGBuilder &GraphBuilder, TArrayView< FViewInfo > InViews, FSceneTextures &SceneTextures, const FDBufferTextures &DBufferTextures, FExclusiveDepthStencil::Type BasePassDepthStencilAccess, FRDGTextureRef ForwardShadowMaskTexture, FInstanceCullingManager &InstanceCullingManager, bool bNaniteEnabled, struct FNaniteShadingCommands &NaniteBasePassShadingCommands, const TArrayView< Nanite::FRasterResults > &NaniteRasterResults)
Definition BasePassRendering.cpp:1071
virtual bool ShouldRenderNanite() const override
Definition DeferredShadingRenderer.cpp:472
void RenderPrePassView(FRHICommandList &RHICmdList, const FViewInfo &View)
void RenderOcclusion(FRDGBuilder &GraphBuilder, const FSceneTextures &SceneTextures, bool bIsOcclusionTesting, const FBuildHZBAsyncComputeParams *BuildHZBAsyncComputeParams, Froxel::FRenderer &FroxelRenderer)
Definition SceneOcclusion.cpp:1445
void RenderSingleLayerWaterInner(FRDGBuilder &GraphBuilder, TArrayView< FViewInfo > InViews, const FSceneTextures &SceneTextures, const FSceneWithoutWaterTextures &SceneWithoutWaterTextures, const FSingleLayerWaterPrePassResult *SingleLayerWaterPrePassResult)
Definition SingleLayerWaterRendering.cpp:1777
FSingleLayerWaterPrePassResult * RenderSingleLayerWaterDepthPrepass(FRDGBuilder &GraphBuilder, TArrayView< FViewInfo > InViews, const FSceneTextures &SceneTextures, ESingleLayerWaterPrepassLocation Location, TConstArrayView< Nanite::FRasterResults > NaniteRasterResults)
Definition SingleLayerWaterRendering.cpp:1022
FLumenCardRenderer LumenCardRenderer
Definition DeferredShadingRenderer.h:320
virtual bool ShouldRenderPrePass() const override
Definition DeferredShadingRenderer.cpp:464
void RenderVisualizeTexturePool(FRHICommandListImmediate &RHICmdList)
virtual void RenderHitProxies(FRDGBuilder &GraphBuilder, const FSceneRenderUpdateInputs *SceneUpdateInputs) override
Definition SceneHitProxyRendering.cpp:620
bool RenderHzb(FRDGBuilder &GraphBuilder, FRDGTextureRef SceneDepthTexture, const FBuildHZBAsyncComputeParams *AsyncComputeParams, Froxel::FRenderer &FroxelRenderer)
Definition DeferredShadingRenderer.cpp:477
virtual bool ShouldRenderVelocities() const override
Definition VelocityRendering.cpp:387
void CommitIndirectLightingState()
Definition IndirectLightRendering.cpp:484
bool RenderPrePassViewParallel(const FViewInfo &View, FRHICommandListImmediate &ParentCmdList, TFunctionRef< void()> AfterTasksAreStarted, bool bDoPrePre)
Definition DistanceFieldAmbientOcclusion.h:34
Type
Definition RHIResources.h:412
Definition SceneCore.h:147
Definition DeferredShadingRenderer.h:274
DECLARE_MULTICAST_DELEGATE_FourParams(FRenderDiffuseIndirectLight, const FScene &, const FViewInfo &, FRDGBuilder &, FGlobalIlluminationPluginResources &)
static RENDERER_API FRenderDiffuseIndirectVisualizations & RenderDiffuseIndirectVisualizations()
Definition DeferredShadingRenderer.cpp:403
DECLARE_MULTICAST_DELEGATE_OneParam(FAnyRayTracingPassEnabled, bool &)
DECLARE_MULTICAST_DELEGATE_FourParams(FRenderDiffuseIndirectVisualizations, const FScene &, const FViewInfo &, FRDGBuilder &, FGlobalIlluminationPluginResources &)
DECLARE_MULTICAST_DELEGATE_TwoParams(FPrepareRayTracing, const FViewInfo &, TArray< FRHIRayTracingShader * > &)
static RENDERER_API FAnyRayTracingPassEnabled & AnyRayTracingPassEnabled()
Definition DeferredShadingRenderer.cpp:384
static RENDERER_API FRenderDiffuseIndirectLight & RenderDiffuseIndirectLight()
Definition DeferredShadingRenderer.cpp:396
static RENDERER_API FPrepareRayTracing & PrepareRayTracing()
Definition DeferredShadingRenderer.cpp:390
Definition DeferredShadingRenderer.h:260
FRDGTextureRef LightingChannelsTexture
Definition DeferredShadingRenderer.h:267
FRDGTextureRef GBufferB
Definition DeferredShadingRenderer.h:263
FRDGTextureRef SceneColor
Definition DeferredShadingRenderer.h:266
FRDGTextureRef GBufferA
Definition DeferredShadingRenderer.h:262
FRDGTextureRef GBufferC
Definition DeferredShadingRenderer.h:264
FRDGTextureRef SceneDepthZ
Definition DeferredShadingRenderer.h:265
Definition GlobalShader.h:173
Definition RHIResources.h:4572
Definition HitProxies.h:218
Definition InstanceCullingManager.h:45
Definition SceneCore.h:23
Definition LightSceneInfo.h:208
Definition DeferredShadingRenderer.h:88
TArray< FCardPageRenderData, SceneRenderingAllocator > CardPagesToRender
Definition DeferredShadingRenderer.h:90
TArray< int32, SceneRenderingAllocator > MeshDrawPrimitiveIds
Definition DeferredShadingRenderer.h:94
FMeshCommandOneFrameArray MeshDrawCommands
Definition DeferredShadingRenderer.h:93
void Reset()
Definition DeferredShadingRenderer.h:105
FResampledCardCaptureAtlas ResampledCardCaptureAtlas
Definition DeferredShadingRenderer.h:96
int32 NumCardTexelsToCapture
Definition DeferredShadingRenderer.h:92
bool bHasAnyCardCopy
Definition DeferredShadingRenderer.h:103
bool bPropagateGlobalLightingChange
Definition DeferredShadingRenderer.h:99
Definition LumenSceneLighting.h:26
Definition MaterialRenderProxy.h:102
Definition NaniteVisibility.h:82
Definition RenderGraphResources.h:1426
Definition RenderGraphResources.h:1321
Definition RenderGraphBuilder.h:49
Definition RenderGraphUtils.h:1272
Definition RenderGraphResources.h:839
Definition RenderGraphResources.h:905
Definition RenderGraphResources.h:571
Definition RHICommandList.h:4626
Definition RHICommandList.h:3819
Definition RHIResources.h:2153
Definition RHIResources.h:3294
Definition RenderResource.h:37
TArray< FViewInfo > Views
Definition SceneRendering.h:2053
FScene * Scene
Definition SceneRendering.h:2026
Definition SceneRendering.h:2080
FViewFamilyInfo ViewFamily
Definition SceneRendering.h:2089
Definition SceneView.h:2212
Definition ScenePrivate.h:2875
Definition SceneRendering.h:1132
int32 SceneRendererPrimaryViewId
Definition SceneRendering.h:1604
Definition Froxel.h:69
EMode
Definition ScreenSpaceDenoise.h:66
EShadowRequirements
Definition ScreenSpaceDenoise.h:168
Definition SceneVisibility.h:33
Definition LumenRadianceCache.h:50
Definition Renderer.Build.cs:6
Definition ArrayView.h:139
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void SetNumZeroed(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2340
void Reset(SizeType NewSize=0)
Definition Array.h:2246
Definition AssetRegistryState.h:50
Definition DeferredShadingRenderer.h:178
void Commit()
Definition DeferredShadingRenderer.h:201
TPipelineState()
Definition DeferredShadingRenderer.h:180
const DimensionType & operator[](DimensionType PermutationVectorType::*Dimension) const
Definition DeferredShadingRenderer.h:216
const PermutationVectorType & operator*() const
Definition DeferredShadingRenderer.h:234
const PermutationVectorType * operator->() const
Definition DeferredShadingRenderer.h:226
bool IsCommitted() const
Definition DeferredShadingRenderer.h:209
void Set(DimensionType PermutationVectorType::*Dimension, const DimensionType &DimensionValue)
Definition DeferredShadingRenderer.h:187
Definition RenderGraphResources.h:251
Definition RefCounting.h:454
Definition SharedPointer.h:692
Definition ContainerAllocationPolicies.h:894
Type
Definition TranslucentPassResource.h:13
Definition DeferredShadingRenderer.h:73
Definition DeferredShadingRenderer.h:40
Definition DeferredShadingRenderer.h:46
Definition DeferredShadingRenderer.cpp:316
Definition SceneManagement.h:73
Definition DeferredShadingRenderer.h:128
FSSDSignalTextures IndirectLightingTextures
Definition DeferredShadingRenderer.h:129
FLumenMeshSDFGridParameters MeshSDFGridParameters
Definition DeferredShadingRenderer.h:130
FLumenScreenSpaceBentNormalParameters ScreenBentNormalParameters
Definition DeferredShadingRenderer.h:132
LumenRadianceCache::FRadianceCacheInterpolationParameters RadianceCacheParameters
Definition DeferredShadingRenderer.h:131
Definition DeferredShadingRenderer.h:126
TArray< FViewOutputs, TInlineAllocator< 1 > > ViewOutputs
Definition DeferredShadingRenderer.h:135
void Resize(int32 NewNum)
Definition DeferredShadingRenderer.h:139
void DonePreLights()
Definition DeferredShadingRenderer.h:155
void DoneAsync(bool bAsyncReflections)
Definition DeferredShadingRenderer.h:144
void DoneComposite()
Definition DeferredShadingRenderer.h:167
Definition SceneTextureReductions.h:16
Definition LumenSceneCardCapture.h:17
Definition DBufferTextures.h:35
Definition ShadowSetup.cpp:1366
Definition BasePassRendering.h:71
Definition LumenFrontLayerTranslucency.h:22
static UE_FORCEINLINE_HINT void * Memset(void *Dest, uint8 Char, SIZE_T Count)
Definition GenericPlatformMemory.h:581
Definition HairStrandsTransmittance.h:19
Definition ScenePrivate.h:2290
Definition LumenSceneDirectLighting.cpp:1889
Definition LumenFrontLayerTranslucency.h:45
Definition LumenSceneData.h:895
Definition MegaLights.cpp:1816
Definition SceneTextures.h:52
Definition NaniteShared.h:936
Definition NaniteVisibility.cpp:54
Definition PathTracingResources.h:8
Definition SceneRendering.h:975
Definition RenderGraphUtils.h:288
Definition ShaderParameterMacros.h:770
Definition LumenSceneCardCapture.h:26
Definition SceneRendering.h:2692
Definition SceneTexturesConfig.h:114
Definition SceneTextures.h:110
Definition SingleLayerWaterRendering.h:32
Definition CanvasTypes.h:854
Definition TranslucentRendering.h:18
Definition SingleLayerWaterRendering.h:22
Definition LightSceneInfo.h:146
Definition TranslucentLighting.h:16
Definition TranslucentPassResource.h:76
Definition TranslucentLighting.h:61
Definition SceneRendering.h:749
Definition ScreenSpaceDenoise.h:184
Definition LumenRadiosity.h:10
Definition NaniteCullRaster.h:86