UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ShadowScene.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "CoreMinimal.h"
7#include "Containers/Array.h"
8#include "Tasks/Task.h"
9#include "SceneExtensions.h"
10#include "LightSceneInfo.h"
11
13class FScene;
15class FRDGBuilder;
18class FViewInfo;
22
27{
29public:
31
36 float GetLightMobilityFactor(int32 LightId) const;
37
41 void UpdateForRenderedFrame(FRDGBuilder& GraphBuilder);
42
44
45 // List of always invalidating primitives, if this gets too popular perhaps a TSet or some such is more appropriate for performance scaling.
46 TArrayView<FPrimitiveSceneInfo*> GetAlwaysInvalidatingPrimitives() { return AlwaysInvalidatingPrimitives; }
47
52
54
55private:
56
57 class FUpdater : public ISceneExtensionUpdater
58 {
59 public:
61
62 FUpdater(FShadowScene& InShadowScene) : ShadowScene(InShadowScene) {}
63
64 // Handle all scene changes wrt lights
65 virtual void PreLightsUpdate(FRDGBuilder& GraphBuilder, const FLightSceneChangeSet& LightSceneChangeSet) override;
66 virtual void PostLightsUpdate(FRDGBuilder& GraphBuilder, const FLightSceneChangeSet &LightSceneChangeSet) override;
67
71 virtual void PreSceneUpdate(FRDGBuilder& GraphBuilder, const FScenePreUpdateChangeSet& ChangeSet, FSceneUniformBuffer& SceneUniforms) override;
72 virtual void PostSceneUpdate(FRDGBuilder& GraphBuilder, const FScenePostUpdateChangeSet& ChangeSet) override;
73
74 FShadowScene& ShadowScene;
75 };
76
78 friend class FUpdater;
79
80 virtual void InitExtension(FScene& InScene) override;
81 virtual ISceneExtensionUpdater* CreateUpdater() override;
82 virtual ISceneExtensionRenderer* CreateRenderer(FSceneRendererBase& InSceneRenderer, const FEngineShowFlags& EngineShowFlags) override;
83
84 inline bool IsActive(int32 LightId) const { return ActiveLights[LightId]; }
85
89 struct FLightCommonData
90 {
94 int32 FirstActiveFrameNumber;
95 float MobilityFactor;
96 };
97 TSparseArray<FLightCommonData> LightsCommonData;
98
99 FLightCommonData& GetOrAddLightCommon(int32 LightId)
100 {
101 if (!LightsCommonData.IsValidIndex(LightId))
102 {
103 LightsCommonData.EmplaceAt(LightId, FLightCommonData{});
104 }
105 return LightsCommonData[LightId];
106 }
107
111 struct FDirectionalLightData
112 {
114 };
115 TArray<FDirectionalLightData> DirectionalLights;
116
117 // Bit-array marking active lights, those we deem active are ones that have been modified in a recent frame and thus need some kind of active update.
118 TBitArray<> ActiveLights;
119
120 // Links to other systems etc.
121 mutable UE::Tasks::FTask SceneChangeUpdateTask;
122
123 // List of always invalidating primitives, if this gets too popular perhaps a TSet or some such is more appropriate for performance scaling.
124 TArray<FPrimitiveSceneInfo*> AlwaysInvalidatingPrimitives;
125
126 // List of primitives that are marked as "first person world-space" meaning they are to cast shadows only onto the world but not the FP geo itself
127 TArray<FPrimitiveSceneInfo*> FirstPersonWorldSpacePrimitives;
128
129 bool bEnableVirtualShadowMapFirstPersonClipmap = false;
130};
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_SCENE_EXTENSION_UPDATER(ClassName, SceneExtensionClassName)
Definition SceneExtensions.h:390
#define DECLARE_SCENE_EXTENSION(ModuleExport, ClassName)
Definition SceneExtensions.h:384
int32 FPersistentId
Definition LightSceneInfo.h:220
Definition PrimitiveSceneInfo.h:266
Definition ShadowRendering.h:279
Definition RenderGraphBuilder.h:49
Definition ScenePrimitiveUpdates.h:129
Definition ScenePrimitiveUpdates.h:116
Definition SceneRendering.h:2023
Definition SceneUniformBuffer.h:137
Definition ScenePrivate.h:2875
Definition ShadowSceneRenderer.h:47
Definition ShadowScene.h:27
void DebugRender(TArrayView< FViewInfo > Views)
Definition ShadowScene.cpp:238
TArrayView< FPrimitiveSceneInfo * > GetAlwaysInvalidatingPrimitives()
Definition ShadowScene.h:46
friend class FUpdater
Definition ShadowScene.h:78
float GetLightMobilityFactor(int32 LightId) const
Definition ShadowScene.cpp:226
void UpdateForRenderedFrame(FRDGBuilder &GraphBuilder)
Definition ShadowScene.cpp:187
void WaitForSceneLightsUpdateTask()
Definition ShadowScene.cpp:283
static bool ShouldCreateExtension(FScene &InScene)
Definition ShadowScene.cpp:288
Definition SceneRendering.h:1132
Definition VirtualShadowMapCacheManager.h:93
Definition SceneManagement.h:1047
Definition SceneExtensions.h:69
Definition SceneExtensions.h:45
Definition SceneExtensions.h:24
ISceneExtension(FScene &InScene)
Definition SceneExtensions.h:29
Definition ArrayView.h:139
Definition Array.h:670
bool IsValidIndex(int32 Index) const
Definition SparseArray.h:481
Definition SparseArray.h:524
int32 EmplaceAt(int32 Index, ArgsType &&... Args)
Definition SparseArray.h:619
Definition ShowFlags.h:56
Definition ScenePrivate.h:2850