2
0
Эх сурвалжийг харах

Refactor probe components bounds

Panagiotis Christopoulos Charitos 9 сар өмнө
parent
commit
cee11a43a8

+ 2 - 8
AnKi/Importer/GltfImporter.cpp

@@ -765,14 +765,11 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
 			Vec3 scale;
 			getNodeTransform(node, tsl, rot, scale);
 
-			const Vec3 boxSize = scale * 2.0f;
-
 			ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newSceneNode(\"%s\")\n", getNodeName(node).cstr()));
 
 			ANKI_CHECK(m_sceneFile.writeText("comp = node:newReflectionProbeComponent()\n"));
-			ANKI_CHECK(m_sceneFile.writeTextf("comp:setBoxVolumeSize(Vec3.new(%f, %f, %f))\n", boxSize.x(), boxSize.y(), boxSize.z()));
 
-			const Transform localTrf = Transform(tsl.xyz0(), Mat3x4(Vec3(0.0f), rot), Vec4(1.0f, 1.0f, 1.0f, 0.0f));
+			const Transform localTrf = Transform(tsl, rot, scale);
 			ANKI_CHECK(writeTransform(parentTrf.combineTransformations(localTrf)));
 		}
 		else if(stringsExist(extras, {"gi_probe"}))
@@ -782,11 +779,8 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
 			Vec3 scale;
 			getNodeTransform(node, tsl, rot, scale);
 
-			const Vec3 boxSize = scale * 2.0f;
-
 			ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newSceneNode(\"%s\")\n", getNodeName(node).cstr()));
 			ANKI_CHECK(m_sceneFile.writeText("comp = node:newGlobalIlluminationProbeComponent()\n"));
-			ANKI_CHECK(m_sceneFile.writeTextf("comp:setBoxVolumeSize(Vec3.new(%f, %f, %f))\n", boxSize.x(), boxSize.y(), boxSize.z()));
 
 			ANKI_CHECK(getExtra(extras, "gi_probe_fade_distance", extraValuef, extraFound));
 			if(extraFound && extraValuef > 0.0f)
@@ -800,7 +794,7 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
 				ANKI_CHECK(m_sceneFile.writeTextf("comp:setCellSize(%f)\n", extraValuef));
 			}
 
-			const Transform localTrf = Transform(tsl.xyz0(), Mat3x4(Vec3(0.0f), rot), Vec4(1.0f, 1.0f, 1.0f, 0.0f));
+			const Transform localTrf = Transform(tsl, rot, scale);
 			ANKI_CHECK(writeTransform(parentTrf.combineTransformations(localTrf)));
 		}
 		else if(stringsExist(extras, {"decal"}))

+ 36 - 13
AnKi/Scene/Components/GlobalIlluminationProbeComponent.cpp

