Lightmass misc lightmapping notes
StaticLightingDebug.cpp:::What goodies lie here?
LightaMapRendering (in Renderer Module): Handles render thread side of lightmaps (setting/creating uniform buffers)
FLightmap/FlightMap2D
- GameThread struct containing lightmap data
- Contains a reference (LightmapSetBelongsTo) to the lightmap set this lightmap refers to
- LightmapSetBelongsTo set when FLightMap struct is allocated
- Components handle allocating the FLightmap bookkepping data
- Stores references to actual textures for the lightmaps
FLightMapInteraction
- Defines interaction between mesh & lightmap
- Just stores references to the textures in FlightMap + coefficients
- Value struct b/c it gets blitted to the render thread
Registry->AllocateMeshBuildData
- This actually creates the MeshMapBuildData struct
- This gets written out to a sideband package next to the level (ex: MyHellzoneLevel_BuildData)
FLightMap2D::AllocateLightMap/FLightMap2D::AllocateInstancedLightMap
- Seems to be called during light builds only
- Actually allocates the lightmap texture
Components that require static lighting interaction (ex: landscape or staticmesh) have follow this file convention
- [ComponentName]Lighting.cpp handles lightmapping functionality
- [ComponentName]Rendering.cpp handles rendering
High-level process of baking
Start with StaticLightingManager::UpdateBuildLighting
AllocateLightMap populates PendingLightMaps (static array<FlightMapAllocationGroup> that gets procesed during Encode)
FlightMapAllocationGroup: Container of set of FLightMapAllocation
FlightMapAllocationGroup: Allocation of a region of lightmap texture to a specific lightmap
EncodeTextures() takes all the data in the PendingLightMaps allocation groups and turns them into FLightMapPendingTexture
FLightMapPendingTexture::StartEncoding()
Multiple Lightmaps
r.HighQualityLightMaps
TODO:
grep GCurrentLightmapSetIndex
grep LightmapSets
grep GCurrentILCIndex
add suffix to engine modification tag @third party code - Bebylon - MultiLightmap
coalesce cvars & rename to be better
change forward pass to use precomputed lightmap blends
store reference to MeshMapBuildDataID for LightmapSetsBelongTo
rename references of TArray<FLightMapRef> to typedef TArray<FLightMapRef> Lightmapset
FVector PrecomputedLightVolumeOffset = InWorldOffset - FVector(LightBuildLevelOffset);
PrecomputedLightVolume->ApplyWorldOffset(PrecomputedLightVolumeOffset);
void ULevel::OnApplyNewLightingData(bool bLightingSuccessful)
{
// Store level offset that was used during static light data build
// This will be used to find correct world position of precomputed lighting samples during origin rebasing
LightBuildLevelOffset = FIntVector::ZeroValue;
if (bLightingSuccessful && OwningWorld && OwningWorld->WorldComposition)
{
LightBuildLevelOffset = OwningWorld->WorldComposition->GetLevelOffset(this);
}
}
ULightComponent::IsPrecomputedLightingValid()