Browse Source

Some refactoring

Panagiotis Christopoulos Charitos 2 years ago
parent
commit
90e828154a

+ 0 - 5
AnKi/Core/App.cpp

@@ -64,11 +64,6 @@ BoolCVar g_benchmarkModeCVar(CVarSubsystem::kCore, "BenchmarkMode", false, "Run
 NumericCVar<U32> g_benchmarkModeFrameCountCVar(CVarSubsystem::kCore, "BenchmarkModeFrameCount", 60 * 60 * 2, 1, kMaxU32,
 											   "How many frames the benchmark will run before it quits");
 
-NumericCVar<F32> g_lod0MaxDistanceCVar(CVarSubsystem::kCore, "Lod0MaxDistance", 20.0f, 1.0f, kMaxF32,
-									   "Distance that will be used to calculate the LOD 0");
-NumericCVar<F32> g_lod1MaxDistanceCVar(CVarSubsystem::kCore, "Lod1MaxDistance", 40.0f, 2.0f, kMaxF32,
-									   "Distance that will be used to calculate the LOD 1");
-
 #if ANKI_PLATFORM_MOBILE
 static StatCounter g_maliGpuActiveStatVar(StatCategory::kGpuMisc, "Mali active cycles", StatFlag::kMainThreadUpdates);
 static StatCounter g_maliGpuReadBandwidthStatVar(StatCategory::kGpuMisc, "Mali read bandwidth", StatFlag::kMainThreadUpdates);

+ 0 - 2
AnKi/Core/App.h

@@ -20,8 +20,6 @@ extern NumericCVar<U32> g_windowWidthCVar;
 extern NumericCVar<U32> g_windowHeightCVar;
 extern NumericCVar<U32> g_windowFullscreenCVar;
 extern NumericCVar<U32> g_targetFpsCVar;
-extern NumericCVar<F32> g_lod0MaxDistanceCVar;
-extern NumericCVar<F32> g_lod1MaxDistanceCVar;
 extern NumericCVar<U32> g_displayStatsCVar;
 extern StatCounter g_cpuTotalTimeStatVar;
 extern StatCounter g_rendererGpuTimeStatVar;

+ 4 - 9
AnKi/Renderer/ClusterBinning2.cpp

@@ -319,22 +319,17 @@ void ClusterBinning2::writeClusterUniformsInternal()
 	const LightComponent* dirLight = SceneGraph::getSingleton().getDirectionalLight();
 	if(dirLight)
 	{
-		const CameraComponent& cam = SceneGraph::getSingleton().getActiveCameraNode().getFirstComponentOfType<CameraComponent>();
-
 		DirectionalLight& out = unis.m_directionalLight;
 
 		out.m_diffuseColor = dirLight->getDiffuseColor().xyz();
-		out.m_shadowCascadeCount = cam.getShadowCascadeCount();
+		out.m_shadowCascadeCount = g_shadowCascadeCountCVar.get();
 		out.m_direction = dirLight->getDirection();
 		out.m_active = 1;
-		out.m_shadowCascadeDistances = Vec4(0.0f);
-		for(U32 i = 0; i < cam.getShadowCascadeCount(); ++i)
-		{
-			out.m_shadowCascadeDistances[i] = cam.getShadowCascadeDistance(i);
-		}
+		out.m_shadowCascadeDistances = Vec4(g_shadowCascade0DistanceCVar.get(), g_shadowCascade1DistanceCVar.get(),
+											g_shadowCascade2DistanceCVar.get(), g_shadowCascade3DistanceCVar.get());
 		out.m_shadowLayer = (dirLight->getShadowEnabled()) ? 1 : kMaxU32; // TODO RT
 
-		for(U cascade = 0; cascade < cam.getShadowCascadeCount(); ++cascade)
+		for(U cascade = 0; cascade < g_shadowCascadeCountCVar.get(); ++cascade)
 		{
 			ANKI_ASSERT(m_runCtx.m_rctx->m_dirLightTextureMatrices[cascade] != Mat4::getZero());
 			out.m_textureMatrices[cascade] = m_runCtx.m_rctx->m_dirLightTextureMatrices[cascade];

+ 1 - 5
AnKi/Renderer/Common.h

@@ -75,8 +75,6 @@ inline constexpr Array<Format, kGBufferColorRenderTargetCount> kGBufferColorRend
 class RenderingContext
 {
 public:
-	StackMemoryPool* m_tempPool = nullptr;
-
 	RenderGraphDescription m_renderGraphDescr;
 
 	CommonMatrices m_matrices;
@@ -91,10 +89,8 @@ public:
 	Array<Mat4, kMaxShadowCascades> m_dirLightTextureMatrices;
 
 	RenderingContext(StackMemoryPool* pool)
-		: m_tempPool(pool)
-		, m_renderGraphDescr(pool)
+		: m_renderGraphDescr(pool)
 	{
-		zeroMemory(m_dirLightTextureMatrices);
 	}
 
 	RenderingContext(const RenderingContext&) = delete;

+ 6 - 5
AnKi/Renderer/PrimaryNonRenderableVisibility.cpp

@@ -102,7 +102,7 @@ void PrimaryNonRenderableVisibility::populateRenderGraph(RenderingContext& ctx)
 			if(feedbackType != GpuSceneNonRenderableObjectTypeWithFeedback::kCount)
 			{
 				// Read feedback from the GPU
-				DynamicArray<U32, MemoryPoolPtrWrapper<StackMemoryPool>> readbackData(ctx.m_tempPool);
+				DynamicArray<U32, MemoryPoolPtrWrapper<StackMemoryPool>> readbackData(&getRenderer().getFrameMemoryPool());
 				getRenderer().getReadbackManager().readMostRecentData(m_readbacks[feedbackType], readbackData);
 
 				if(readbackData.getSize())
@@ -115,19 +115,20 @@ void PrimaryNonRenderableVisibility::populateRenderGraph(RenderingContext& ctx)
 						WeakArray<UVec2> pairs(reinterpret_cast<UVec2*>(&readbackData[1]), pairCount);
 						if(feedbackType == GpuSceneNonRenderableObjectTypeWithFeedback::kLight)
 						{
-							m_runCtx.m_interestingComponents.m_shadowLights =
-								gatherComponents<LightComponent>(pairs, SceneGraph::getSingleton().getComponentArrays().getLights(), *ctx.m_tempPool);
+							m_runCtx.m_interestingComponents.m_shadowLights = gatherComponents<LightComponent>(
+								pairs, SceneGraph::getSingleton().getComponentArrays().getLights(), getRenderer().getFrameMemoryPool());
 						}
 						else if(feedbackType == GpuSceneNonRenderableObjectTypeWithFeedback::kReflectionProbe)
 						{
 							m_runCtx.m_interestingComponents.m_reflectionProbes = gatherComponents<ReflectionProbeComponent>(
-								pairs, SceneGraph::getSingleton().getComponentArrays().getReflectionProbes(), *ctx.m_tempPool);
+								pairs, SceneGraph::getSingleton().getComponentArrays().getReflectionProbes(), getRenderer().getFrameMemoryPool());
 						}
 						else
 						{
 							ANKI_ASSERT(feedbackType == GpuSceneNonRenderableObjectTypeWithFeedback::kGlobalIlluminationProbe);
 							m_runCtx.m_interestingComponents.m_globalIlluminationProbes = gatherComponents<GlobalIlluminationProbeComponent>(
-								pairs, SceneGraph::getSingleton().getComponentArrays().getGlobalIlluminationProbes(), *ctx.m_tempPool);
+								pairs, SceneGraph::getSingleton().getComponentArrays().getGlobalIlluminationProbes(),
+								getRenderer().getFrameMemoryPool());
 						}
 					}
 				}

+ 14 - 0
AnKi/Renderer/Renderer.cpp

@@ -62,6 +62,20 @@ BoolCVar g_vrsLimitTo2x2CVar(CVarSubsystem::kRenderer, "VrsLimitTo2x2", false, "
 BoolCVar g_vrsCVar(CVarSubsystem::kRenderer, "Vrs", true, "Enable VRS in multiple passes");
 BoolCVar g_rayTracedShadowsCVar(CVarSubsystem::kRenderer, "RayTracedShadows", true,
 								"Enable or not ray traced shadows. Ignored if RT is not supported");
+NumericCVar<U8> g_shadowCascadeCountCVar(CVarSubsystem::kRenderer, "ShadowCascadeCount", (ANKI_PLATFORM_MOBILE) ? 2 : kMaxShadowCascades, 1,
+										 kMaxShadowCascades, "Max number of shadow cascades for directional lights");
+NumericCVar<F32> g_shadowCascade0DistanceCVar(CVarSubsystem::kRenderer, "ShadowCascade0Distance", 18.0, 1.0, kMaxF32,
+											  "The distance of the 1st cascade");
+NumericCVar<F32> g_shadowCascade1DistanceCVar(CVarSubsystem::kRenderer, "ShadowCascade1Distance", (ANKI_PLATFORM_MOBILE) ? 100.0f : 40.0, 1.0,
+											  kMaxF32, "The distance of the 2nd cascade");
+NumericCVar<F32> g_shadowCascade2DistanceCVar(CVarSubsystem::kRenderer, "ShadowCascade2Distance", 80.0, 1.0, kMaxF32,
+											  "The distance of the 3rd cascade");
+NumericCVar<F32> g_shadowCascade3DistanceCVar(CVarSubsystem::kRenderer, "ShadowCascade3Distance", 200.0, 1.0, kMaxF32,
+											  "The distance of the 4th cascade");
+NumericCVar<F32> g_lod0MaxDistanceCVar(CVarSubsystem::kRenderer, "Lod0MaxDistance", 20.0f, 1.0f, kMaxF32,
+									   "Distance that will be used to calculate the LOD 0");
+NumericCVar<F32> g_lod1MaxDistanceCVar(CVarSubsystem::kRenderer, "Lod1MaxDistance", 40.0f, 2.0f, kMaxF32,
+									   "Distance that will be used to calculate the LOD 1");
 
 /// Generate a Halton jitter in [-0.5, 0.5]
 static Vec2 generateJitter(U32 frame)

+ 7 - 0
AnKi/Renderer/Renderer.h

@@ -23,6 +23,13 @@ extern BoolCVar g_vrsLimitTo2x2CVar;
 extern BoolCVar g_preferComputeCVar;
 extern NumericCVar<F32> g_renderScalingCVar;
 extern BoolCVar g_rayTracedShadowsCVar;
+extern NumericCVar<U8> g_shadowCascadeCountCVar;
+extern NumericCVar<F32> g_shadowCascade0DistanceCVar;
+extern NumericCVar<F32> g_shadowCascade1DistanceCVar;
+extern NumericCVar<F32> g_shadowCascade2DistanceCVar;
+extern NumericCVar<F32> g_shadowCascade3DistanceCVar;
+extern NumericCVar<F32> g_lod0MaxDistanceCVar;
+extern NumericCVar<F32> g_lod1MaxDistanceCVar;
 
 /// @addtogroup renderer
 /// @{

+ 13 - 13
AnKi/Renderer/ShadowMapping.cpp

@@ -204,12 +204,12 @@ void ShadowMapping::populateRenderGraph(RenderingContext& ctx)
 	}
 }
 