@@ -33,15 +33,40 @@ GlobalIlluminationProbeComponent::~GlobalIlluminationProbeComponent()
 Error GlobalIlluminationProbeComponent::update(SceneComponentUpdateInfo& info, Bool& updated)
 {
 	const Bool moved = info.m_node->movedThisFrame();
-	updated = moved || m_shapeDirty || m_refreshDirty;
 
-	if(moved || m_shapeDirty)
+	if(!m_dirty && !moved) [[likely]]
+	{
+		return Error::kNone;
+	}
+
+	updated = true;
+
+	const Vec3 halfSize = info.m_node->getWorldTransform().getScale().xyz();
+	UVec3 newCellCounts = UVec3(2.0f * halfSize / m_cellSize);
+	newCellCounts = newCellCounts.max(UVec3(1));
+
+	const Bool shapeDirty = m_cellCounts != newCellCounts;
+
+	if(shapeDirty)
+	{
+		m_volTex.reset(nullptr);
+		m_cellCounts = newCellCounts;
+		m_totalCellCount = m_cellCounts.x() * m_cellCounts.y() * m_cellCounts.z();
+	}
+
+	if(moved)
+	{
+		m_worldPos = info.m_node->getWorldTransform().getOrigin().xyz();
+		m_halfSize = halfSize;
+	}
+
+	if(moved || shapeDirty)
 	{
 		m_cellsRefreshedCount = 0;
 	}
 
 	// (re-)create the volume texture
-	if(m_shapeDirty) [[unlikely]]
+	if(!m_volTex)
 	{
 		TextureInitInfo texInit("GiProbe");
 		texInit.m_format = (GrManager::getSingleton().getDeviceCapabilities().m_unalignedBbpTextureFormats) ? Format::kR16G16B16_Sfloat
@@ -92,26 +117,25 @@ Error GlobalIlluminationProbeComponent::update(SceneComponentUpdateInfo& info, B
 		GrManager::getSingleton().submit(cmdb.get());
 	}
 
-	// Any update
-	if(updated) [[unlikely]]
+	// Upload to GPU scene
+	if(moved || shapeDirty || m_dirty)
 	{
-		m_worldPos = info.m_node->getWorldTransform().getOrigin().xyz();
-
 		// Change the UUID
+		U32 uuid;
 		if(m_cellsRefreshedCount == 0)
 		{
 			// Refresh starts over, get a new UUID
-			m_uuid = SceneGraph::getSingleton().getNewUuid();
+			uuid = regenerateUuid();
 		}
 		else if(m_cellsRefreshedCount < m_totalCellCount)
 		{
 			// In the middle of the refresh process
-			ANKI_ASSERT(m_uuid != 0);
+			uuid = getUuid();
 		}
 		else
 		{
 			// Refresh it done
-			m_uuid = 0;
+			uuid = 0;
 		}
 
 		// Upload to the GPU scene
@@ -124,13 +148,12 @@ Error GlobalIlluminationProbeComponent::update(SceneComponentUpdateInfo& info, B
 		gpuProbe.m_volumeTexture = m_volTexBindlessIdx;
 		gpuProbe.m_halfTexelSizeU = 1.0f / (F32(m_cellCounts.y()) * 6.0f) / 2.0f;
 		gpuProbe.m_fadeDistance = m_fadeDistance;
-		gpuProbe.m_uuid = m_uuid;
+		gpuProbe.m_uuid = uuid;
 		gpuProbe.m_componentArrayIndex = getArrayIndex();
 		m_gpuSceneProbe.uploadToGpuScene(gpuProbe);
 	}
 
-	m_shapeDirty = false;
-	m_refreshDirty = false;
+	m_dirty = false;
 
 	return Error::kNone;
 }

+ 26 - 47
AnKi/Scene/Components/GlobalIlluminationProbeComponent.h

@@ -25,26 +25,14 @@ public:
 
 	~GlobalIlluminationProbeComponent();
 
-	/// Set the bounding box size.
-	void setBoxVolumeSize(const Vec3& sizeXYZ)
-	{
-		m_halfSize = sizeXYZ / 2.0f;
-		updateMembers();
-		m_shapeDirty = true;
-	}
-
-	Vec3 getBoxVolumeSize() const
-	{
-		return m_halfSize * 2.0f;
-	}
-
 	/// Set the cell size in meters.
 	void setCellSize(F32 cellSize)
 	{
-		ANKI_ASSERT(cellSize > 0.0f);
-		m_cellSize = cellSize;
-		updateMembers();
-		m_shapeDirty = true;
+		if(ANKI_SCENE_ASSERT(cellSize > 0.0f) && m_cellSize != cellSize)
+		{
+			m_cellSize = cellSize;
+			m_dirty = true;
+		}
 	}
 
 	F32 getCellSize() const
@@ -59,8 +47,16 @@ public:
 
 	void setFadeDistance(F32 dist)
 	{
-		m_fadeDistance = max(0.0f, dist);
-		m_shapeDirty = true;
+		if(ANKI_SCENE_ASSERT(dist > 0.0f) && m_fadeDistance != dist)
+		{
+			m_fadeDistance = dist;
+			m_dirty = true;
+		}
+	}
+
+	ANKI_INTERNAL Vec3 getBoxVolumeSize() const
+	{
+		return m_halfSize * 2.0f;
 	}
 
 	/// Check if any of the probe's cells need to be re-rendered.
@@ -69,52 +65,47 @@ public:
 		return m_cellsRefreshedCount < m_totalCellCount;
 	}
 
-	U32 getNextCellForRefresh() const
+	ANKI_INTERNAL U32 getNextCellForRefresh() const
 	{
 		ANKI_ASSERT(getCellsNeedsRefresh());
 		return m_cellsRefreshedCount;
 	}
 
 	/// Add to the number of texels that got refreshed this frame.
-	void incrementRefreshedCells(U32 cellCount)
+	ANKI_INTERNAL void incrementRefreshedCells(U32 cellCount)
 	{
 		ANKI_ASSERT(getCellsNeedsRefresh());
 		m_cellsRefreshedCount += cellCount;
 		ANKI_ASSERT(m_cellsRefreshedCount <= m_totalCellCount);
-		m_refreshDirty = true;
-	}
-
-	U32 getUuid() const
-	{
-		return m_uuid;
+		m_dirty = true;
 	}
 
 	/// The radius around the probe's center that can infuence the rendering of the env texture.
-	F32 getRenderRadius() const;
+	ANKI_INTERNAL F32 getRenderRadius() const;
 
-	F32 getShadowsRenderRadius() const;
+	ANKI_INTERNAL F32 getShadowsRenderRadius() const;
 
-	const Vec3& getWorldPosition() const
+	ANKI_INTERNAL const Vec3& getWorldPosition() const
 	{
 		return m_worldPos;
 	}
 
-	const UVec3& getCellCountsPerDimension() const
+	ANKI_INTERNAL const UVec3& getCellCountsPerDimension() const
 	{
 		return m_cellCounts;
 	}
 
-	U32 getCellCount() const
+	ANKI_INTERNAL U32 getCellCount() const
 	{
 		return m_totalCellCount;
 	}
 
-	Texture& getVolumeTexture() const
+	ANKI_INTERNAL Texture& getVolumeTexture() const
 	{
 		return *m_volTex;
 	}
 
-	const GpuSceneArrays::GlobalIlluminationProbe::Allocation& getGpuSceneAllocation() const
+	ANKI_INTERNAL const GpuSceneArrays::GlobalIlluminationProbe::Allocation& getGpuSceneAllocation() const
 	{
 		return m_gpuSceneProbe;
 	}
@@ -134,21 +125,9 @@ private:
 
 	ShaderProgramResourcePtr m_clearTextureProg;
 
-	U32 m_uuid = 0;
-
 	U32 m_cellsRefreshedCount = 0;
 
-	Bool m_shapeDirty = true;
-	Bool m_refreshDirty = true;
-
-	/// Recalc come values.
-	void updateMembers()
-	{
-		const Vec3 dist = m_halfSize * 2.0f;
-		m_cellCounts = UVec3(dist / m_cellSize);
-		m_cellCounts = m_cellCounts.max(UVec3(1));
-		m_totalCellCount = m_cellCounts.x() * m_cellCounts.y() * m_cellCounts.z();
-	}
+	Bool m_dirty = true;
 
 	Error update(SceneComponentUpdateInfo& info, Bool& updated) override;
 };

+ 3 - 2
AnKi/Scene/Components/ReflectionProbeComponent.cpp

