Fix scene lightmaps removal clearing actors linkage to lightmaps

This commit is contained in:
Wojtek Figat
2025-07-01 08:27:29 +02:00
parent 4e4d380267
commit 12c8bb4f31
3 changed files with 26 additions and 0 deletions

View File

@@ -7,6 +7,7 @@
#include "Engine/Content/Content.h"
#include "Engine/Content/Deprecated.h"
#include "Engine/Content/Factories/JsonAssetFactory.h"
#include "Engine/Foliage/Foliage.h"
#include "Engine/Physics/Colliders/MeshCollider.h"
#include "Engine/Level/Actors/StaticModel.h"
#include "Engine/Level/ActorsCache.h"
@@ -15,6 +16,7 @@
#include "Engine/Navigation/NavMesh.h"
#include "Engine/Profiler/ProfilerCPU.h"
#include "Engine/Serialization/Serialization.h"
#include "Engine/Terrain/Terrain.h"
#if USE_EDITOR
#include "Engine/Engine/Globals.h"
#endif
@@ -98,6 +100,19 @@ void Scene::SetLightmapSettings(const LightmapSettings& value)
void Scene::ClearLightmaps()
{
LightmapsData.ClearLightmaps();
// Unlink any actors from lightmap
Function<bool(Actor*)> function = [this](Actor* actor)
{
if (auto* staticModel = Cast<StaticModel>(actor))
staticModel->RemoveLightmap();
else if (auto* terrain = Cast<Terrain>(actor))
terrain->RemoveLightmap();
else if (auto* foliage = Cast<Foliage>(actor))
foliage->RemoveLightmap();
return true;
};
TreeExecute(function);
}
void Scene::BuildCSG(float timeoutMs)