-void ShadowMapping::chooseDetail(const Vec3& cameraOrigin, const LightComponent& lightc, U32& tileAllocatorHierarchy) const
+void ShadowMapping::chooseDetail(const Vec3& cameraOrigin, const LightComponent& lightc, Vec2 lodDistances, U32& tileAllocatorHierarchy) const
 {
 	if(lightc.getLightComponentType() == LightComponentType::kPoint)
 	{
 		const F32 distFromTheCamera = (cameraOrigin - lightc.getWorldPosition()).getLength() - lightc.getRadius();
-		if(distFromTheCamera < g_lod0MaxDistanceCVar.get())
+		if(distFromTheCamera < lodDistances[0])
 		{
 			tileAllocatorHierarchy = kPointLightMaxTileAllocHierarchy;
 		}
@@ -233,11 +233,11 @@ void ShadowMapping::chooseDetail(const Vec3& cameraOrigin, const LightComponent&
 		const F32 V1len = V.dot(coneDir);
 		const F32 distFromTheCamera = cos(coneAngle) * sqrt(VlenSq - V1len * V1len) - V1len * sin(coneAngle);
 
-		if(distFromTheCamera < g_lod0MaxDistanceCVar.get())
+		if(distFromTheCamera < lodDistances[0])
 		{
 			tileAllocatorHierarchy = kSpotLightMaxTileAllocHierarchy;
 		}
-		else if(distFromTheCamera < g_lod1MaxDistanceCVar.get())
+		else if(distFromTheCamera < lodDistances[1])
 		{
 			tileAllocatorHierarchy = max(kSpotLightMaxTileAllocHierarchy, 1u) - 1;
 		}
@@ -318,15 +318,15 @@ void ShadowMapping::processLights(RenderingContext& ctx)
 
 	// Vars
 	const Vec3 cameraOrigin = ctx.m_matrices.m_cameraTransform.getTranslationPart().xyz();
-	DynamicArray<ViewportWorkItem, MemoryPoolPtrWrapper<StackMemoryPool>> workItems(ctx.m_tempPool);
+	DynamicArray<ViewportWorkItem, MemoryPoolPtrWrapper<StackMemoryPool>> workItems(&getRenderer().getFrameMemoryPool());
 	RenderGraphDescription& rgraph = ctx.m_renderGraphDescr;
 	const CameraComponent& mainCam = SceneGraph::getSingleton().getActiveCameraNode().getFirstComponentOfType<CameraComponent>();
 
 	// Process the directional light first.
 	const LightComponent* dirLight = SceneGraph::getSingleton().getDirectionalLight();
-	if(dirLight && dirLight->getShadowEnabled() && mainCam.getShadowCascadeCount())
+	if(dirLight && dirLight->getShadowEnabled() && g_shadowCascadeCountCVar.get())
 	{
-		const U32 cascadeCount = mainCam.getShadowCascadeCount();
+		const U32 cascadeCount = g_shadowCascadeCountCVar.get();
 
 		Array<U32, kMaxShadowCascades> cascadeIndices;
 		Array<U32, kMaxShadowCascades> hierarchies;
@@ -345,10 +345,10 @@ void ShadowMapping::processLights(RenderingContext& ctx)
 
 		// Compute the view projection matrices
 		Array<F32, kMaxShadowCascades> cascadeDistances;
-		for(U32 i = 0; i < cascadeCount; ++i)
-		{
-			cascadeDistances[i] = mainCam.getShadowCascadeDistance(i);
-		}
+		cascadeDistances[0] = g_shadowCascade0DistanceCVar.get();
+		cascadeDistances[1] = g_shadowCascade1DistanceCVar.get();
+		cascadeDistances[2] = g_shadowCascade2DistanceCVar.get();
+		cascadeDistances[3] = g_shadowCascade3DistanceCVar.get();
 
 		Array<Mat4, kMaxShadowCascades> cascadeViewProjMats;
 		Array<Mat3x4, kMaxShadowCascades> cascadeViewMats;
@@ -407,7 +407,7 @@ void ShadowMapping::processLights(RenderingContext& ctx)
 
 		// Prepare data to allocate tiles and allocate
 		U32 hierarchy;
-		chooseDetail(cameraOrigin, *lightc, hierarchy);
+		chooseDetail(cameraOrigin, *lightc, {g_lod0MaxDistanceCVar.get(), g_lod1MaxDistanceCVar.get()}, hierarchy);
 		Array<U32, 6> hierarchies;
 		hierarchies.fill(hierarchy);
 
@@ -494,7 +494,7 @@ void ShadowMapping::processLights(RenderingContext& ctx)
 
 		// Allocate tile
 		U32 hierarchy;
-		chooseDetail(cameraOrigin, *lightc, hierarchy);
+		chooseDetail(cameraOrigin, *lightc, {g_lod0MaxDistanceCVar.get(), g_lod1MaxDistanceCVar.get()}, hierarchy);
 		UVec4 atlasViewport;
 		const TileAllocatorResult2 result = allocateAtlasTiles(lightc->getUuid(), lightc->getArrayIndex(), 1, &hierarchy, &atlasViewport);
 

+ 1 - 1
AnKi/Renderer/ShadowMapping.h

@@ -71,7 +71,7 @@ private:
 
 	Mat4 createSpotLightTextureMatrix(const UVec4& viewport) const;
 
-	void chooseDetail(const Vec3& cameraOrigin, const LightComponent& lightc, U32& tileAllocatorHierarchy) const;
+	void chooseDetail(const Vec3& cameraOrigin, const LightComponent& lightc, Vec2 lodDistances, U32& tileAllocatorHierarchy) const;
 
 	void runShadowMapping(RenderPassWorkContext& rgraphCtx);
 };

+ 0 - 27
AnKi/Scene/Components/CameraComponent.cpp

@@ -11,39 +11,12 @@
 
 namespace anki {
 
-static NumericCVar<U8> g_shadowCascadeCountCVar(CVarSubsystem::kScene, "ShadowCascadeCount", (ANKI_PLATFORM_MOBILE) ? 2 : kMaxShadowCascades, 1,
-												kMaxShadowCascades, "Max number of shadow cascades for directional lights");
-static NumericCVar<F32> g_shadowCascade0DistanceCVar(CVarSubsystem::kScene, "ShadowCascade0Distance", 18.0, 1.0, kMaxF32,
-													 "The distance of the 1st cascade");
-static NumericCVar<F32> g_shadowCascade1DistanceCVar(CVarSubsystem::kScene, "ShadowCascade1Distance", (ANKI_PLATFORM_MOBILE) ? 100.0f : 40.0, 1.0,
-													 kMaxF32, "The distance of the 2nd cascade");
-static NumericCVar<F32> g_shadowCascade2DistanceCVar(CVarSubsystem::kScene, "ShadowCascade2Distance", 80.0, 1.0, kMaxF32,
-													 "The distance of the 3rd cascade");
-static NumericCVar<F32> g_shadowCascade3DistanceCVar(CVarSubsystem::kScene, "ShadowCascade3Distance", 200.0, 1.0, kMaxF32,
-													 "The distance of the 4th cascade");
-static NumericCVar<F32> g_earyZDistanceCVar(CVarSubsystem::kScene, "EarlyZDistance", (ANKI_PLATFORM_MOBILE) ? 0.0f : 10.0f, 0.0f, kMaxF32,
-											"Objects with distance lower than that will be used in early Z");
-
 CameraComponent::CameraComponent(SceneNode* node)
 	: SceneComponent(node, kClassType)
 {
 	// Init main frustum
 	m_frustum.init(FrustumType::kPerspective);
-
-	m_frustum.setLodDistance(0, g_lod0MaxDistanceCVar.get());
-	m_frustum.setLodDistance(1, g_lod1MaxDistanceCVar.get());
-	m_frustum.setShadowCascadeCount(g_shadowCascadeCountCVar.get());
-
-	static_assert(kMaxShadowCascades == 4);
-	m_frustum.setShadowCascadeDistance(0, g_shadowCascade0DistanceCVar.get());
-	m_frustum.setShadowCascadeDistance(1, g_shadowCascade1DistanceCVar.get());
-	m_frustum.setShadowCascadeDistance(2, g_shadowCascade2DistanceCVar.get());
-	m_frustum.setShadowCascadeDistance(3, g_shadowCascade3DistanceCVar.get());
-
 	m_frustum.setWorldTransform(node->getWorldTransform());
-
-	m_frustum.setEarlyZDistance(g_earyZDistanceCVar.get());
-
 	m_frustum.update();
 }
 

+ 0 - 25
AnKi/Scene/Components/CameraComponent.h

@@ -81,31 +81,6 @@ public:
 		m_frustum.setPerspective(near, far, fovx, fovy);
 	}
 
-	void setShadowCascadeDistance(U32 cascade, F32 distance)
-	{
-		if(ANKI_SCENE_ASSERT(cascade < m_frustum.getShadowCascadeCount()))
-		{
-			m_frustum.setShadowCascadeDistance(cascade, distance);
-		}
-	}
-
-	U32 getShadowCascadeCount() const
-	{
-		return m_frustum.getShadowCascadeCount();
-	}
-
-	F32 getShadowCascadeDistance(U32 cascade) const
-	{
-		if(ANKI_SCENE_ASSERT(cascade < m_frustum.getShadowCascadeCount()))
-		{
-			return m_frustum.getShadowCascadeDistance(cascade);
-		}
-		else
-		{
-			return 0.0f;
-		}
-	}
-
 	ANKI_INTERNAL const Frustum& getFrustum() const
 	{
 		return m_frustum;

+ 0 - 72
AnKi/Scene/Frustum.cpp

@@ -19,12 +19,6 @@ Frustum::Frustum()
 {
 	// Set some default values
 	init(FrustumType::kPerspective);
-	for(U i = 0; i < m_maxLodDistances.getSize(); ++i)
-	{
-		const F32 dist = (m_common.m_far - m_common.m_near) / F32(kMaxLodCount + 1);
-		m_maxLodDistances[i] = m_common.m_near + dist * F32(i + 1);
-	}
-
 	update();
 }
 
@@ -56,17 +50,6 @@ Bool Frustum::update()
 {
 	Bool updated = false;
 
-	for(U32 i = kPrevMatrixHistory - 1; i != 0; --i)
-	{
-		m_prevViewProjMats[i] = m_prevViewProjMats[i - 1];
-		m_prevViewMats[i] = m_prevViewMats[i - 1];
-		m_prevProjMats[i] = m_prevProjMats[i - 1];
-	}
-
-	m_prevViewProjMats[0] = m_viewProjMat;
-	m_prevViewMats[0] = m_viewMat;
-	m_prevProjMats[0] = m_projMat;
-
 	// Update the shape
 	if(m_shapeDirty)
 	{
@@ -128,44 +111,10 @@ Bool Frustum::update()
 		m_viewMat = Mat3x4(m_worldTransform.getInverse());
 	}
 
-	// Fixup the misc data
-	if(m_miscDirty)
-	{
-		updated = true;
-		const F32 frustumFraction = (m_common.m_far - m_common.m_near) / 100.0f;
-
-		for(U32 i = 0; i < m_shadowCascadeCount; ++i)
-		{
-			if(m_shadowCascadeDistances[i] <= m_common.m_near || m_shadowCascadeDistances[i] > m_common.m_far)
-			{
-				m_shadowCascadeDistances[i] = clamp(m_shadowCascadeDistances[i], m_common.m_near + kEpsilonf, m_common.m_far);
-			}
-
-			if(i != 0 && m_shadowCascadeDistances[i - 1] > m_shadowCascadeDistances[i])
-			{
-				m_shadowCascadeDistances[i] = m_shadowCascadeDistances[i - 1] + frustumFraction;
-			}
-		}
-
-		for(U32 i = 0; i < m_maxLodDistances.getSize(); ++i)
-		{
-			if(m_maxLodDistances[i] <= m_common.m_near || m_maxLodDistances[i] > m_common.m_far)
-			{
-				m_maxLodDistances[i] = clamp(m_maxLodDistances[i], m_common.m_near + kEpsilonf, m_common.m_far);
-			}
-
-			if(i != 0 && m_maxLodDistances[i - 1] > m_maxLodDistances[i])
-			{
-				m_maxLodDistances[i] = m_maxLodDistances[i - 1] + frustumFraction;
-			}
-		}
-	}
-
 	// Updates that are affected by transform & shape updates
 	if(updated)
 	{
 		m_shapeDirty = false;
-		m_miscDirty = false;
 		m_worldTransformDirty = false;
 
 		m_viewProjMat = m_projMat * Mat4(m_viewMat, Vec4(0.0f, 0.0f, 0.0f, 1.0f));
@@ -191,28 +140,7 @@ Bool Frustum::update()
 		}
 	}
 
-	m_updatedThisFrame = updated;
-
 	return updated;
 }
 
-void Frustum::setCoverageBuffer(F32* depths, U32 width, U32 height)
-{
-	ANKI_ASSERT(depths && width > 0 && height > 0);
-
-	const U32 elemCount = width * height;
-	if(m_depthMap.getSize() != elemCount) [[unlikely]]
-	{
-		m_depthMap.resize(elemCount);
-	}
-
-	if(depths && elemCount > 0) [[likely]]
-	{
-		memcpy(m_depthMap.getBegin(), depths, elemCount * sizeof(F32));
-	}
-
-	m_depthMapWidth = width;
-	m_depthMapHeight = height;
-}
-
 } // end namespace anki

+ 11 - 123
AnKi/Scene/Frustum.h

@@ -155,38 +155,22 @@ public:
 
 	const Mat4& getProjectionMatrix() const
 	{
+		ANKI_ASSERT(!isDirty());
 		return m_projMat;
 	}
 
 	const Mat3x4& getViewMatrix() const
 	{
+		ANKI_ASSERT(!isDirty());
 		return m_viewMat;
 	}
 
 	const Mat4& getViewProjectionMatrix() const
 	{
+		ANKI_ASSERT(!isDirty());
 		return m_viewProjMat;
 	}
 
-	/// @param nMinusOneFrame The number of the previous frame. If 0 means the previous frame, 1 means the
-	///                       previous-previous frame.
-	const Mat4& getPreviousViewProjectionMatrix(U32 nMinusOneFrame = 0) const
-	{
-		return m_prevViewProjMats[nMinusOneFrame];
-	}
-
-	/// @see getPreviousViewProjectionMatrix.
-	const Mat3x4& getPreviousViewMatrix(U32 nMinusOneFrame = 0) const
-	{
-		return m_prevViewMats[nMinusOneFrame];
-	}
-
-	/// @see getPreviousViewProjectionMatrix.
-	const Mat4& getPreviousProjectionMatrix(U32 nMinusOneFrame = 0) const
-	{
-		return m_prevProjMats[nMinusOneFrame];
-	}
-
 	/// Check if a shape is inside the frustum.
 	template<typename T>
 	Bool insideFrustum(const T& t) const
@@ -202,92 +186,26 @@ public:
 		return true;
 	}
 
-	Bool hasCoverageBuffer() const
-	{
-		return m_depthMap.getSize() > 0;
-	}
-
-	void getCoverageBufferInfo(ConstWeakArray<F32>& depthBuff, U32& width, U32& height) const
-	{
-		if(m_depthMap.getSize() > 0)
-		{
-			depthBuff = ConstWeakArray<F32>(&m_depthMap[0], m_depthMap.getSize());
-			width = m_depthMapWidth;
-			height = m_depthMapHeight;
-			ANKI_ASSERT(width > 0 && height > 0);
-		}
-		else
-		{
-			depthBuff = ConstWeakArray<F32>();
-			width = height = 0;
-		}
-	}
-
-	void setCoverageBuffer(F32* depths, U32 width, U32 height);
-
-	void setShadowCascadeDistance(U32 cascade, F32 distance)
-	{
-		m_shadowCascadeDistances[cascade] = distance;
-		m_miscDirty = true;
-	}
-
-	F32 getShadowCascadeDistance(U32 cascade) const
-	{
-		return m_shadowCascadeDistances[cascade];
-	}
-
-	[[nodiscard]] U32 getShadowCascadeCount() const
-	{
-		return m_shadowCascadeCount;
-	}
-
-	void setShadowCascadeCount(U32 count)
-	{
-		ANKI_ASSERT(count <= kMaxShadowCascades);
-		m_shadowCascadeCount = U8(count);
-		m_miscDirty = true;
-	}
-
 	const ConvexHullShape& getPerspectiveBoundingShapeWorldSpace() const
 	{
 		ANKI_ASSERT(m_frustumType == FrustumType::kPerspective);
+		ANKI_ASSERT(!isDirty());
 		return m_perspective.m_hull;
 	}
 
 	const Obb& getOrthographicBoundingShapeWorldSpace() const
 	{
 		ANKI_ASSERT(m_frustumType == FrustumType::kOrthographic);
+		ANKI_ASSERT(!isDirty());
 		return m_ortho.m_obbW;
 	}
 
 	const Array<Plane, U32(FrustumPlaneType::kCount)>& getViewPlanes() const
 	{
+		ANKI_ASSERT(!isDirty());
 		return m_viewPlanesW;
 	}
 
-	/// Set the lod distance. It doesn't interact with the far plane.
-	void setLodDistance(U32 lod, F32 maxDistance)
-	{
-		m_maxLodDistances[lod] = maxDistance;
-		m_miscDirty = true;
-	}
-
-	void setLodDistances(const Array<F32, kMaxLodCount>& distances)
-	{
-		for(U i = 0; i < m_maxLodDistances.getSize(); ++i)
-		{
-			ANKI_ASSERT(distances[i] > m_common.m_near && distances[i] <= m_common.m_far);
-			m_maxLodDistances[i] = distances[i];
-		}
-	}
-
-	/// See setLodDistance.
-	F32 getLodDistance(U32 lod) const
-	{
-		ANKI_ASSERT(m_maxLodDistances[lod] > 0.0f);
-		return m_maxLodDistances[lod];
-	}
-
 	void setWorldTransform(const Transform& worldTransform)
 	{
 		m_worldTransform = worldTransform;
@@ -299,22 +217,6 @@ public:
 		return m_worldTransform;
 	}
 
-	F32 getEarlyZDistance() const
-	{
-		return m_earlyZDistance;
-	}
-
-	void setEarlyZDistance(F32 dist)
-	{
-		ANKI_ASSERT(dist >= 0.0f);
-		m_earlyZDistance = dist;
-	}
-
-	Bool getUpdatedThisFrame() const
-	{
-		return m_updatedThisFrame;
-	}
-
 	Bool update();
 
 	/// Get the precalculated rotations of each of the 6 frustums of an omnidirectional source (eg a point light).
@@ -373,31 +275,17 @@ private:
 	Mat3x4 m_viewMat = Mat3x4::getIdentity(); ///< View matrix
 	Mat4 m_viewProjMat = Mat4::getIdentity(); ///< View projection matrix
 
-	static constexpr U32 kPrevMatrixHistory = 2;
-	Array<Mat3x4, kPrevMatrixHistory> m_prevViewMats = {Mat3x4::getIdentity(), Mat3x4::getIdentity()};
-	Array<Mat4, kPrevMatrixHistory> m_prevProjMats = {Mat4::getIdentity(), Mat4::getIdentity()};
-	Array<Mat4, kPrevMatrixHistory> m_prevViewProjMats = {Mat4::getIdentity(), Mat4::getIdentity()};
-
-	Array<F32, kMaxShadowCascades> m_shadowCascadeDistances = {};
-	Array<F32, kMaxLodCount - 1> m_maxLodDistances = {};
-
-	F32 m_earlyZDistance = 0.0f;
-
-	// Coverage buffer stuff
-	SceneDynamicArray<F32> m_depthMap;
-	U32 m_depthMapWidth = 0;
-	U32 m_depthMapHeight = 0;
-
 	FrustumType m_frustumType = FrustumType::kCount;
 
-	U8 m_shadowCascadeCount = 0;
-
 	Bool m_shapeDirty : 1 = true;
-	Bool m_miscDirty : 1 = true;
 	Bool m_worldTransformDirty : 1 = true;
-	Bool m_updatedThisFrame : 1 = true;
 
 	static Array<Mat3x4, 6> m_omnidirectionalRotations;
+
+	Bool isDirty() const
+	{
+		return m_shapeDirty || m_worldTransformDirty;
+	}
 };
 /// @}
 