@@ -50,9 +50,10 @@ Error ReflectionProbeComponent::update(SceneComponentUpdateInfo& info, Bool& upd
 	if(updated) [[unlikely]]
 	{
 		m_worldPos = info.m_node->getWorldTransform().getOrigin().xyz();
+		m_halfSize = info.m_node->getWorldTransform().getScale().xyz();
 
 		// Update the UUID
-		m_uuid = (m_reflectionNeedsRefresh) ? SceneGraph::getSingleton().getNewUuid() : 0;
+		const U32 uuid = (m_reflectionNeedsRefresh) ? regenerateUuid() : 0;
 
 		// Upload to the GPU scene
 		GpuSceneReflectionProbe gpuProbe;
@@ -63,7 +64,7 @@ Error ReflectionProbeComponent::update(SceneComponentUpdateInfo& info, Bool& upd
 		gpuProbe.m_aabbMin = aabbWorld.getMin().xyz();
 		gpuProbe.m_aabbMax = aabbWorld.getMax().xyz();
 
-		gpuProbe.m_uuid = m_uuid;
+		gpuProbe.m_uuid = uuid;
 		gpuProbe.m_componentArrayIndex = getArrayIndex();
 		m_gpuSceneProbe.uploadToGpuScene(gpuProbe);
 	}

+ 6 - 20
AnKi/Scene/Components/ReflectionProbeComponent.h

@@ -28,15 +28,7 @@ public:
 
 	~ReflectionProbeComponent();
 
-	/// Set the local size of the probe volume.
-	void setBoxVolumeSize(const Vec3& sizeXYZ)
-	{
-		m_halfSize = sizeXYZ / 2.0f;
-		m_dirty = true;
-		m_reflectionNeedsRefresh = true;
-	}
-
-	Vec3 getBoxVolumeSize() const
+	ANKI_INTERNAL Vec3 getBoxVolumeSize() const
 	{
 		return m_halfSize * 2.0f;
 	}
@@ -52,28 +44,23 @@ public:
 		m_dirty = true; // To force update of the gpu scene
 	}
 
-	U32 getUuid() const
-	{
-		return m_uuid;
-	}
-
-	Vec3 getWorldPosition() const
+	ANKI_INTERNAL Vec3 getWorldPosition() const
 	{
 		ANKI_ASSERT(m_worldPos.x() != kMaxF32);
 		return m_worldPos;
 	}
 
 	/// The radius around the probe's center that can infuence the rendering of the env texture.
-	F32 getRenderRadius() const;
+	ANKI_INTERNAL F32 getRenderRadius() const;
 
-	F32 getShadowsRenderRadius() const;
+	ANKI_INTERNAL F32 getShadowsRenderRadius() const;
 
-	Texture& getReflectionTexture() const
+	ANKI_INTERNAL Texture& getReflectionTexture() const
 	{
 		return *m_reflectionTex;
 	}
 
-	const GpuSceneArrays::ReflectionProbe::Allocation& getGpuSceneAllocation() const
+	ANKI_INTERNAL const GpuSceneArrays::ReflectionProbe::Allocation& getGpuSceneAllocation() const
 	{
 		return m_gpuSceneProbe;
 	}
@@ -86,7 +73,6 @@ private:
 
 	TexturePtr m_reflectionTex;
 	U32 m_reflectionTexBindlessIndex = kMaxU32;
-	U32 m_uuid = 0;
 
 	Bool m_dirty = true;
 	Bool m_reflectionNeedsRefresh = true;

+ 6 - 0
AnKi/Scene/Components/SceneComponent.cpp

@@ -14,4 +14,10 @@ SceneComponent::SceneComponent([[maybe_unused]] SceneNode* node, SceneComponentT
 {
 }
 
+U32 SceneComponent::regenerateUuid()
+{
+	m_uuid = SceneGraph::getSingleton().getNewUuid();
+	return m_uuid;
+}
+
 } // namespace anki

+ 3 - 0
AnKi/Scene/Components/SceneComponent.h

@@ -126,6 +126,9 @@ public:
 		return m_updateOrderWeights[type];
 	}
 
+protected:
+	U32 regenerateUuid();
+
 private:
 	Timestamp m_timestamp = 1; ///< Indicates when an update happened
 	U32 m_uuid = 0;

+ 25 - 176
AnKi/Script/Scene.cpp

@@ -60,7 +60,7 @@ static EventManager* getEventManager(lua_State* l)
 
 using WeakArraySceneNodePtr = WeakArray<SceneNode*>;
 
