UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
StaticLighting.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 StaticLighting.h: Static lighting definitions.
5=============================================================================*/
6
7#pragma once
8
9#include "CoreMinimal.h"
10#include "Misc/Guid.h"
12#include "Components.h"
13
17class ULevel;
18class ULightComponent;
19class UPrimitiveComponent;
20
23{
29
30 // Operators used for linear combinations of static lighting vertices.
31
33 {
35 Result.WorldPosition = A.WorldPosition + B.WorldPosition;
36 Result.WorldTangentX = A.WorldTangentX + B.WorldTangentX;
37 Result.WorldTangentY = A.WorldTangentY + B.WorldTangentY;
38 Result.WorldTangentZ = A.WorldTangentZ + B.WorldTangentZ;
39 for(int32 CoordinateIndex = 0;CoordinateIndex < MAX_STATIC_TEXCOORDS;CoordinateIndex++)
40 {
41 Result.TextureCoordinates[CoordinateIndex] = A.TextureCoordinates[CoordinateIndex] + B.TextureCoordinates[CoordinateIndex];
42 }
43 return Result;
44 }
45
47 {
49 Result.WorldPosition = A.WorldPosition - B.WorldPosition;
50 Result.WorldTangentX = A.WorldTangentX - B.WorldTangentX;
51 Result.WorldTangentY = A.WorldTangentY - B.WorldTangentY;
52 Result.WorldTangentZ = A.WorldTangentZ - B.WorldTangentZ;
53 for(int32 CoordinateIndex = 0;CoordinateIndex < MAX_STATIC_TEXCOORDS;CoordinateIndex++)
54 {
55 Result.TextureCoordinates[CoordinateIndex] = A.TextureCoordinates[CoordinateIndex] - B.TextureCoordinates[CoordinateIndex];
56 }
57 return Result;
58 }
59
61 {
63 Result.WorldPosition = A.WorldPosition * B;
64 Result.WorldTangentX = A.WorldTangentX * B;
65 Result.WorldTangentY = A.WorldTangentY * B;
66 Result.WorldTangentZ = A.WorldTangentZ * B;
67 for(int32 CoordinateIndex = 0;CoordinateIndex < MAX_STATIC_TEXCOORDS;CoordinateIndex++)
68 {
69 Result.TextureCoordinates[CoordinateIndex] = A.TextureCoordinates[CoordinateIndex] * B;
70 }
71 return Result;
72 }
73
75 {
76 const float InvB = 1.0f / B;
77
79 Result.WorldPosition = A.WorldPosition * InvB;
80 Result.WorldTangentX = A.WorldTangentX * InvB;
81 Result.WorldTangentY = A.WorldTangentY * InvB;
82 Result.WorldTangentZ = A.WorldTangentZ * InvB;
83 for(int32 CoordinateIndex = 0;CoordinateIndex < MAX_STATIC_TEXCOORDS;CoordinateIndex++)
84 {
85 Result.TextureCoordinates[CoordinateIndex] = A.TextureCoordinates[CoordinateIndex] * InvB;
86 }
87 return Result;
88 }
89};
90
111
114{
115public:
116
119
122
125
128
131
134
137
140
143
146
148 const UPrimitiveComponent* const Component;
149
152
155
158
161
164
168
176 bool bInCastShadow,
179 const UPrimitiveComponent* const InComponent,
180 const FBox& InBoundingBox,
181 const FGuid& InSourceMeshGuid,
183 );
184
186
187 ENGINE_API virtual void Serialize(FArchive& Ar);
188
191
200
210 {
212 // By default the geometry used for shading is the same as the geometry used for visibility testing.
213 GetTriangle(TriangleIndex, OutV0, OutV1, OutV2);
214 }
215
223 virtual void GetTriangleIndices(int32 TriangleIndex,int32& OutI0,int32& OutI1,int32& OutI2) const = 0;
224
232 virtual void GetShadingTriangleIndices(int32 TriangleIndex,int32& OutI0,int32& OutI1,int32& OutI2) const
233 {
235 // By default the geometry used for shading is the same as the geometry used for visibility testing.
236 GetTriangleIndices(TriangleIndex, OutI0, OutI1, OutI2);
237 }
238
246 virtual bool ShouldCastShadow(ULightComponent* Light,const FStaticLightingMapping* Receiver) const;
247
249 virtual bool IsTriangleCastingShadow(uint32 TriangleIndex) const
250 {
251 return true;
252 }
253
255 virtual bool IsControllingShadowPerElement() const
256 {
257 return false;
258 }
259
264 virtual bool IsUniformShadowCaster() const
265 {
266 return bCastShadow;
267 }
268
277
278#if WITH_EDITOR
283 virtual void ExportMeshInstance(class FLightmassExporter* Exporter) const {}
284#endif //#if WITH_EDITOR
285
290 virtual const FGuid& GetLightingGuid() const
291 {
292 return Guid;
293 }
294
298 virtual bool IsInstancedMesh() const = 0;
299};
300
303{
304public:
305
308
311
314
317
325
328
331 {
332 return NULL;
333 }
334
336 virtual bool IsTextureMapping() const
337 {
338 return false;
339 }
340
341#if WITH_EDITOR
342 virtual bool DebugThisMapping() const = 0;
343
348 virtual void ExportMapping(class FLightmassExporter* Exporter) {};
349#endif //WITH_EDITOR
350
355 virtual const FGuid& GetLightingGuid() const
356 {
357 return Mesh->Guid;
358 }
359
360 virtual FString GetDescription() const
361 {
362 return FString(TEXT("Mapping"));
363 }
364
365 virtual int32 GetTexelCount() const
366 {
367 return 0;
368 }
369
370 bool IsDeferred() const
371 {
372 return !!bIsDeferred;
373 }
374
376
377#if WITH_EDITOR
378
379 ENGINE_API virtual void Serialize(FArchive& Ar);
380
384 virtual UObject* GetMappedObject() const
385 {
386 return Owner;
387 }
388#endif //WITH_EDITOR
389};
390
399{
400 // If this is a shadow casting mesh, then it is allowed to cast a shadow on the receiver from this light.
401 return bCastShadow;
402}
403
406{
407public:
408
411
414
417
420
423
429 virtual void Apply(struct FQuantizedLightmapData* QuantizedData, const TMap<ULightComponent*,class FShadowMapData2D*>& ShadowMapData, const FStaticLightingBuildContext* LightingContext) = 0;
430
431 // FStaticLightingMapping interface.
433 {
434 return this;
435 }
436
438 virtual bool IsTextureMapping() const
439 {
440 return true;
441 }
442
444 virtual bool IsValidMapping() const {return true;}
445
446#if WITH_EDITOR
447 UNREALED_API virtual bool DebugThisMapping() const;
448 ENGINE_API virtual void Serialize(FArchive& Ar);
449#endif //WITH_EDITOR
450
451 virtual FString GetDescription() const
452 {
453 return FString(TEXT("TextureMapping"));
454 }
455
456 virtual int32 GetTexelCount() const
457 {
458 return (SizeX * SizeY);
459 }
460
463};
464
470{
471public:
472
475
476 virtual void Apply(struct FQuantizedLightmapData* QuantizedData, const TMap<ULightComponent*,class FShadowMapData2D*>& ShadowMapData, const FStaticLightingBuildContext* LightingContext) override
477 {
478 // Should never be processed
479 check(false);
480 }
481
482#if WITH_EDITOR
483 virtual bool DebugThisMapping() const
484 {
485 return false;
486 }
487
492 UNREALED_API virtual void ExportMapping(class FLightmassExporter* Exporter) override;
493#endif //WITH_EDITOR
494
496 virtual bool IsValidMapping() const {return true;}
497
498 virtual FString GetDescription() const
499 {
500 return FString(TEXT("VolumeMapping"));
501 }
502};
503
517
518
519
#define NULL
Definition oodle2base.h:134
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
@ MAX_STATIC_TEXCOORDS
Definition Components.h:22
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define TEXT(x)
Definition Platform.h:1272
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
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition StaticLighting.h:93
FStaticLightingVertex IntersectionVertex
Definition StaticLighting.h:100
FLightRayIntersection(bool bInIntersects, const FStaticLightingVertex &InIntersectionVertex)
Definition StaticLighting.h:103
uint32 bIntersects
Definition StaticLighting.h:97
static FLightRayIntersection None()
Definition StaticLighting.h:109
Definition RefCounting.h:252
Definition StaticLighting.h:470
virtual void Apply(struct FQuantizedLightmapData *QuantizedData, const TMap< ULightComponent *, class FShadowMapData2D * > &ShadowMapData, const FStaticLightingBuildContext *LightingContext) override
Definition StaticLighting.h:476
virtual FString GetDescription() const
Definition StaticLighting.h:498
virtual bool IsValidMapping() const
Definition StaticLighting.h:496
Definition StaticLighting.h:303
class FStaticLightingMesh * Mesh
Definition StaticLighting.h:307
virtual FStaticLightingTextureMapping * GetTextureMapping()
Definition StaticLighting.h:330
UObject * Owner
Definition StaticLighting.h:310
uint32 bIsDeferred
Definition StaticLighting.h:316
bool IsDeferred() const
Definition StaticLighting.h:370
virtual int32 GetTexelCount() const
Definition StaticLighting.h:365
virtual bool IsTextureMapping() const
Definition StaticLighting.h:336
virtual const FGuid & GetLightingGuid() const
Definition StaticLighting.h:355
FStaticLightingMapping(const FArchive &)
Definition StaticLighting.h:375
virtual ~FStaticLightingMapping()
Definition StaticLighting.h:327
FStaticLightingMapping(FStaticLightingMesh *InMesh, UObject *InOwner)
Definition StaticLighting.h:319
virtual FString GetDescription() const
Definition StaticLighting.h:360
uint32 bProcessMapping
Definition StaticLighting.h:313
Definition StaticLighting.h:114
uint32 HLODChildStartIndex
Definition StaticLighting.h:166
virtual bool IsTriangleCastingShadow(uint32 TriangleIndex) const
Definition StaticLighting.h:249
const int32 NumShadingTriangles
Definition StaticLighting.h:121
const int32 NumShadingVertices
Definition StaticLighting.h:127
const uint32 bTwoSidedMaterial
Definition StaticLighting.h:139
FGuid Guid
Definition StaticLighting.h:157
virtual bool IsUniformShadowCaster() const
Definition StaticLighting.h:264
virtual void GetTriangleIndices(int32 TriangleIndex, int32 &OutI0, int32 &OutI1, int32 &OutI2) const =0
const int32 NumVertices
Definition StaticLighting.h:124
virtual bool ShouldCastShadow(ULightComponent *Light, const FStaticLightingMapping *Receiver) const
Definition StaticLighting.h:398
ENGINE_API FStaticLightingMesh()
Definition LightMap.cpp:253
virtual const FGuid & GetLightingGuid() const
Definition StaticLighting.h:290
TArray< FGuid > RelevantLightsGuid
Definition StaticLighting.h:145
const int32 TextureCoordinateIndex
Definition StaticLighting.h:130
virtual ~FStaticLightingMesh()
Definition StaticLighting.h:190
FGuid SourceMeshGuid
Definition StaticLighting.h:160
FGuid ComponentGuid
Definition StaticLighting.h:151
FBox BoundingBox
Definition StaticLighting.h:154
uint32 HLODTreeIndex
Definition StaticLighting.h:165
uint32 HLODChildEndIndex
Definition StaticLighting.h:167
virtual void GetShadingTriangleIndices(int32 TriangleIndex, int32 &OutI0, int32 &OutI1, int32 &OutI2) const
Definition StaticLighting.h:232
virtual void GetTriangle(int32 TriangleIndex, FStaticLightingVertex &OutV0, FStaticLightingVertex &OutV1, FStaticLightingVertex &OutV2) const =0
virtual bool IsControllingShadowPerElement() const
Definition StaticLighting.h:255
virtual bool IsInstancedMesh() const =0
virtual FLightRayIntersection IntersectLightRay(const FVector &Start, const FVector &End, bool bFindNearestIntersection) const =0
TArray< int32 > VisibilityIds
Definition StaticLighting.h:133
const uint32 bCastShadow
Definition StaticLighting.h:136
const TArray< ULightComponent * > RelevantLights
Definition StaticLighting.h:142
TArray< TRefCountPtr< FStaticLightingMesh > > OtherMeshLODs
Definition StaticLighting.h:163
virtual void GetShadingTriangle(int32 TriangleIndex, FStaticLightingVertex &OutV0, FStaticLightingVertex &OutV1, FStaticLightingVertex &OutV2) const
Definition StaticLighting.h:209
const UPrimitiveComponent *const Component
Definition StaticLighting.h:148
const int32 NumTriangles
Definition StaticLighting.h:118
Definition StaticLighting.h:406
int32 SizeX
Definition StaticLighting.h:410
virtual void Apply(struct FQuantizedLightmapData *QuantizedData, const TMap< ULightComponent *, class FShadowMapData2D * > &ShadowMapData, const FStaticLightingBuildContext *LightingContext)=0
virtual int32 GetTexelCount() const
Definition StaticLighting.h:456
FStaticLightingTextureMapping(const FArchive &Ar)
Definition StaticLighting.h:462
virtual bool IsValidMapping() const
Definition StaticLighting.h:444
int32 SizeY
Definition StaticLighting.h:413
int32 LightmapTextureCoordinateIndex
Definition StaticLighting.h:416
virtual bool IsTextureMapping() const
Definition StaticLighting.h:438
virtual FStaticLightingTextureMapping * GetTextureMapping()
Definition StaticLighting.h:432
virtual FString GetDescription() const
Definition StaticLighting.h:451
bool bBilinearFilter
Definition StaticLighting.h:419
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition Level.h:423
Definition Object.h:95
@ false
Definition radaudio_common.h:23
Definition Guid.h:109
Definition LightMap.h:500
Definition StaticLighting.h:506
TArray< TRefCountPtr< FStaticLightingMesh > > Meshes
Definition StaticLighting.h:512
TArray< TRefCountPtr< FStaticLightingMapping > > Mappings
Definition StaticLighting.h:515
FStaticLightingPrimitiveInfo()
Definition StaticLighting.h:507
int32 VisibilityId
Definition StaticLighting.h:510
Definition StaticLighting.h:23
FVector WorldTangentY
Definition StaticLighting.h:26
FVector WorldTangentX
Definition StaticLighting.h:25
FVector WorldTangentZ
Definition StaticLighting.h:27
FVector WorldPosition
Definition StaticLighting.h:24
friend FStaticLightingVertex operator-(const FStaticLightingVertex &A, const FStaticLightingVertex &B)
Definition StaticLighting.h:46
friend FStaticLightingVertex operator/(const FStaticLightingVertex &A, float B)
Definition StaticLighting.h:74
friend FStaticLightingVertex operator+(const FStaticLightingVertex &A, const FStaticLightingVertex &B)
Definition StaticLighting.h:32
friend FStaticLightingVertex operator*(const FStaticLightingVertex &A, float B)
Definition StaticLighting.h:60
FVector2D TextureCoordinates[MAX_STATIC_TEXCOORDS]
Definition StaticLighting.h:28