+ 28 - 129
AnKi/Script/Scene.cpp

@@ -48,7 +48,9 @@ static SceneGraph* getSceneGraph(lua_State* l)
 	LuaBinder* binder = nullptr;
 	lua_getallocf(l, reinterpret_cast<void**>(&binder));
 
-	return &SceneGraph::getSingleton();
+	SceneGraph* scene = &SceneGraph::getSingleton();
+	ANKI_ASSERT(scene);
+	return scene;
 }
 
 static EventManager* getEventManager(lua_State* l)
@@ -59,7 +61,7 @@ static EventManager* getEventManager(lua_State* l)
 using WeakArraySceneNodePtr = WeakArray<SceneNode*>;
 using WeakArrayBodyComponentPtr = WeakArray<BodyComponent*>;
 
-LuaUserDataTypeInfo luaUserDataTypeInfoLightComponentType = {-4762968297203284245, "LightComponentType", 0, nullptr, nullptr};
+LuaUserDataTypeInfo luaUserDataTypeInfoLightComponentType = {-2186799208001048948, "LightComponentType", 0, nullptr, nullptr};
 
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<LightComponentType>()
@@ -95,7 +97,7 @@ static inline void wrapLightComponentType(lua_State* l)
 }
 
 LuaUserDataTypeInfo luaUserDataTypeInfoWeakArraySceneNodePtr = {
-	1030394014038711158, "WeakArraySceneNodePtr", LuaUserData::computeSizeForGarbageCollected<WeakArraySceneNodePtr>(), nullptr, nullptr};
+	-5621841728276973443, "WeakArraySceneNodePtr", LuaUserData::computeSizeForGarbageCollected<WeakArraySceneNodePtr>(), nullptr, nullptr};
 
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<WeakArraySceneNodePtr>()
@@ -214,7 +216,7 @@ static inline void wrapWeakArraySceneNodePtr(lua_State* l)
 }
 
 LuaUserDataTypeInfo luaUserDataTypeInfoWeakArrayBodyComponentPtr = {
-	819455921486904282, "WeakArrayBodyComponentPtr", LuaUserData::computeSizeForGarbageCollected<WeakArrayBodyComponentPtr>(), nullptr, nullptr};
+	-2450261177319875645, "WeakArrayBodyComponentPtr", LuaUserData::computeSizeForGarbageCollected<WeakArrayBodyComponentPtr>(), nullptr, nullptr};
 
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<WeakArrayBodyComponentPtr>()
@@ -332,7 +334,7 @@ static inline void wrapWeakArrayBodyComponentPtr(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoLightComponent = {54465715559369554, "LightComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoLightComponent = {4306214230380881007, "LightComponent",
 														 LuaUserData::computeSizeForGarbageCollected<LightComponent>(), nullptr, nullptr};
 
 template<>
@@ -943,7 +945,7 @@ static inline void wrapLightComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoDecalComponent = {-4985098517305791101, "DecalComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoDecalComponent = {-7936276591715536647, "DecalComponent",
 														 LuaUserData::computeSizeForGarbageCollected<DecalComponent>(), nullptr, nullptr};
 
 template<>
@@ -1115,7 +1117,7 @@ static inline void wrapDecalComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoLensFlareComponent = {3726228339893206382, "LensFlareComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoLensFlareComponent = {-5086197872425382972, "LensFlareComponent",
 															 LuaUserData::computeSizeForGarbageCollected<LensFlareComponent>(), nullptr, nullptr};
 
 template<>
@@ -1278,7 +1280,7 @@ static inline void wrapLensFlareComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoBodyComponent = {-133328623375189071, "BodyComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoBodyComponent = {-805439343256183040, "BodyComponent",
 														LuaUserData::computeSizeForGarbageCollected<BodyComponent>(), nullptr, nullptr};
 
 template<>
@@ -1431,7 +1433,7 @@ static inline void wrapBodyComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoTriggerComponent = {5843296178425339882, "TriggerComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoTriggerComponent = {-6666901323722894598, "TriggerComponent",
 														   LuaUserData::computeSizeForGarbageCollected<TriggerComponent>(), nullptr, nullptr};
 
 template<>
@@ -1594,7 +1596,7 @@ static inline void wrapTriggerComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoFogDensityComponent = {-5221919076414873151, "FogDensityComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoFogDensityComponent = {-1581092310546501713, "FogDensityComponent",
 															  LuaUserData::computeSizeForGarbageCollected<FogDensityComponent>(), nullptr, nullptr};
 
 template<>
@@ -1797,7 +1799,7 @@ static inline void wrapFogDensityComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoCameraComponent = {-4297593030439985096, "CameraComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoCameraComponent = {-7037015782425453738, "CameraComponent",
 														  LuaUserData::computeSizeForGarbageCollected<CameraComponent>(), nullptr, nullptr};
 
 template<>
@@ -1870,120 +1872,17 @@ static int wrapCameraComponentsetPerspective(lua_State* l)
 	return 0;
 }
 