-LuaUserDataTypeInfo luaUserDataTypeInfoLightComponentType = {7338015305352809612, "LightComponentType", 0, nullptr, nullptr};
+LuaUserDataTypeInfo luaUserDataTypeInfoLightComponentType = {-4512355469057060026, "LightComponentType", 0, nullptr, nullptr};
 
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<LightComponentType>()
@@ -95,8 +95,7 @@ static inline void wrapLightComponentType(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoBodyComponentCollisionShapeType = {-6908060042622032702, "BodyComponentCollisionShapeType", 0, nullptr,
-																		  nullptr};
+LuaUserDataTypeInfo luaUserDataTypeInfoBodyComponentCollisionShapeType = {671847876503904514, "BodyComponentCollisionShapeType", 0, nullptr, nullptr};
 
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<BodyComponentCollisionShapeType>()
@@ -140,7 +139,7 @@ static inline void wrapBodyComponentCollisionShapeType(lua_State* l)
 }
 
 LuaUserDataTypeInfo luaUserDataTypeInfoWeakArraySceneNodePtr = {
-	2399061980620077943, "WeakArraySceneNodePtr", LuaUserData::computeSizeForGarbageCollected<WeakArraySceneNodePtr>(), nullptr, nullptr};
+	8481773792182469546, "WeakArraySceneNodePtr", LuaUserData::computeSizeForGarbageCollected<WeakArraySceneNodePtr>(), nullptr, nullptr};
 
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<WeakArraySceneNodePtr>()
@@ -258,7 +257,7 @@ static inline void wrapWeakArraySceneNodePtr(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoLightComponent = {1067889465723820146, "LightComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoLightComponent = {7400372163853045267, "LightComponent",
 														 LuaUserData::computeSizeForGarbageCollected<LightComponent>(), nullptr, nullptr};
 
 template<>
@@ -869,7 +868,7 @@ static inline void wrapLightComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoDecalComponent = {-2183142781875683422, "DecalComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoDecalComponent = {-1523454534072154881, "DecalComponent",
 														 LuaUserData::computeSizeForGarbageCollected<DecalComponent>(), nullptr, nullptr};
 
 template<>
@@ -1041,7 +1040,7 @@ static inline void wrapDecalComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoLensFlareComponent = {-4575997958049285739, "LensFlareComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoLensFlareComponent = {8598672267166371667, "LensFlareComponent",
 															 LuaUserData::computeSizeForGarbageCollected<LensFlareComponent>(), nullptr, nullptr};
 
 template<>
@@ -1204,7 +1203,7 @@ static inline void wrapLensFlareComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoBodyComponent = {496680700938599539, "BodyComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoBodyComponent = {2044205211571264187, "BodyComponent",
 														LuaUserData::computeSizeForGarbageCollected<BodyComponent>(), nullptr, nullptr};
 
 template<>
@@ -1514,7 +1513,7 @@ static inline void wrapBodyComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoTriggerComponent = {9049629301523812794, "TriggerComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoTriggerComponent = {-1002454183054442233, "TriggerComponent",
 														   LuaUserData::computeSizeForGarbageCollected<TriggerComponent>(), nullptr, nullptr};
 
 template<>
@@ -1628,7 +1627,7 @@ static inline void wrapTriggerComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoFogDensityComponent = {-3543091099512187349, "FogDensityComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoFogDensityComponent = {7977204644763908597, "FogDensityComponent",
 															  LuaUserData::computeSizeForGarbageCollected<FogDensityComponent>(), nullptr, nullptr};
 
 template<>
@@ -1734,7 +1733,7 @@ static inline void wrapFogDensityComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoCameraComponent = {3105768174526474544, "CameraComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoCameraComponent = {-8282685180682550393, "CameraComponent",
 														  LuaUserData::computeSizeForGarbageCollected<CameraComponent>(), nullptr, nullptr};
 
 template<>
@@ -1816,8 +1815,8 @@ static inline void wrapCameraComponent(lua_State* l)
 }
 
 LuaUserDataTypeInfo luaUserDataTypeInfoGlobalIlluminationProbeComponent = {
-	6683461612486223717, "GlobalIlluminationProbeComponent", LuaUserData::computeSizeForGarbageCollected<GlobalIlluminationProbeComponent>(), nullptr,
-	nullptr};
+	-7197282717727299465, "GlobalIlluminationProbeComponent", LuaUserData::computeSizeForGarbageCollected<GlobalIlluminationProbeComponent>(),
+	nullptr, nullptr};
 
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<GlobalIlluminationProbeComponent>()
@@ -1825,55 +1824,6 @@ const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<GlobalIlluminationPro
 	return luaUserDataTypeInfoGlobalIlluminationProbeComponent;
 }
 
-/// Pre-wrap method GlobalIlluminationProbeComponent::setBoxVolumeSize.
-static inline int pwrapGlobalIlluminationProbeComponentsetBoxVolumeSize(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, luaUserDataTypeInfoGlobalIlluminationProbeComponent, ud))
-	{
-		return -1;
-	}
-
-	GlobalIlluminationProbeComponent* self = ud->getData<GlobalIlluminationProbeComponent>();
-
-	// Pop arguments
-	extern LuaUserDataTypeInfo luaUserDataTypeInfoVec3;
-	if(LuaBinder::checkUserData(l, 2, luaUserDataTypeInfoVec3, ud)) [[unlikely]]
-	{
-		return -1;
-	}
-
-	Vec3* iarg0 = ud->getData<Vec3>();
-	const Vec3& arg0(*iarg0);
-
-	// Call the method
-	self->setBoxVolumeSize(arg0);
-
-	return 0;
-}
-
-/// Wrap method GlobalIlluminationProbeComponent::setBoxVolumeSize.
-static int wrapGlobalIlluminationProbeComponentsetBoxVolumeSize(lua_State* l)
-{
-	int res = pwrapGlobalIlluminationProbeComponentsetBoxVolumeSize(l);
-	if(res >= 0)
-	{
-		return res;
-	}
-
-	lua_error(l);
-	return 0;
-}
-
 /// Pre-wrap method GlobalIlluminationProbeComponent::setCellSize.
 static inline int pwrapGlobalIlluminationProbeComponentsetCellSize(lua_State* l)
 {
@@ -2054,7 +2004,6 @@ static int wrapGlobalIlluminationProbeComponentgetFadeDistance(lua_State* l)
 static inline void wrapGlobalIlluminationProbeComponent(lua_State* l)
 {
 	LuaBinder::createClass(l, &luaUserDataTypeInfoGlobalIlluminationProbeComponent);
-	LuaBinder::pushLuaCFuncMethod(l, "setBoxVolumeSize", wrapGlobalIlluminationProbeComponentsetBoxVolumeSize);
 	LuaBinder::pushLuaCFuncMethod(l, "setCellSize", wrapGlobalIlluminationProbeComponentsetCellSize);
 	LuaBinder::pushLuaCFuncMethod(l, "getCellSize", wrapGlobalIlluminationProbeComponentgetCellSize);
 	LuaBinder::pushLuaCFuncMethod(l, "setFadeDistance", wrapGlobalIlluminationProbeComponentsetFadeDistance);
@@ -2063,7 +2012,7 @@ static inline void wrapGlobalIlluminationProbeComponent(lua_State* l)
 }
 
 LuaUserDataTypeInfo luaUserDataTypeInfoReflectionProbeComponent = {
-	8434875818304985245, "ReflectionProbeComponent", LuaUserData::computeSizeForGarbageCollected<ReflectionProbeComponent>(), nullptr, nullptr};
+	-454570398619495788, "ReflectionProbeComponent", LuaUserData::computeSizeForGarbageCollected<ReflectionProbeComponent>(), nullptr, nullptr};
 
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<ReflectionProbeComponent>()
@@ -2071,114 +2020,15 @@ const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<ReflectionProbeCompon
 	return luaUserDataTypeInfoReflectionProbeComponent;
 }
 
