diff --git a/Source/Engine/Foliage/Foliage.cpp b/Source/Engine/Foliage/Foliage.cpp
index a1cd046ae..c0e0b0b0e 100644
--- a/Source/Engine/Foliage/Foliage.cpp
+++ b/Source/Engine/Foliage/Foliage.cpp
@@ -993,6 +993,12 @@ void Foliage::RemoveAllInstances()
RebuildClusters();
}
+void Foliage::RemoveLightmap()
+{
+ for (auto& e : Instances)
+ e.RemoveLightmap();
+}
+
static float GlobalDensityScale = 1.0f;
float Foliage::GetGlobalDensityScale()
diff --git a/Source/Engine/Foliage/Foliage.h b/Source/Engine/Foliage/Foliage.h
index f9055f377..1855e9914 100644
--- a/Source/Engine/Foliage/Foliage.h
+++ b/Source/Engine/Foliage/Foliage.h
@@ -139,6 +139,11 @@ public:
///
API_FUNCTION() void RemoveAllInstances();
+ ///
+ /// Removes the lightmap data from the foliage instances.
+ ///
+ API_FUNCTION() void RemoveLightmap();
+
public:
///
/// Gets the global density scale for all foliage instances. The default value is 1. Use values from range 0-1. Lower values decrease amount of foliage instances in-game. Use it to tweak game performance for slower devices.
diff --git a/Source/Engine/Level/Scene/Scene.cpp b/Source/Engine/Level/Scene/Scene.cpp
index 215153122..f60aa8d2f 100644
--- a/Source/Engine/Level/Scene/Scene.cpp
+++ b/Source/Engine/Level/Scene/Scene.cpp
@@ -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 function = [this](Actor* actor)
+ {
+ if (auto* staticModel = Cast(actor))
+ staticModel->RemoveLightmap();
+ else if (auto* terrain = Cast(actor))
+ terrain->RemoveLightmap();
+ else if (auto* foliage = Cast(actor))
+ foliage->RemoveLightmap();
+ return true;
+ };
+ TreeExecute(function);
}
void Scene::BuildCSG(float timeoutMs)