-/// Pre-wrap method CameraComponent::setShadowCascadeDistance.
-static inline int pwrapCameraComponentsetShadowCascadeDistance(lua_State* l)
-{
-	[[maybe_unused]] LuaUserData* ud;
-	[[maybe_unused]] void* voidp;
-	[[maybe_unused]] PtrSize size;
-
-	if(LuaBinder::checkArgsCount(l, 3)) [[unlikely]]
-	{
-		return -1;
-	}
-
-	// Get "this" as "self"
-	if(LuaBinder::checkUserData(l, 1, luaUserDataTypeInfoCameraComponent, ud))
-	{
-		return -1;
-	}
-
-	CameraComponent* self = ud->getData<CameraComponent>();
-
-	// Pop arguments
-	U32 arg0;
-	if(LuaBinder::checkNumber(l, 2, arg0)) [[unlikely]]
-	{
-		return -1;
-	}
-
-	F32 arg1;
-	if(LuaBinder::checkNumber(l, 3, arg1)) [[unlikely]]
-	{
-		return -1;
-	}
-
-	// Call the method
-	self->setShadowCascadeDistance(arg0, arg1);
-
-	return 0;
-}
-
-/// Wrap method CameraComponent::setShadowCascadeDistance.
-static int wrapCameraComponentsetShadowCascadeDistance(lua_State* l)
-{
-	int res = pwrapCameraComponentsetShadowCascadeDistance(l);
-	if(res >= 0)
-	{
-		return res;
-	}
-
-	lua_error(l);
-	return 0;
-}
-
-/// Pre-wrap method CameraComponent::getShadowCascadeDistance.
-static inline int pwrapCameraComponentgetShadowCascadeDistance(lua_State* l)
-{
-	[[maybe_unused]] LuaUserData* ud;
-	[[maybe_unused]] void* voidp;
-	[[maybe_unused]] PtrSize size;
-
-	if(LuaBinder::checkArgsCount(l, 2)) [[unlikely]]
-	{
-		return -1;
-	}
-
-	// Get "this" as "self"
-	if(LuaBinder::checkUserData(l, 1, luaUserDataTypeInfoCameraComponent, ud))
-	{
-		return -1;
-	}
-
-	CameraComponent* self = ud->getData<CameraComponent>();
-
-	// Pop arguments
-	U32 arg0;
-	if(LuaBinder::checkNumber(l, 2, arg0)) [[unlikely]]
-	{
-		return -1;
-	}
-
-	// Call the method
-	F32 ret = self->getShadowCascadeDistance(arg0);
-
-	// Push return value
-	lua_pushnumber(l, lua_Number(ret));
-
-	return 1;
-}
-
-/// Wrap method CameraComponent::getShadowCascadeDistance.
-static int wrapCameraComponentgetShadowCascadeDistance(lua_State* l)
-{
-	int res = pwrapCameraComponentgetShadowCascadeDistance(l);
-	if(res >= 0)
-	{
-		return res;
-	}
-
-	lua_error(l);
-	return 0;
-}
-
 /// Wrap class CameraComponent.
 static inline void wrapCameraComponent(lua_State* l)
 {
 	LuaBinder::createClass(l, &luaUserDataTypeInfoCameraComponent);
 	LuaBinder::pushLuaCFuncMethod(l, "setPerspective", wrapCameraComponentsetPerspective);
-	LuaBinder::pushLuaCFuncMethod(l, "setShadowCascadeDistance", wrapCameraComponentsetShadowCascadeDistance);
-	LuaBinder::pushLuaCFuncMethod(l, "getShadowCascadeDistance", wrapCameraComponentgetShadowCascadeDistance);
 	lua_settop(l, 0);
 }
 
 LuaUserDataTypeInfo luaUserDataTypeInfoGlobalIlluminationProbeComponent = {
-	-4960401065857982940, "GlobalIlluminationProbeComponent", LuaUserData::computeSizeForGarbageCollected<GlobalIlluminationProbeComponent>(),
-	nullptr, nullptr};
+	662796720185408765, "GlobalIlluminationProbeComponent", LuaUserData::computeSizeForGarbageCollected<GlobalIlluminationProbeComponent>(), nullptr,
+	nullptr};
 
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<GlobalIlluminationProbeComponent>()
@@ -2229,7 +2128,7 @@ static inline void wrapGlobalIlluminationProbeComponent(lua_State* l)
 }
 
 LuaUserDataTypeInfo luaUserDataTypeInfoReflectionProbeComponent = {
-	7788946072500493791, "ReflectionProbeComponent", LuaUserData::computeSizeForGarbageCollected<ReflectionProbeComponent>(), nullptr, nullptr};
+	-1659222547184662609, "ReflectionProbeComponent", LuaUserData::computeSizeForGarbageCollected<ReflectionProbeComponent>(), nullptr, nullptr};
 
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<ReflectionProbeComponent>()
@@ -2344,7 +2243,7 @@ static inline void wrapReflectionProbeComponent(lua_State* l)
 }
 
 LuaUserDataTypeInfo luaUserDataTypeInfoParticleEmitterComponent = {
-	6553888018647297571, "ParticleEmitterComponent", LuaUserData::computeSizeForGarbageCollected<ParticleEmitterComponent>(), nullptr, nullptr};
+	2968528361814203615, "ParticleEmitterComponent", LuaUserData::computeSizeForGarbageCollected<ParticleEmitterComponent>(), nullptr, nullptr};
 
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<ParticleEmitterComponent>()
@@ -2406,7 +2305,7 @@ static inline void wrapParticleEmitterComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoModelComponent = {9042863195481032552, "ModelComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoModelComponent = {-5693197927073963652, "ModelComponent",
 														 LuaUserData::computeSizeForGarbageCollected<ModelComponent>(), nullptr, nullptr};
 
 template<>