-/// Pre-wrap method ReflectionProbeComponent::setBoxVolumeSize.
-static inline int pwrapReflectionProbeComponentsetBoxVolumeSize(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, luaUserDataTypeInfoReflectionProbeComponent, ud))
-	{
-		return -1;
-	}
-
-	ReflectionProbeComponent* self = ud->getData<ReflectionProbeComponent>();
-
-	// Pop arguments
-	extern LuaUserDataTypeInfo luaUserDataTypeInfoVec3;
-	if(LuaBinder::checkUserData(l, 2, luaUserDataTypeInfoVec3, ud)) [[unlikely]]
-	{
-		return -1;
-	}
-
-	Vec3* iarg0 = ud->getData<Vec3>();
-	const Vec3& arg0(*iarg0);
-
-	// Call the method
-	self->setBoxVolumeSize(arg0);
-
-	return 0;
-}
-
-/// Wrap method ReflectionProbeComponent::setBoxVolumeSize.
-static int wrapReflectionProbeComponentsetBoxVolumeSize(lua_State* l)
-{
-	int res = pwrapReflectionProbeComponentsetBoxVolumeSize(l);
-	if(res >= 0)
-	{
-		return res;
-	}
-
-	lua_error(l);
-	return 0;
-}
-
-/// Pre-wrap method ReflectionProbeComponent::getBoxVolumeSize.
-static inline int pwrapReflectionProbeComponentgetBoxVolumeSize(lua_State* l)
-{
-	[[maybe_unused]] LuaUserData* ud;
-	[[maybe_unused]] void* voidp;
-	[[maybe_unused]] PtrSize size;
-
-	if(LuaBinder::checkArgsCount(l, 1)) [[unlikely]]
-	{
-		return -1;
-	}
-
-	// Get "this" as "self"
-	if(LuaBinder::checkUserData(l, 1, luaUserDataTypeInfoReflectionProbeComponent, ud))
-	{
-		return -1;
-	}
-
-	ReflectionProbeComponent* self = ud->getData<ReflectionProbeComponent>();
-
-	// Call the method
-	Vec3 ret = self->getBoxVolumeSize();
-
-	// Push return value
-	size = LuaUserData::computeSizeForGarbageCollected<Vec3>();
-	voidp = lua_newuserdata(l, size);
-	luaL_setmetatable(l, "Vec3");
-	ud = static_cast<LuaUserData*>(voidp);
-	extern LuaUserDataTypeInfo luaUserDataTypeInfoVec3;
-	ud->initGarbageCollected(&luaUserDataTypeInfoVec3);
-	::new(ud->getData<Vec3>()) Vec3(std::move(ret));
-
-	return 1;
-}
-
-/// Wrap method ReflectionProbeComponent::getBoxVolumeSize.
-static int wrapReflectionProbeComponentgetBoxVolumeSize(lua_State* l)
-{
-	int res = pwrapReflectionProbeComponentgetBoxVolumeSize(l);
-	if(res >= 0)
-	{
-		return res;
-	}
-
-	lua_error(l);
-	return 0;
-}
-
 /// Wrap class ReflectionProbeComponent.
 static inline void wrapReflectionProbeComponent(lua_State* l)
 {
 	LuaBinder::createClass(l, &luaUserDataTypeInfoReflectionProbeComponent);
-	LuaBinder::pushLuaCFuncMethod(l, "setBoxVolumeSize", wrapReflectionProbeComponentsetBoxVolumeSize);
-	LuaBinder::pushLuaCFuncMethod(l, "getBoxVolumeSize", wrapReflectionProbeComponentgetBoxVolumeSize);
 	lua_settop(l, 0);
 }
 
 LuaUserDataTypeInfo luaUserDataTypeInfoParticleEmitterComponent = {
-	-168305057192343669, "ParticleEmitterComponent", LuaUserData::computeSizeForGarbageCollected<ParticleEmitterComponent>(), nullptr, nullptr};
+	6715294256872600072, "ParticleEmitterComponent", LuaUserData::computeSizeForGarbageCollected<ParticleEmitterComponent>(), nullptr, nullptr};
 
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<ParticleEmitterComponent>()
@@ -2240,7 +2090,7 @@ static inline void wrapParticleEmitterComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoModelComponent = {2038834447713449133, "ModelComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoModelComponent = {587971086225739631, "ModelComponent",
 														 LuaUserData::computeSizeForGarbageCollected<ModelComponent>(), nullptr, nullptr};
 
 template<>
@@ -2303,7 +2153,7 @@ static inline void wrapModelComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoSkinComponent = {-5014322562480028485, "SkinComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoSkinComponent = {1179936923048810307, "SkinComponent",
 														LuaUserData::computeSizeForGarbageCollected<SkinComponent>(), nullptr, nullptr};
 
 template<>
@@ -2366,7 +2216,7 @@ static inline void wrapSkinComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoSkyboxComponent = {-5801314403815932328, "SkyboxComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoSkyboxComponent = {-2081978872066799593, "SkyboxComponent",
 														  LuaUserData::computeSizeForGarbageCollected<SkyboxComponent>(), nullptr, nullptr};
 
 template<>
