UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ShadowMap.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "Misc/Guid.h"
8#include "SceneManagement.h"
9
10class FShadowMap2D;
12class ULightComponent;
15
26
28{
33
35 {
36 if (Index == 0)
37 {
38 return Distance * (1.f / 255.0f);
39 }
40 else
41 {
42 checkSlow(Index == 1);
43 return PenumbraSize * (1.f / 255.0f);
44 }
45 }
46
47 // this is not a correct U8 quantizer (should round, not trunc); see below for correct version
49 {
50 if (Index == 0)
51 {
52 Distance = (uint8)FMath::Clamp<int32>(FMath::TruncToInt(InComponent * 255.0f), 0, 255);
53 }
54 else
55 {
56 checkSlow(Index == 1);
57 PenumbraSize = (uint8)FMath::Clamp<int32>(FMath::TruncToInt(InComponent * 255.0f), 0, 255);
58 }
59 }
60
61 #if 0
62 // correct quantizer; needs to be tested to make sure other biases aren't compensating for the error
64 {
66
67 if (Index == 0)
68 {
70 }
71 else
72 {
73 checkSlow(Index == 1);
75 }
76 }
77 #endif
78
81 {
82 return Distance == RHS.Distance &&
84 Coverage == RHS.Coverage;
85 }
86
89 {
90 Distance = (uint8)FMath::Clamp<int32>(FMath::TruncToInt(InSample.Distance * 255.0f), 0, 255);
91 PenumbraSize = (uint8)FMath::Clamp<int32>(FMath::TruncToInt(InSample.PenumbraSize * 255.0f), 0, 255);
92 Coverage = InSample.IsMapped ? 255 : 0;
93 }
94};
95
100{
101public:
102 virtual ~FShadowMapData2D() {}
103
104 // Accessors.
105 uint32 GetSizeX() const { return SizeX; }
106 uint32 GetSizeY() const { return SizeY; }
107
108 // USurface interface
109 virtual float GetSurfaceWidth() const { return (float)SizeX; }
110 virtual float GetSurfaceHeight() const { return (float)SizeY; }
111
119 virtual ShadowMapDataType GetType() const { return UNKNOWN; }
120
122
124
125protected:
126
132
135
138};
139
144{
145public:
146
153
154 const FSignedDistanceFieldShadowSample& operator()(uint32 X, uint32 Y) const { return Data[SizeX * Y + X]; }
156
159 {
160 OutData.Empty(Data.Num());
161 OutData.AddUninitialized(Data.Num());
162 for (int32 Index = 0; Index < Data.Num(); Index++)
163 {
164 OutData[Index] = Data[Index];
165 }
166 }
167
168 virtual void Serialize(FArchive* OutShadowMap) override
169 {
170 for (int32 Index = 0; Index < Data.Num(); Index++)
171 {
172 OutShadowMap->Serialize(&Data[Index], sizeof(FSignedDistanceFieldShadowSample));
173 }
174 }
175
176private:
178};
179
184{
185public:
186
193
195
198
201 {
202 OutData = Data;
203 }
204
205 virtual void Serialize(FArchive* OutShadowMap) override
206 {
207 for (int32 Index = 0; Index < Data.Num(); Index++)
208 {
210 }
211 }
212
213private:
215};
216
222
227{
228public:
229 enum
230 {
233 };
234
237
240 NumRefs(0)
241 {
242 }
243
249
251 virtual ~FShadowMap() { check(NumRefs == 0); }
252
258 bool ContainsLight(const FGuid& LightGuid) const
259 {
260 return LightGuids.Find(LightGuid) != INDEX_NONE;
261 }
262
263 // FShadowMap interface.
264 virtual void AddReferencedObjects(FReferenceCollector& Collector) {}
265 ENGINE_API virtual void Serialize(FArchive& Ar);
267
268 // Runtime type casting.
269 virtual FShadowMap2D* GetShadowMap2D() { return NULL; }
270 virtual const FShadowMap2D* GetShadowMap2D() const { return NULL; }
271
272 // Reference counting.
273 void AddRef()
274 {
276 NumRefs++;
277 }
278 void Release()
279 {
281 checkSlow(NumRefs > 0);
282 if (--NumRefs == 0)
283 {
284 Cleanup();
285 }
286 }
287
288protected:
289
293 ENGINE_API virtual void Cleanup();
294
295private:
296 int32 NumRefs;
297};
298
300{
301public:
302
309
314
318 const FBoxSphereBounds& Bounds,
321
333
335
338
339 // Accessors.
341 ENGINE_API const UTexture2D* GetTexture() const;
344 bool IsValid() const { return Texture != NULL; }
345 bool IsShadowFactorTexture() const { return false; }
346
347 // FShadowMap interface.
348 ENGINE_API virtual void AddReferencedObjects(FReferenceCollector& Collector);
349 ENGINE_API virtual void Serialize(FArchive& Ar);
351
352 // Runtime type casting.
353 virtual FShadowMap2D* GetShadowMap2D() { return this; }
354 virtual const FShadowMap2D* GetShadowMap2D() const { return this; }
355
356#if WITH_EDITOR
358 static void SetStatusUpdate(bool bInEnable)
359 {
360 bUpdateStatus = bInEnable;
361 }
362
363 static bool GetStatusUpdate()
364 {
365 return bUpdateStatus;
366 }
367#endif
368
369protected:
370
373
376
379
382
385
386#if WITH_EDITOR
388 static ENGINE_API bool bUpdateStatus;
389#endif
390};
391
392
393
#define NULL
Definition oodle2base.h:134
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
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
ELightMapPaddingType
Definition EngineTypes.h:2382
EShadowMapFlags
Definition EngineTypes.h:2391
#define X(Name, Desc)
Definition FormatStringSan.h:47
ENGINE_API FArchive & operator<<(FArchive &Ar, FShadowMap *&R)
Definition ShadowMap.cpp:1174
CORE_API bool IsInParallelLoadingThread()
Definition ThreadingBase.cpp:212
CORE_API bool IsInGameThread()
Definition ThreadingBase.cpp:185
bool(* IsInAsyncLoadingThread)()
Definition ThreadingBase.cpp:357
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition RenderDeferredCleanup.h:11
Definition ShadowMap.h:218
FQuantizedSignedDistanceFieldShadowSample Samples[4]
Definition ShadowMap.h:220
virtual ShadowMapDataType GetType() const override
Definition ShadowMap.h:199
virtual void Quantize(TArray< FQuantizedSignedDistanceFieldShadowSample > &OutData) const override
Definition ShadowMap.h:200
virtual void Serialize(FArchive *OutShadowMap) override
Definition ShadowMap.h:205
FQuantizedSignedDistanceFieldShadowSample * GetData()
Definition ShadowMap.h:194
FQuantizedSignedDistanceFieldShadowSample & operator()(uint32 X, uint32 Y)
Definition ShadowMap.h:197
FQuantizedShadowSignedDistanceFieldData2D(uint32 InSizeX, uint32 InSizeY)
Definition ShadowMap.h:187
const FQuantizedSignedDistanceFieldShadowSample & operator()(uint32 X, uint32 Y) const
Definition ShadowMap.h:196
Definition UObjectGlobals.h:2492
Definition ShadowMap.h:300
FVector2D CoordinateScale
Definition ShadowMap.h:375
ENGINE_API FShadowMap2D()
Definition ShadowMap.cpp:513
virtual ENGINE_API void AddReferencedObjects(FReferenceCollector &Collector)
Definition ShadowMap.cpp:555
TObjectPtr< UShadowMapTexture2D > Texture
Definition ShadowMap.h:372
static ENGINE_API int32 EncodeSingleTexture(const FStaticLightingBuildContext *LightingContext, struct FShadowMapPendingTexture &PendingTexture, UShadowMapTexture2D *Texture, TArray< TArray< FFourDistanceFieldSamples > > &MipData)
const FVector2D & GetCoordinateBias() const
Definition ShadowMap.h:343
bool IsShadowFactorTexture() const
Definition ShadowMap.h:345
FVector2D CoordinateBias
Definition ShadowMap.h:378
const FVector2D & GetCoordinateScale() const
Definition ShadowMap.h:342
ENGINE_API UTexture2D * GetTexture()
Definition ShadowMap.cpp:552
virtual const FShadowMap2D * GetShadowMap2D() const
Definition ShadowMap.h:354
virtual ENGINE_API FShadowMapInteraction GetInteraction() const
Definition ShadowMap.cpp:592
virtual FShadowMap2D * GetShadowMap2D()
Definition ShadowMap.h:353
static ENGINE_API TRefCountPtr< FShadowMap2D > AllocateInstancedShadowMap(UObject *LightMapOuter, UInstancedStaticMeshComponent *Component, TArray< TMap< ULightComponent *, TUniquePtr< FShadowMapData2D > > > &&InstancedShadowMapData, UMapBuildDataRegistry *Registry, FGuid MapBuildDataId, const FBoxSphereBounds &Bounds, ELightMapPaddingType PaddingType, EShadowMapFlags ShadowmapFlags)
Definition ShadowMap.cpp:602
static ENGINE_API TRefCountPtr< FShadowMap2D > AllocateShadowMap(UObject *LightMapOuter, const TMap< ULightComponent *, FShadowMapData2D * > &ShadowMapData, const FBoxSphereBounds &Bounds, ELightMapPaddingType InPaddingType, EShadowMapFlags InShadowmapFlags)
Definition ShadowMap.cpp:427
FVector4f InvUniformPenumbraSize
Definition ShadowMap.h:384
static ENGINE_API void EncodeTextures(const FStaticLightingBuildContext *LightingContext, bool bLightingSuccessful, bool bMultithreadedEncode=false)
bool IsValid() const
Definition ShadowMap.h:344
bool bChannelValid[4]
Definition ShadowMap.h:381
Definition ShadowMap.h:100
virtual float GetSurfaceHeight() const
Definition ShadowMap.h:110
virtual ~FShadowMapData2D()
Definition ShadowMap.h:102
uint32 SizeY
Definition ShadowMap.h:137
uint32 GetSizeX() const
Definition ShadowMap.h:105
uint32 GetSizeY() const
Definition ShadowMap.h:106
virtual void Serialize(FArchive *OutShadowMap)
Definition ShadowMap.h:123
virtual void Quantize(TArray< FQuantizedSignedDistanceFieldShadowSample > &OutData) const
Definition ShadowMap.h:121
FShadowMapData2D(uint32 InSizeX, uint32 InSizeY)
Definition ShadowMap.h:127
virtual ShadowMapDataType GetType() const
Definition ShadowMap.h:119
uint32 SizeX
Definition ShadowMap.h:134
virtual float GetSurfaceWidth() const
Definition ShadowMap.h:109
ShadowMapDataType
Definition ShadowMap.h:112
@ SHADOW_SIGNED_DISTANCE_FIELD_DATA
Definition ShadowMap.h:116
@ SHADOW_SIGNED_DISTANCE_FIELD_DATA_QUANTIZED
Definition ShadowMap.h:117
@ SHADOW_FACTOR_DATA_QUANTIZED
Definition ShadowMap.h:115
@ UNKNOWN
Definition ShadowMap.h:113
@ SHADOW_FACTOR_DATA
Definition ShadowMap.h:114
Definition SceneManagement.h:613
Definition ShadowMap.h:227
TArray< FGuid > LightGuids
Definition ShadowMap.h:236
void Release()
Definition ShadowMap.h:278
virtual void AddReferencedObjects(FReferenceCollector &Collector)
Definition ShadowMap.h:264
FShadowMap(TArray< FGuid > InLightGuids)
Definition ShadowMap.h:244
virtual FShadowMapInteraction GetInteraction() const =0
FShadowMap()
Definition ShadowMap.h:239
virtual const FShadowMap2D * GetShadowMap2D() const
Definition ShadowMap.h:270
@ SMT_None
Definition ShadowMap.h:231
@ SMT_2D
Definition ShadowMap.h:232
virtual ~FShadowMap()
Definition ShadowMap.h:251
virtual ENGINE_API void Cleanup()
Definition ShadowMap.cpp:59
virtual FShadowMap2D * GetShadowMap2D()
Definition ShadowMap.h:269
void AddRef()
Definition ShadowMap.h:273
bool ContainsLight(const FGuid &LightGuid) const
Definition ShadowMap.h:258
Definition ShadowMap.h:144
virtual void Serialize(FArchive *OutShadowMap) override
Definition ShadowMap.h:168
virtual void Quantize(TArray< FQuantizedSignedDistanceFieldShadowSample > &OutData) const override
Definition ShadowMap.h:158
FShadowSignedDistanceFieldData2D(uint32 InSizeX, uint32 InSizeY)
Definition ShadowMap.h:147
FSignedDistanceFieldShadowSample & operator()(uint32 X, uint32 Y)
Definition ShadowMap.h:155
const FSignedDistanceFieldShadowSample & operator()(uint32 X, uint32 Y) const
Definition ShadowMap.h:154
virtual ShadowMapDataType GetType() const override
Definition ShadowMap.h:157
Definition Array.h:670
UE_FORCEINLINE_HINT SizeType AddUninitialized()
Definition Array.h:1664
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT ElementType * GetData() UE_LIFETIMEBOUND
Definition Array.h:1027
SizeType AddZeroed()
Definition Array.h:2755
UE_NODEBUG UE_FORCEINLINE_HINT bool Find(const ElementType &Item, SizeType &Index) const
Definition Array.h:1302
void Empty(SizeType Slack=0)
Definition Array.h:2273
Definition UnrealString.h.inl:34
Definition RefCounting.h:454
Definition UniquePtr.h:107
Definition InstancedStaticMeshComponent.h:158
Definition MapBuildDataRegistry.h:295
Definition Object.h:95
Definition ShadowMapTexture2D.h:13
Definition Texture2D.h:26
U16 Index
Definition radfft.cpp:71
static uint8 QuantizeUNormFloatTo8(float UnitFloat)
Definition Color.h:600
Definition Guid.h:109
@ NumFilterableComponents
Definition ShadowMap.h:29
void SetFilterableComponent(float InComponent, int32 Index)
Definition ShadowMap.h:48
uint8 PenumbraSize
Definition ShadowMap.h:31
FQuantizedSignedDistanceFieldShadowSample()
Definition ShadowMap.h:87
uint8 Coverage
Definition ShadowMap.h:32
float GetFilterableComponent(int32 Index) const
Definition ShadowMap.h:34
bool operator==(const FQuantizedSignedDistanceFieldShadowSample &RHS) const
Definition ShadowMap.h:80
uint8 Distance
Definition ShadowMap.h:30
FQuantizedSignedDistanceFieldShadowSample(const FSignedDistanceFieldShadowSample &InSample)
Definition ShadowMap.h:88
Definition ShadowMap.h:17
bool IsMapped
Definition ShadowMap.h:24
float Distance
Definition ShadowMap.h:19
float PenumbraSize
Definition ShadowMap.h:21
Definition ObjectPtr.h:488
Definition BoxSphereBounds.h:25