@@ -2469,7 +2368,7 @@ static inline void wrapModelComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoSkinComponent = {3237356926698534737, "SkinComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoSkinComponent = {2877959498374713604, "SkinComponent",
 														LuaUserData::computeSizeForGarbageCollected<SkinComponent>(), nullptr, nullptr};
 
 template<>
@@ -2532,7 +2431,7 @@ static inline void wrapSkinComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoSkyboxComponent = {3762043156270581072, "SkyboxComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoSkyboxComponent = {7113661660511499239, "SkyboxComponent",
 														  LuaUserData::computeSizeForGarbageCollected<SkyboxComponent>(), nullptr, nullptr};
 
 template<>
@@ -2833,7 +2732,7 @@ static inline void wrapSkyboxComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoSceneNode = {-8144103962712448337, "SceneNode", LuaUserData::computeSizeForGarbageCollected<SceneNode>(),
+LuaUserDataTypeInfo luaUserDataTypeInfoSceneNode = {1520931116948498871, "SceneNode", LuaUserData::computeSizeForGarbageCollected<SceneNode>(),
 													nullptr, nullptr};
 
 template<>
@@ -4663,7 +4562,7 @@ static inline void wrapSceneNode(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoSceneGraph = {2296483110700332634, "SceneGraph", LuaUserData::computeSizeForGarbageCollected<SceneGraph>(),
+LuaUserDataTypeInfo luaUserDataTypeInfoSceneGraph = {-5095198754290276314, "SceneGraph", LuaUserData::computeSizeForGarbageCollected<SceneGraph>(),
 													 nullptr, nullptr};
 
 template<>
@@ -4849,7 +4748,7 @@ static inline void wrapSceneGraph(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoEvent = {-26170287685311962, "Event", LuaUserData::computeSizeForGarbageCollected<Event>(), nullptr, nullptr};
+LuaUserDataTypeInfo luaUserDataTypeInfoEvent = {963208982629256277, "Event", LuaUserData::computeSizeForGarbageCollected<Event>(), nullptr, nullptr};
 
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<Event>()
@@ -4913,7 +4812,7 @@ static inline void wrapEvent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoLightEvent = {4481956815078773137, "LightEvent", LuaUserData::computeSizeForGarbageCollected<LightEvent>(),
+LuaUserDataTypeInfo luaUserDataTypeInfoLightEvent = {-8538774470743043372, "LightEvent", LuaUserData::computeSizeForGarbageCollected<LightEvent>(),
 													 nullptr, nullptr};
 
 template<>
@@ -5032,7 +4931,7 @@ static inline void wrapLightEvent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoScriptEvent = {8922169158523877630, "ScriptEvent", LuaUserData::computeSizeForGarbageCollected<ScriptEvent>(),
+LuaUserDataTypeInfo luaUserDataTypeInfoScriptEvent = {4297440921340497154, "ScriptEvent", LuaUserData::computeSizeForGarbageCollected<ScriptEvent>(),
 													  nullptr, nullptr};
 
 template<>
@@ -5048,7 +4947,7 @@ static inline void wrapScriptEvent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoJitterMoveEvent = {-2624593919429132093, "JitterMoveEvent",
+LuaUserDataTypeInfo luaUserDataTypeInfoJitterMoveEvent = {2516494412036964791, "JitterMoveEvent",
 														  LuaUserData::computeSizeForGarbageCollected<JitterMoveEvent>(), nullptr, nullptr};
 
 template<>
@@ -5123,7 +5022,7 @@ static inline void wrapJitterMoveEvent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoAnimationEvent = {-9083934768648862151, "AnimationEvent",
+LuaUserDataTypeInfo luaUserDataTypeInfoAnimationEvent = {1905208628208424330, "AnimationEvent",
 														 LuaUserData::computeSizeForGarbageCollected<AnimationEvent>(), nullptr, nullptr};
 
 template<>
@@ -5139,7 +5038,7 @@ static inline void wrapAnimationEvent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoEventManager = {6704640661412357326, "EventManager",
+LuaUserDataTypeInfo luaUserDataTypeInfoEventManager = {-824737091935505940, "EventManager",
 													   LuaUserData::computeSizeForGarbageCollected<EventManager>(), nullptr, nullptr};
 
 template<>

+ 1 - 13
AnKi/Script/Scene.xml

@@ -49,7 +49,7 @@ static SceneGraph* getSceneGraph(lua_State* l)
 	LuaBinder* binder = nullptr;
 	lua_getallocf(l, reinterpret_cast<void**>(&binder));
 
-	SceneGraph* scene = binder->getOtherSystems().m_sceneGraph;
+	SceneGraph* scene = &SceneGraph::getSingleton();
 	ANKI_ASSERT(scene);
 	return scene;
 }
@@ -263,18 +263,6 @@ using WeakArrayBodyComponentPtr = WeakArray<BodyComponent*>;
 						<arg>F32</arg>
 					</args>
 				</method>
-				<method name="setShadowCascadeDistance">
-					<args>
-						<arg>U32</arg>
-						<arg>F32</arg>
-					</args>
-				</method>
-				<method name="getShadowCascadeDistance">
-					<args>
-						<arg>U32</arg>
-					</args>
-					<return>F32</return>
-				</method>
 			</methods>
 		</class>