@@ -2857,7 +2707,7 @@ static inline void wrapSkyboxComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoSceneNode = {8559507649129520933, "SceneNode", LuaUserData::computeSizeForGarbageCollected<SceneNode>(),
+LuaUserDataTypeInfo luaUserDataTypeInfoSceneNode = {251828223337137303, "SceneNode", LuaUserData::computeSizeForGarbageCollected<SceneNode>(),
 													nullptr, nullptr};
 
 template<>
@@ -4700,7 +4550,7 @@ static inline void wrapSceneNode(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoSceneGraph = {-7171708055777001754, "SceneGraph", LuaUserData::computeSizeForGarbageCollected<SceneGraph>(),
+LuaUserDataTypeInfo luaUserDataTypeInfoSceneGraph = {-9132673623641199223, "SceneGraph", LuaUserData::computeSizeForGarbageCollected<SceneGraph>(),
 													 nullptr, nullptr};
 
 template<>
@@ -4886,8 +4736,7 @@ static inline void wrapSceneGraph(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoEvent = {-1261047819491895780, "Event", LuaUserData::computeSizeForGarbageCollected<Event>(), nullptr,
-												nullptr};
+LuaUserDataTypeInfo luaUserDataTypeInfoEvent = {287676937276190166, "Event", LuaUserData::computeSizeForGarbageCollected<Event>(), nullptr, nullptr};
 
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<Event>()
@@ -4951,7 +4800,7 @@ static inline void wrapEvent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoLightEvent = {3386031270117127067, "LightEvent", LuaUserData::computeSizeForGarbageCollected<LightEvent>(),
+LuaUserDataTypeInfo luaUserDataTypeInfoLightEvent = {797031557305127058, "LightEvent", LuaUserData::computeSizeForGarbageCollected<LightEvent>(),
 													 nullptr, nullptr};
 
 template<>
@@ -5070,7 +4919,7 @@ static inline void wrapLightEvent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoScriptEvent = {3489836726103788008, "ScriptEvent", LuaUserData::computeSizeForGarbageCollected<ScriptEvent>(),
+LuaUserDataTypeInfo luaUserDataTypeInfoScriptEvent = {-6936063156053602985, "ScriptEvent", LuaUserData::computeSizeForGarbageCollected<ScriptEvent>(),
 													  nullptr, nullptr};
 
 template<>
@@ -5086,7 +4935,7 @@ static inline void wrapScriptEvent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoJitterMoveEvent = {4355224296558767909, "JitterMoveEvent",
+LuaUserDataTypeInfo luaUserDataTypeInfoJitterMoveEvent = {7031214453544803829, "JitterMoveEvent",
 														  LuaUserData::computeSizeForGarbageCollected<JitterMoveEvent>(), nullptr, nullptr};
 
 template<>
@@ -5161,7 +5010,7 @@ static inline void wrapJitterMoveEvent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoAnimationEvent = {4503690413763405782, "AnimationEvent",
+LuaUserDataTypeInfo luaUserDataTypeInfoAnimationEvent = {1582028356070398946, "AnimationEvent",
 														 LuaUserData::computeSizeForGarbageCollected<AnimationEvent>(), nullptr, nullptr};
 
 template<>
@@ -5177,7 +5026,7 @@ static inline void wrapAnimationEvent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoEventManager = {3270138098498806873, "EventManager",
+LuaUserDataTypeInfo luaUserDataTypeInfoEventManager = {-3459184637522950091, "EventManager",
 													   LuaUserData::computeSizeForGarbageCollected<EventManager>(), nullptr, nullptr};
 
 template<>

+ 1 - 15
AnKi/Script/Scene.xml

@@ -266,11 +266,6 @@ using WeakArraySceneNodePtr = WeakArray<SceneNode*>;
 
 		<class name="GlobalIlluminationProbeComponent">
 			<methods>
-				<method name="setBoxVolumeSize">
-					<args>
-						<arg>const Vec3&amp;</arg>
-					</args>
-				</method>
 				<method name="setCellSize">
 					<args>
 						<arg>F32</arg>
@@ -291,16 +286,7 @@ using WeakArraySceneNodePtr = WeakArray<SceneNode*>;
 		</class>
 
 		<class name="ReflectionProbeComponent">
-			<methods>
-				<method name="setBoxVolumeSize">
-					<args>
-						<arg>const Vec3&amp;</arg>
-					</args>
-				</method>
-				<method name="getBoxVolumeSize">
-					<return>Vec3</return>
-				</method>
-			</methods>
+			<methods></methods>
 		</class>
 
 		<class name="ParticleEmitterComponent">

+ 2 - 2
AnKi/Shaders/Include/GpuSceneTypes.h

@@ -134,7 +134,7 @@ struct GpuSceneReflectionProbe
 	U32 m_cubeTexture; ///< Bindless index of the reflection texture.
 
 	Vec3 m_aabbMin ANKI_CPP_CODE(= Vec3(kSomeFarDistance));
-	U32 m_uuid;
+	U32 m_uuid; ///< The UUID of that probe. If it's zero the GPU will not inform the CPU about it.
 
 	Vec3 m_aabbMax ANKI_CPP_CODE(= Vec3(kSomeFarDistance));
 	U32 m_componentArrayIndex; ///< Array in the CPU scene.
@@ -146,7 +146,7 @@ static_assert(sizeof(GpuSceneReflectionProbe) == kSizeof_GpuSceneReflectionProbe
 struct GpuSceneGlobalIlluminationProbe
 {
 	Vec3 m_aabbMin ANKI_CPP_CODE(= Vec3(kSomeFarDistance));
-	U32 m_uuid;
+	U32 m_uuid; ///< The UUID of that probe. If it's zero the GPU will not inform the CPU about it.
 
 	Vec3 m_aabbMax ANKI_CPP_CODE(= Vec3(kSomeFarDistance));
 	U32 m_componentArrayIndex; ///< Array in the CPU scene.

+ 4 - 7
Samples/PhysicsPlayground/Assets/Scene.lua

@@ -1,4 +1,4 @@
--- Generated by: C:\src\anki\out\build\x64-Debug-VK\Binaries\GltfImporter.exe PhysicsPlayground.gltf C:/src/anki/Samples/PhysicsPlayground/Assets/ -rpath Assets -texrpath Assets -v -light-scale 0.00116 -import-textures 0
+-- Generated by: C:\src\anki\out\build\x64-Release-VK\Binaries\GltfImporter.exe PhysicsPlayground.gltf C:/src/anki/Samples/PhysicsPlayground/Assets/ -rpath Assets -texrpath Assets -v -light-scale 0.00116 -import-textures 0
 local scene = getSceneGraph()
 local events = getEventManager()
 
@@ -793,36 +793,33 @@ node:setLocalTransform(trf)
 
 node = scene:newSceneNode("refl_probe.002")
 comp = node:newGlobalIlluminationProbeComponent()
-comp:setBoxVolumeSize(Vec3.new(256.996124, 256.996124, 256.996124))
 comp:setCellSize(32.000000)
 trf = Transform.new()
 trf:setOrigin(Vec3.new(-0.068372, 9.192602, -0.126609))
 rot = Mat3.new()
 rot:setAll(1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000)
 trf:setRotation(rot)
-trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
+trf:setScale(Vec3.new(128.498062, 128.498062, 128.498062))
 node:setLocalTransform(trf)
 
 node = scene:newSceneNode("refl_probe")
 comp = node:newReflectionProbeComponent()
-comp:setBoxVolumeSize(Vec3.new(268.223877, 268.223877, 268.223877))
 trf = Transform.new()
 trf:setOrigin(Vec3.new(0.000000, 9.113202, 0.000000))
 rot = Mat3.new()
 rot:setAll(1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000)
 trf:setRotation(rot)
-trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
+trf:setScale(Vec3.new(134.111938, 134.111938, 134.111938))
 node:setLocalTransform(trf)
 
 node = scene:newSceneNode("Cube.045")
 comp = node:newGlobalIlluminationProbeComponent()
-comp:setBoxVolumeSize(Vec3.new(15.025865, 6.952979, 12.903503))
 trf = Transform.new()
 trf:setOrigin(Vec3.new(39.731613, 2.915391, -28.049887))
 rot = Mat3.new()
 rot:setAll(1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000)
 trf:setRotation(rot)
-trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
+trf:setScale(Vec3.new(7.512932, 3.476489, 6.451752))
 node:setLocalTransform(trf)
 
 node = scene:newSceneNode("Skybox")

+ 1 - 2
Samples/SimpleScene/Assets/Scene.lua

@@ -110,11 +110,10 @@ node:setLocalTransform(trf)
 
 node = scene:newSceneNode("Cube.011")
 comp = node:newGlobalIlluminationProbeComponent()
-comp:setBoxVolumeSize(Vec3.new(11.824861, 11.571836, 11.040863))
 trf = Transform.new()
 trf:setOrigin(Vec3.new(-0.064907, 4.847455, -0.144611))
 rot = Mat3.new()
 rot:setAll(1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000)
 trf:setRotation(rot)
-trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
+trf:setScale(Vec3.new(5.912430, 5.785918, 5.520432))
 node:setLocalTransform(trf)

+ 32 - 5
Samples/SkeletalAnimation/Assets/Scene.lua

@@ -1,4 +1,4 @@
--- Generated by: C:\src\anki\out\build\x64-Debug-VK\Binaries\GltfImporter.exe droid.gltf C:/src/anki/Samples/SkeletalAnimation/Assets/ -rpath Assets -texrpath Assets -v
+-- Generated by: C:\src\anki\out\build\x64-Release-VK\Binaries\GltfImporter.exe droid.gltf C:/src/anki/Samples/SkeletalAnimation/Assets/ -rpath Assets -texrpath Assets -v
 local scene = getSceneGraph()
 local events = getEventManager()
 
@@ -15,24 +15,22 @@ node:setLocalTransform(trf)
 
 node = scene:newSceneNode("Cube")
 comp = node:newGlobalIlluminationProbeComponent()
-comp:setBoxVolumeSize(Vec3.new(19.286558, 19.286558, 19.286558))
 trf = Transform.new()
 trf:setOrigin(Vec3.new(0.000000, 11.057286, 0.000000))
 rot = Mat3.new()
 rot:setAll(1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000)
 trf:setRotation(rot)
-trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
+trf:setScale(Vec3.new(9.643279, 9.643279, 9.643279))
 node:setLocalTransform(trf)
 
 node = scene:newSceneNode("Cube.001")
 comp = node:newReflectionProbeComponent()
-comp:setBoxVolumeSize(Vec3.new(18.543777, 18.543777, 18.543777))
 trf = Transform.new()
 trf:setOrigin(Vec3.new(0.000000, 11.057286, 0.000000))
 rot = Mat3.new()
 rot:setAll(1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000)
 trf:setRotation(rot)
-trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
+trf:setScale(Vec3.new(9.271889, 9.271889, 9.271889))
 node:setLocalTransform(trf)
 
 node = scene:newSceneNode("room")
@@ -101,3 +99,32 @@ trf:setRotation(rot)
 trf:setScale(Vec3.new(9.000000, 9.000000, 9.000000))
 node:setLocalTransform(trf)
 
+node = scene:tryFindSceneNode("ArmL2")
+getEventManager():newAnimationEvent("Assets/float.001_ccb9eb33e30c8fa4.ankianim", "ArmL2", node)
+
+node = scene:tryFindSceneNode("Body")
+getEventManager():newAnimationEvent("Assets/float.001_ccb9eb33e30c8fa4.ankianim", "Body", node)
+
+node = scene:tryFindSceneNode("ArmL1")
+getEventManager():newAnimationEvent("Assets/float.001_ccb9eb33e30c8fa4.ankianim", "ArmL1", node)
+
+node = scene:tryFindSceneNode("ArmR2")
+getEventManager():newAnimationEvent("Assets/float.001_ccb9eb33e30c8fa4.ankianim", "ArmR2", node)
+
+node = scene:tryFindSceneNode("Flap1")
+getEventManager():newAnimationEvent("Assets/float.001_ccb9eb33e30c8fa4.ankianim", "Flap1", node)
+
+node = scene:tryFindSceneNode("PinceL")
+getEventManager():newAnimationEvent("Assets/float.001_ccb9eb33e30c8fa4.ankianim", "PinceL", node)
+
+node = scene:tryFindSceneNode("Flap2")
+getEventManager():newAnimationEvent("Assets/float.001_ccb9eb33e30c8fa4.ankianim", "Flap2", node)
+
+node = scene:tryFindSceneNode("ArmR1")
+getEventManager():newAnimationEvent("Assets/float.001_ccb9eb33e30c8fa4.ankianim", "ArmR1", node)
+
+node = scene:tryFindSceneNode("ArmR2")
+getEventManager():newAnimationEvent("Assets/wave_6cf284ed471bff3b.ankianim", "ArmR2", node)
+
+node = scene:tryFindSceneNode("ArmR1")
+getEventManager():newAnimationEvent("Assets/wave_6cf284ed471bff3b.ankianim", "ArmR1", node)

+ 9 - 17
Samples/Sponza/Assets/Scene.lua

@@ -1,4 +1,4 @@
--- Generated by: C:\src\anki\out\build\x64-Debug-VK\Binaries\GltfImporter.exe sponza_crytek_7_pbr_3.0.gltf C:/src/anki/Samples/Sponza/Assets/ -rpath Assets -texrpath Assets -lod-count 2 -light-scale 0.0001839 -v
+-- Generated by: C:\src\anki\out\build\x64-Release-VK\Binaries\GltfImporter.exe sponza_crytek_7_pbr_3.0.gltf C:/src/anki/Samples/Sponza/Assets/ -rpath Assets -texrpath Assets -lod-count 2 -light-scale 0.0001839 -v
 local scene = getSceneGraph()
 local events = getEventManager()
 
@@ -18,90 +18,82 @@ node:setLocalTransform(trf)
 
 node = scene:newSceneNode("Cube.011")
 comp = node:newGlobalIlluminationProbeComponent()
-comp:setBoxVolumeSize(Vec3.new(48.094303, 25.484703, 21.568947))
 trf = Transform.new()
 trf:setOrigin(Vec3.new(-1.055059, 12.490639, -0.594131))
 rot = Mat3.new()
 rot:setAll(1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000)
 trf:setRotation(rot)
-trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
+trf:setScale(Vec3.new(24.047152, 12.742352, 10.784473))
 node:setLocalTransform(trf)
 
 node = scene:newSceneNode("Cube.016")
 comp = node:newReflectionProbeComponent()
-comp:setBoxVolumeSize(Vec3.new(49.667831, 8.531807, 8.254385))
 trf = Transform.new()
 trf:setOrigin(Vec3.new(-1.002113, 11.476126, 6.485529))
 rot = Mat3.new()
 rot:setAll(1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000)
 trf:setRotation(rot)
-trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
+trf:setScale(Vec3.new(24.833916, 4.265903, 4.127192))
 node:setLocalTransform(trf)
 
 node = scene:newSceneNode("Cube.015")
 comp = node:newReflectionProbeComponent()
-comp:setBoxVolumeSize(Vec3.new(49.667831, 7.793900, 8.254385))
 trf = Transform.new()
 trf:setOrigin(Vec3.new(-1.002113, 3.652928, 6.485529))
 rot = Mat3.new()
 rot:setAll(1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000)
 trf:setRotation(rot)
-trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
+trf:setScale(Vec3.new(24.833916, 3.896950, 4.127192))
 node:setLocalTransform(trf)
 
 node = scene:newSceneNode("Cube.014")
 comp = node:newReflectionProbeComponent()
-comp:setBoxVolumeSize(Vec3.new(49.667831, 7.793900, 8.254385))
 trf = Transform.new()
 trf:setOrigin(Vec3.new(-1.002113, 3.652928, -0.044542))
 rot = Mat3.new()
 rot:setAll(1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000)
 trf:setRotation(rot)
-trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
+trf:setScale(Vec3.new(24.833916, 3.896950, 4.127192))
 node:setLocalTransform(trf)
 
 node = scene:newSceneNode("Cube.013")
 comp = node:newReflectionProbeComponent()
-comp:setBoxVolumeSize(Vec3.new(49.667831, 8.531807, 8.254385))
 trf = Transform.new()
 trf:setOrigin(Vec3.new(-1.002113, 11.476126, -0.044542))
 rot = Mat3.new()
 rot:setAll(1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000)
 trf:setRotation(rot)
-trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
+trf:setScale(Vec3.new(24.833916, 4.265903, 4.127192))
 node:setLocalTransform(trf)
 
 node = scene:newSceneNode("Cube.012")
 comp = node:newReflectionProbeComponent()
-comp:setBoxVolumeSize(Vec3.new(34.595001, 9.433331, 8.399577))
 trf = Transform.new()
 trf:setOrigin(Vec3.new(-1.839472, 20.151806, -0.637399))
 rot = Mat3.new()
 rot:setAll(1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000)
 trf:setRotation(rot)
-trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
+trf:setScale(Vec3.new(17.297501, 4.716665, 4.199789))
 node:setLocalTransform(trf)
 
 node = scene:newSceneNode("Cube.010")
 comp = node:newReflectionProbeComponent()
-comp:setBoxVolumeSize(Vec3.new(49.667831, 8.531807, 8.254385))
 trf = Transform.new()
 trf:setOrigin(Vec3.new(-1.002113, 11.476126, -7.632176))
 rot = Mat3.new()
 rot:setAll(1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000)
 trf:setRotation(rot)
-trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
+trf:setScale(Vec3.new(24.833916, 4.265903, 4.127192))
 node:setLocalTransform(trf)
 
 node = scene:newSceneNode("Cube.009")
 comp = node:newReflectionProbeComponent()
-comp:setBoxVolumeSize(Vec3.new(49.667831, 7.793900, 8.254385))
 trf = Transform.new()
 trf:setOrigin(Vec3.new(-1.002113, 3.652928, -7.632176))
 rot = Mat3.new()
 rot:setAll(1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000)
 trf:setRotation(rot)
-trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
+trf:setScale(Vec3.new(24.833916, 3.896950, 4.127192))
 node:setLocalTransform(trf)
 
 node = scene:newSceneNode("Camera.001")

BIN
Samples/Sponza/Assets/Suzanne_e3526e1428c0763c.ankimesh


BIN
Samples/Sponza/Assets/candle_3_l.001_9966f5242837df58.ankimesh


BIN
Samples/Sponza/Assets/fabric_b_e8dd2769dc642ab7.ankimesh


BIN
Samples/Sponza/Assets/leaf_3a245efd17475037.ankimesh


BIN
Samples/Sponza/Assets/sponza_277_a862a3463155379b.ankimesh


BIN
Samples/Sponza/Assets/sponza_381_d80b7e06247cf847.ankimesh