UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
LightMap.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 LightMap.h: Light-map definitions.
5=============================================================================*/
6
7#pragma once
8
9#include "CoreMinimal.h"
11#include "Misc/Guid.h"
12#include "Engine/EngineTypes.h"
15#include "SceneManagement.h"
17
18class FLightMap2D;
21class UPrimitiveComponent;
23class ULightComponent;
24class UVirtualTexture;
27
30
33
36
37#if WITH_EDITOR
40#endif
41
43
45
50{
51public:
52 enum
53 {
55 LMT_1D = 1,
56 LMT_2D = 2,
57 };
58
61
64
66 virtual ~FLightMap() { check(NumRefs == 0); }
67
73 bool ContainsLight(const FGuid& LightGuid) const
74 {
75 return LightGuids.Find(LightGuid) != INDEX_NONE;
76 }
77
78 // FLightMap interface.
79 virtual void AddReferencedObjects( FReferenceCollector& Collector ) {}
80 ENGINE_API virtual void Serialize(FArchive& Ar);
83
84 // Runtime type casting.
85 virtual FLightMap2D* GetLightMap2D() { return NULL; }
86 virtual const FLightMap2D* GetLightMap2D() const { return NULL; }
87
88 // Reference counting.
89 void AddRef()
90 {
92 NumRefs++;
93 }
94 void Release()
95 {
97 checkSlow(NumRefs > 0);
98 if(--NumRefs == 0)
99 {
100 Cleanup();
101 }
102 }
103
107 inline bool AllowsHighQualityLightmaps() const
108 {
110 }
111
112protected:
113
116
120 ENGINE_API virtual void Cleanup();
121
122private:
123 int32 NumRefs;
124};
125
126
127
133
157
162{
163public:
164
167
172 Data(InSizeX * InSizeY),
173 SizeX(InSizeX),
174 SizeY(InSizeY)
175 {}
176
177 // Accessors.
178 const FLightSample& operator()(uint32 X,uint32 Y) const { return Data(SizeX * Y + X); }
179 FLightSample& operator()(uint32 X,uint32 Y) { return Data(SizeX * Y + X); }
180 uint32 GetSizeX() const { return SizeX; }
181 uint32 GetSizeY() const { return SizeY; }
182
183private:
184
187
189 uint32 SizeX;
190
192 uint32 SizeY;
193};
194
198class FLightMap2D : public FLightMap
199{
200public:
201
204
205 // FLightMap2D interface.
206
214
216 {
218 {
219 if (Textures[BasisIndex])
220 {
222 }
223 }
224
226 {
228 }
229
231 {
233 }
234 }
235
241
243
245
247
254
256 const FVector2D& GetCoordinateBias() const { return CoordinateBias; }
257
258 // FLightMap interface.
259 ENGINE_API virtual void AddReferencedObjects( FReferenceCollector& Collector );
260
261 ENGINE_API virtual void Serialize(FArchive& Ar);
264
265 // Runtime type casting.
266 virtual const FLightMap2D* GetLightMap2D() const { return this; }
267 virtual FLightMap2D* GetLightMap2D() { return this; }
268
284
299
305 static ENGINE_API void EncodeTextures(const FStaticLightingBuildContext* LightingContext, bool bLightingSuccessful, bool bMultithreadedEncode = false );
306
307#if WITH_EDITOR
312#endif // WITH_EDITOR
313
315 static void SetStatusUpdate(bool bInEnable)
316 {
318 }
319
320 static bool GetStatusUpdate()
321 {
322 return bUpdateStatus;
323 }
324
327
329
331
333
336
339
342
345
348
351
354
355protected:
357
360};
361
367
373
385
397
398// These act like a POD as FColor is also set to act like POD
399template <> struct TIsPODType<FQuantizedDirectionalLightSample> { enum { Value = true }; };
400template <> struct TIsPODType<FQuantizedSimpleLightSample> { enum { Value = true }; };
401
405template<class QuantizedLightSampleType>
406struct TQuantizedLightSampleBulkData : public TBulkData<QuantizedLightSampleType>
407{
409};
410
413{
414public:
415
420
421 // FLightMap interface.
422 virtual void Serialize(FArchive& Ar);
423
425};
426
473
475{
476public:
480
482 Start(InStart),
483 End(InEnd),
484 bHit(bInHit)
485 {}
486};
487
498
529
540{
541 const FLightMapCoefficients& Sample = MappingData[Y * Pitch + X];
542 bool bIsMapped = (Sample.Coverage > 0);
543 return bIsMapped;
544}
545
554template <class TMappingData>
555void CropUnmappedTexels( const TMappingData& MappingData, int32 SizeX, int32 SizeY, FIntRect& CroppedRect )
556{
557 int32 StartX = 0;
558 int32 StartY = 0;
559 int32 EndX = SizeX;
560 int32 EndY = SizeY;
561
562 CroppedRect.Min.X = EndX;
563 CroppedRect.Min.Y = EndY;
564 CroppedRect.Max.X = StartX - 1;
565 CroppedRect.Max.Y = StartY - 1;
566
567 for ( int32 Y = StartY; Y < EndY; ++Y )
568 {
569 bool bIsMappedRow = false;
570
571 // Scan for first mapped texel in this row (also checks whether the row contains a mapped texel at all).
572 for ( int32 X = StartX; X < EndX; ++X )
573 {
574 if ( IsTexelMapped( MappingData, X, Y, SizeX ) )
575 {
576 CroppedRect.Min.X = FMath::Min<int32>(CroppedRect.Min.X, X);
577 bIsMappedRow = true;
578 break;
579 }
580 }
581
582 // Scan for the last mapped texel in this row.
583 for ( int32 X = EndX-1; X > CroppedRect.Max.X; --X )
584 {
585 if ( IsTexelMapped( MappingData, X, Y, SizeX ) )
586 {
587 CroppedRect.Max.X = X;
588 break;
589 }
590 }
591
592 if ( bIsMappedRow )
593 {
594 CroppedRect.Min.Y = FMath::Min<int32>(CroppedRect.Min.Y, Y);
595 CroppedRect.Max.Y = FMath::Max<int32>(CroppedRect.Max.Y, Y);
596 }
597 }
598
599 CroppedRect.Max.X = CroppedRect.Max.X + 1;
600 CroppedRect.Max.Y = CroppedRect.Max.Y + 1;
601 CroppedRect.Min.X = FMath::Min<int32>(CroppedRect.Min.X, CroppedRect.Max.X);
602 CroppedRect.Min.Y = FMath::Min<int32>(CroppedRect.Min.Y, CroppedRect.Max.Y);
603}
604
#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
ELightingBuildQuality
Definition EngineTypes.h:996
#define X(Name, Desc)
Definition FormatStringSan.h:47
ELightMapFlags
Definition LightMapTexture2D.h:18
FLightmassDebugOptions GLightmassDebugOptions
Definition LightMap.cpp:39
void CropUnmappedTexels(const TMappingData &MappingData, int32 SizeX, int32 SizeY, FIntRect &CroppedRect)
Definition LightMap.h:555
ENGINE_API bool GUseBilinearLightmaps
Definition LightMap.cpp:42
ENGINE_API FColor GTexelSelectionColor
ENGINE_API bool GAllowLightmapPadding
Definition LightMap.cpp:45
ENGINE_API ELightingBuildQuality GLightingBuildQuality
Definition LightMap.cpp:59
ENGINE_API FArchive & operator<<(FArchive &Ar, FLightMap *&R)
Definition LightMap.cpp:3323
ENGINE_API bool IsTexelDebuggingEnabled()
Definition LightMap.cpp:116
bool IsTexelMapped(const TArray< FLightMapCoefficients > &MappingData, int32 X, int32 Y, int32 Pitch)
Definition LightMap.h:539
constexpr int32 NUM_LQ_LIGHTMAP_COEF
Definition SceneManagement.h:367
constexpr int32 NUM_HQ_LIGHTMAP_COEF
Definition SceneManagement.h:364
constexpr int32 NUM_STORED_LIGHTMAP_COEF
Definition SceneManagement.h:361
CORE_API bool IsInParallelLoadingThread()
Definition ThreadingBase.cpp:212
CORE_API bool IsInGameThread()
Definition ThreadingBase.cpp:185
bool(* IsInAsyncLoadingThread)()
Definition ThreadingBase.cpp:357
#define UE_ARRAY_COUNT(array)
Definition UnrealTemplate.h:212
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 LightMap.h:475
int32 bHit
Definition LightMap.h:479
FVector End
Definition LightMap.h:478
FVector Start
Definition LightMap.h:477
FDebugShadowRay(const FVector &InStart, const FVector &InEnd, bool bInHit)
Definition LightMap.h:481
Definition RenderDeferredCleanup.h:11
Definition ShadowMap.h:218
Definition LightMap.h:413
FLegacyLightMap1D()
Definition LightMap.h:416
virtual FLightMapInteraction GetInteraction(ERHIFeatureLevel::Type InFeatureLevel) const
Definition LightMap.h:424
Definition LightMap.h:199
ENGINE_API const UTexture2D * GetTexture(uint32 BasisIndex) const
Definition LightMap.cpp:2965
FVector2D CoordinateScale
Definition LightMap.h:344
FVector4f InvUniformPenumbraSize
Definition LightMap.h:350
FVector4f ScaleVectors[NUM_STORED_LIGHTMAP_COEF]
Definition LightMap.h:338
static ENGINE_API void EncodeTextures(const FStaticLightingBuildContext *LightingContext, bool bLightingSuccessful, bool bMultithreadedEncode=false)
Definition LightMap.cpp:2462
virtual ENGINE_API FLightMapInteraction GetInteraction(ERHIFeatureLevel::Type InFeatureLevel) const
Definition LightMap.cpp:3250
ENGINE_API UTexture2D * GetAOMaterialMaskTexture() const
Definition LightMap.cpp:2980
virtual const FLightMap2D * GetLightMap2D() const
Definition LightMap.h:266
const FVector2D & GetCoordinateBias() const
Definition LightMap.h:256
ULightMapVirtualTexture2D * GetVirtualTexture(uint32 BasisIndex) const
Definition LightMap.h:244
TObjectPtr< UShadowMapTexture2D > ShadowMapTexture
Definition LightMap.h:332
TObjectPtr< ULightMapTexture2D > SkyOcclusionTexture
Definition LightMap.h:328
virtual ENGINE_API FShadowMapInteraction GetShadowInteraction(ERHIFeatureLevel::Type InFeatureLevel) const
Definition LightMap.cpp:3280
const FVector2D & GetCoordinateScale() const
Definition LightMap.h:255
ENGINE_API bool IsVirtualTextureValid() const
Definition LightMap.cpp:2985
static ENGINE_API TRefCountPtr< FLightMap2D > AllocateInstancedLightMap(UObject *LightMapOuter, UInstancedStaticMeshComponent *Component, TArray< TUniquePtr< FQuantizedLightmapData > > SourceQuantizedData, TArray< TMap< ULightComponent *, TUniquePtr< FShadowMapData2D > > > &&InstancedShadowMapData, UMapBuildDataRegistry *Registry, FGuid MapBuildDataId, const FBoxSphereBounds &Bounds, ELightMapPaddingType InPaddingType, ELightMapFlags LightmapFlags)
Definition LightMap.cpp:2208
virtual FLightMap2D * GetLightMap2D()
Definition LightMap.h:267
static ENGINE_API TRefCountPtr< FLightMap2D > AllocateLightMap(UObject *LightMapOuter, FQuantizedLightmapData *&SourceQuantizedData, const TMap< ULightComponent *, FShadowMapData2D * > &SourceShadowMapData, const FBoxSphereBounds &Bounds, ELightMapPaddingType InPaddingType, ELightMapFlags InLightmapFlags)
Definition LightMap.cpp:2091
TObjectPtr< ULightMapTexture2D > AOMaterialMaskTexture
Definition LightMap.h:330
virtual ENGINE_API void AddReferencedObjects(FReferenceCollector &Collector)
Definition LightMap.cpp:3026
FVector4f AddVectors[NUM_STORED_LIGHTMAP_COEF]
Definition LightMap.h:341
ENGINE_API FLightMap2D(bool InAllowHighQualityLightMaps)
bool bShadowChannelValid[4]
Definition LightMap.h:353
static ENGINE_API bool bUpdateStatus
Definition LightMap.h:359
FVector2D CoordinateBias
Definition LightMap.h:347
static bool GetStatusUpdate()
Definition LightMap.h:320
TObjectPtr< ULightMapVirtualTexture2D > VirtualTextures[2]
Definition LightMap.h:335
ENGINE_API FLightMap2D()
Definition LightMap.cpp:2938
static void SetStatusUpdate(bool bInEnable)
Definition LightMap.h:315
TObjectPtr< ULightMapTexture2D > Textures[2]
Definition LightMap.h:326
ENGINE_API UTexture2D * GetSkyOcclusionTexture() const
Definition LightMap.cpp:2975
void GetReferencedTextures(TArray< UTexture2D * > &OutTextures) const
Definition LightMap.h:215
Definition LightMap.h:162
uint32 GetSizeY() const
Definition LightMap.h:181
FLightMapData2D(uint32 InSizeX, uint32 InSizeY)
Definition LightMap.h:171
uint32 GetSizeX() const
Definition LightMap.h:180
TArray< FGuid > LightGuids
Definition LightMap.h:166
const FLightSample & operator()(uint32 X, uint32 Y) const
Definition LightMap.h:178
FLightSample & operator()(uint32 X, uint32 Y)
Definition LightMap.h:179
Definition SceneManagement.h:390
static FLightMapInteraction None()
Definition SceneManagement.h:394
Definition LightMap.h:50
virtual FLightMap2D * GetLightMap2D()
Definition LightMap.h:85
bool bAllowHighQualityLightMaps
Definition LightMap.h:115
TArray< FGuid > LightGuids
Definition LightMap.h:60
void AddRef()
Definition LightMap.h:89
bool AllowsHighQualityLightmaps() const
Definition LightMap.h:107
virtual const FLightMap2D * GetLightMap2D() const
Definition LightMap.h:86
virtual FLightMapInteraction GetInteraction(ERHIFeatureLevel::Type InFeatureLevel) const =0
void Release()
Definition LightMap.h:94
virtual void AddReferencedObjects(FReferenceCollector &Collector)
Definition LightMap.h:79
virtual FShadowMapInteraction GetShadowInteraction(ERHIFeatureLevel::Type InFeatureLevel) const
Definition LightMap.h:82
virtual ~FLightMap()
Definition LightMap.h:66
bool ContainsLight(const FGuid &LightGuid) const
Definition LightMap.h:73
ENGINE_API FLightMap()
Definition LightMap.cpp:123
@ LMT_None
Definition LightMap.h:54
@ LMT_1D
Definition LightMap.h:55
@ LMT_2D
Definition LightMap.h:56
virtual ENGINE_API void Cleanup()
Definition LightMap.cpp:138
Definition SceneManagement.h:758
Definition LightMap.h:609
virtual ENGINE_API void InitRHI(FRHICommandListBase &RHICmdList)
Definition LightMap.cpp:3602
ENGINE_API void SetFeatureLevelAndInitialize(const FStaticFeatureLevel InFeatureLevel)
Definition LightMap.cpp:3491
FLightmapClusterResourceInput Input
Definition LightMap.h:631
FUniformBufferRHIRef UniformBuffer
Definition LightMap.h:633
IAllocatedVirtualTexture * AllocatedVT
Definition LightMap.h:632
ENGINE_API void ConditionalCreateAllocatedVT()
Definition LightMap.cpp:3530
virtual ENGINE_API ~FLightmapResourceCluster()
Definition LightMap.cpp:3450
ENGINE_API void ReleaseAllocatedVT()
Definition LightMap.cpp:3592
ENGINE_API void UpdateUniformBuffer()
Definition LightMap.cpp:3501
ENGINE_API const IAllocatedVirtualTexture * GetAllocatedVT() const
Definition LightMap.cpp:3524
ENGINE_API bool GetUseVirtualTexturing() const
Definition LightMap.cpp:3455
virtual ENGINE_API void ReleaseRHI()
Definition LightMap.cpp:3608
FLightmapResourceCluster()
Definition LightMap.h:611
ENGINE_API void TryInitializeUniformBuffer()
Definition LightMap.cpp:3465
Definition RHICommandList.h:455
Definition UObjectGlobals.h:2492
Definition RenderResource.h:37
Definition ShadowMap.h:100
Definition SceneManagement.h:613
static FShadowMapInteraction None()
Definition SceneManagement.h:617
Definition VirtualTexturing.h:374
Definition Array.h:670
UE_REWRITE SizeType Max() const
Definition Array.h:1161
UE_NODEBUG UE_FORCEINLINE_HINT bool Find(const ElementType &Item, SizeType &Index) const
Definition Array.h:1302
Definition BulkData.h:1036
Definition ChunkedArray.h:56
Definition UnrealString.h.inl:34
Definition RefCounting.h:454
Definition UniquePtr.h:107
Definition InstancedStaticMeshComponent.h:158
Definition LightmapVirtualTexture.h:22
Definition MapBuildDataRegistry.h:295
Definition Object.h:95
Definition Texture2D.h:26
Definition VirtualTexture.h:13
Type
Definition RHIFeatureLevel.h:20
@ false
Definition radaudio_common.h:23
Definition Color.h:486
Definition Guid.h:109
FColor Coefficients[2]
Definition LightMap.h:365
Definition LightMap.h:369
FColor Coefficients[1]
Definition LightMap.h:371
Definition LightMap.h:492
uint8 SkyOcclusion[4]
Definition LightMap.h:495
uint8 Coverage
Definition LightMap.h:493
uint8 AOMaterialMask
Definition LightMap.h:496
uint8 Coefficients[NUM_STORED_LIGHTMAP_COEF][4]
Definition LightMap.h:494
Definition LightMap.h:139
bool bIsMapped
Definition LightMap.h:148
float Coefficients[NUM_STORED_LIGHTMAP_COEF][3]
Definition LightMap.h:145
FLightSample()
Definition LightMap.h:151
Definition EngineTypes.h:2251
static UE_FORCEINLINE_HINT void * Memzero(void *Dest, SIZE_T Count)
Definition UnrealMemory.h:131
Definition LightMap.h:381
FColor Coefficients[NUM_HQ_LIGHTMAP_COEF]
Definition LightMap.h:383
Definition LightMap.h:500
float Add[NUM_STORED_LIGHTMAP_COEF][4]
Definition LightMap.h:514
bool bHasSkyShadowing
Definition LightMap.h:519
FQuantizedLightmapData()
Definition LightMap.h:521
float Scale[NUM_STORED_LIGHTMAP_COEF][4]
Definition LightMap.h:511
TArray< FLightMapCoefficients > Data
Definition LightMap.h:508
TArray< FGuid > LightGuids
Definition LightMap.h:517
uint32 SizeY
Definition LightMap.h:505
uint32 SizeX
Definition LightMap.h:502
ENGINE_API bool HasNonZeroData() const
Definition LightMap.cpp:3404
Definition LightMap.h:393
FColor Coefficients[NUM_LQ_LIGHTMAP_COEF]
Definition LightMap.h:395
Definition LightMap.h:429
FLightMapRef Lightmap
Definition LightMap.h:432
int32 NodeIndex
Definition LightMap.h:431
int32 LocalX
Definition LightMap.h:435
FSelectedLightmapSample(UPrimitiveComponent *InComponent, int32 InNodeIndex, FLightMapRef &InLightmap, FVector InPosition, int32 InLocalX, int32 InLocalY, int32 InMappingSizeX, int32 InMappingSizeY)
Definition LightMap.h:453
int32 LocalY
Definition LightMap.h:436
FSelectedLightmapSample()
Definition LightMap.h:441
int32 MappingSizeX
Definition LightMap.h:437
UPrimitiveComponent * Component
Definition LightMap.h:430
int32 MappingSizeY
Definition LightMap.h:438
FVector Position
Definition LightMap.h:433
Definition AndroidStaticFeatureLevel.inl:12
Definition IsPODType.h:12
@ Value
Definition IsPODType.h:13
Definition ObjectPtr.h:488
Definition LightMap.h:407
QuantizedLightSampleType SampleType
Definition LightMap.h:408
Definition BoxSphereBounds.h:25