Browse Source

Port Sponza to the new format

Panagiotis Christopoulos Charitos 3 months ago
parent
commit
2a12285f94
100 changed files with 773 additions and 2161 deletions
  1. 2 1
      AnKi/Core/StatsSet.h
  2. 20 110
      AnKi/Importer/GltfImporter.cpp
  3. 1 4
      AnKi/Importer/GltfImporter.h
  4. 34 18
      AnKi/Scene/Components/BodyComponent.cpp
  5. 9 7
      AnKi/Scene/Components/BodyComponent.h
  6. 119 60
      AnKi/Scene/Components/MaterialComponent.cpp
  7. 5 0
      AnKi/Scene/Components/MaterialComponent.h
  8. 7 3
      AnKi/Scene/SceneGraph.cpp
  9. 230 31
      AnKi/Script/Scene.cpp
  10. 13 1
      AnKi/Script/Scene.xml
  11. BIN
      Samples/Sponza/Assets/Background_Roughness.ankitex
  12. 0 1410
      Samples/Sponza/Assets/Camera.001Action.003_67159cf18109479.ankianim
  13. BIN
      Samples/Sponza/Assets/Lion_Roughness.ankitex
  14. 0 27
      Samples/Sponza/Assets/MTL_sphere_f75b7f396643f2d.ankimtl
  15. 333 84
      Samples/Sponza/Assets/Scene.lua
  16. 0 8
      Samples/Sponza/Assets/Sphere_MTL_sphere_8df61cca01d9efcc.ankimdl
  17. BIN
      Samples/Sponza/Assets/Sphere_b335c223b7f61071.ankimesh
  18. BIN
      Samples/Sponza/Assets/Sponza_Ceiling_roughness_tga.ankitex
  19. BIN
      Samples/Sponza/Assets/Sponza_Column_b_roughness_tga.ankitex
  20. BIN
      Samples/Sponza/Assets/Sponza_Column_c_roughness_tga.ankitex
  21. BIN
      Samples/Sponza/Assets/Sponza_Curtain_Red_normal.ankitex
  22. BIN
      Samples/Sponza/Assets/Sponza_Curtain_Red_normal_tga_001.ankitex
  23. BIN
      Samples/Sponza/Assets/Sponza_Curtain_roughness_tga_001.ankitex
  24. BIN
      Samples/Sponza/Assets/Sponza_Details_metallic-Sponza_Details_roughness.ankitex
  25. BIN
      Samples/Sponza/Assets/Sponza_Details_normal.ankitex
  26. BIN
      Samples/Sponza/Assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex
  27. BIN
      Samples/Sponza/Assets/Sponza_FlagPole_normal.ankitex
  28. BIN
      Samples/Sponza/Assets/Sponza_FlagPole_roughness.ankitex
  29. BIN
      Samples/Sponza/Assets/Sponza_Floor_normal.ankitex
  30. BIN
      Samples/Sponza/Assets/Sponza_Floor_roughness.ankitex
  31. BIN
      Samples/Sponza/Assets/Sponza_Roof_normal.ankitex
  32. BIN
      Samples/Sponza/Assets/Sponza_Roof_roughness.ankitex
  33. BIN
      Samples/Sponza/Assets/Sponza_Thorn_roughness.ankitex
  34. 0 8
      Samples/Sponza/Assets/Suzanne_MTL_monkey_2913e2ee09fd26cb.ankimdl
  35. BIN
      Samples/Sponza/Assets/Suzanne_e3526e1428c0763c.ankimesh
  36. BIN
      Samples/Sponza/Assets/VaseHanging_normal_tga.ankitex
  37. BIN
      Samples/Sponza/Assets/VaseHanging_roughness_tga.ankitex
  38. BIN
      Samples/Sponza/Assets/VasePlant_normal.ankitex
  39. BIN
      Samples/Sponza/Assets/VaseRound_normal.ankitex
  40. BIN
      Samples/Sponza/Assets/VaseRound_roughness.ankitex
  41. BIN
      Samples/Sponza/Assets/Vase_roughness.ankitex
  42. 0 8
      Samples/Sponza/Assets/arc_2_arch.001_7f6cd4617500b9e.ankimdl
  43. 0 8
      Samples/Sponza/Assets/arch_a_arch_ee9218d363e2c47c.ankimdl
  44. 0 8
      Samples/Sponza/Assets/arch_support_big_column_c_b5e8839cd276d81.ankimdl
  45. 0 8
      Samples/Sponza/Assets/arch_support_med_column_c_7324dbf874b0902d.ankimdl
  46. 0 8
      Samples/Sponza/Assets/arch_support_tiny_column_c_74601fe6ddc602fd.ankimdl
  47. BIN
      Samples/Sponza/Assets/background.ankitex
  48. BIN
      Samples/Sponza/Assets/background_ddn.ankitex
  49. BIN
      Samples/Sponza/Assets/candle_3_l.001_9966f5242837df58.ankimesh
  50. 0 12
      Samples/Sponza/Assets/candle_3_l.001_MTL_Candle_MTL_Flame_9eab681a977f1ff8.ankimdl
  51. 0 8
      Samples/Sponza/Assets/carpet_fabric_a_7b2d33bd44d3c83a.ankimdl
  52. 0 8
      Samples/Sponza/Assets/carpet_fabric_d_327fde8eebe28165.ankimdl
  53. 0 8
      Samples/Sponza/Assets/carpet_fabric_e_1daa4785c181ff7c.ankimdl
  54. 0 8
      Samples/Sponza/Assets/ceiling_ceiling_652d2c332b14f7c1.ankimdl
  55. BIN
      Samples/Sponza/Assets/chain_texture_tga.ankitex
  56. 0 8
      Samples/Sponza/Assets/column_a.001_column_a_33375155773963c4.ankimdl
  57. 0 8
      Samples/Sponza/Assets/column_a_column_a_e2bba72dc764b614.ankimdl
  58. 0 8
      Samples/Sponza/Assets/column_b_column_b_2147575ec1137d95.ankimdl
  59. 0 8
      Samples/Sponza/Assets/column_b_top_column_b_5a662a93fda5781c.ankimdl
  60. 0 8
      Samples/Sponza/Assets/column_c_column_c_8cfb4773e7984c6c.ankimdl
  61. 0 8
      Samples/Sponza/Assets/column_c_small_column_b_60ac9c1e9bb600f6.ankimdl
  62. 0 8
      Samples/Sponza/Assets/column_c_small_top_column_b_212d13057d434c4c.ankimdl
  63. 0 8
      Samples/Sponza/Assets/column_c_square_column_c_31141c63525ac8c7.ankimdl
  64. 0 1
      Samples/Sponza/Assets/convert_textures.sh
  65. 0 8
      Samples/Sponza/Assets/door_b_details_8719c311905b9f09.ankimdl
  66. BIN
      Samples/Sponza/Assets/fabric_a_945c29fc221550fb.ankimesh
  67. 0 8
      Samples/Sponza/Assets/fabric_a_fabric_c_c4b70d2083f41709.ankimdl
  68. BIN
      Samples/Sponza/Assets/fabric_b_e8dd2769dc642ab7.ankimesh
  69. 0 8
      Samples/Sponza/Assets/fabric_b_fabric_f_3f1537f39a3f726f.ankimdl
  70. 0 8
      Samples/Sponza/Assets/flag_pole_flagpole_aaa6bb6e0416a890.ankimdl
  71. 0 8
      Samples/Sponza/Assets/hanging_vase_vase_hanging_706736339658bc85.ankimdl
  72. BIN
      Samples/Sponza/Assets/leaf_3a245efd17475037.ankimesh
  73. 0 8
      Samples/Sponza/Assets/leaf_b_leaf_582f73514dcafca7.ankimdl
  74. 0 8
      Samples/Sponza/Assets/leaf_leaf_81e750c893cfd021.ankimdl
  75. BIN
      Samples/Sponza/Assets/lion.ankitex
  76. BIN
      Samples/Sponza/Assets/lion_ddn.ankitex
  77. 0 8
      Samples/Sponza/Assets/lion_frame_lion_stand_1508a85aa76feee9.ankimdl
  78. 0 8
      Samples/Sponza/Assets/lion_lion_4d0c52a46bec131.ankimdl
  79. 0 8
      Samples/Sponza/Assets/list_b_bricks_ce9a437a3dc16846.ankimdl
  80. 0 8
      Samples/Sponza/Assets/list_bricks_ed8eb2090688095e.ankimdl
  81. 0 8
      Samples/Sponza/Assets/marble_list_arch_608c34e5ea65c976.ankimdl
  82. 0 8
      Samples/Sponza/Assets/metal_rod_flagpole_9479a6e38cbe7f92.ankimdl
  83. 0 8
      Samples/Sponza/Assets/rod_end_flagpole_dabbea129c33a92d.ankimdl
  84. 0 8
      Samples/Sponza/Assets/round_window_arch.001_fd6a8a3b62ac68f8.ankimdl
  85. 0 8
      Samples/Sponza/Assets/small_window_inner_ceiling_5c90e4976a019db.ankimdl
  86. 0 8
      Samples/Sponza/Assets/small_window_outter_arch.001_a7b87e3effcac7cc.ankimdl
  87. 0 8
      Samples/Sponza/Assets/sponza_00_leaf_8971879d70912750.ankimdl
  88. 0 8
      Samples/Sponza/Assets/sponza_05_bricks_18a0c6948fe21908.ankimdl
  89. 0 8
      Samples/Sponza/Assets/sponza_06_bricks_3bf0e0da0e9e2662.ankimdl
  90. 0 8
      Samples/Sponza/Assets/sponza_117_floor_54a39f24ac527941.ankimdl
  91. BIN
      Samples/Sponza/Assets/sponza_122_a88206b9ae16e15.ankimesh
  92. 0 8
      Samples/Sponza/Assets/sponza_122_arch.001_14fd292eefa0a1aa.ankimdl
  93. 0 8
      Samples/Sponza/Assets/sponza_17_arch_1e1cd51ca1d1f70d.ankimdl
  94. 0 8
      Samples/Sponza/Assets/sponza_18_floor_567a5d17476d6a45.ankimdl
  95. 0 8
      Samples/Sponza/Assets/sponza_257_ceiling_4fe40e1d7c22b53.ankimdl
  96. 0 8
      Samples/Sponza/Assets/sponza_258_bricks_450cd1e90d9e98cd.ankimdl
  97. 0 8
      Samples/Sponza/Assets/sponza_277_leaf_1925984a6862a79d.ankimdl
  98. 0 8
      Samples/Sponza/Assets/sponza_278_leaf_a6f3f415115d14d4.ankimdl
  99. 0 8
      Samples/Sponza/Assets/sponza_279_leaf_1869e5ec81c20a1d.ankimdl
  100. 0 8
      Samples/Sponza/Assets/sponza_280_leaf_21937133f5eb6d92.ankimdl

+ 2 - 1
AnKi/Core/StatsSet.h

@@ -40,13 +40,14 @@ enum class StatCategory : U8
 	kGpuMisc,
 	kGpuMisc,
 	kRenderer,
 	kRenderer,
 	kGr,
 	kGr,
+	kScene,
 	kMisc,
 	kMisc,
 
 
 	kCount,
 	kCount,
 };
 };
 
 
 inline constexpr Array<CString, U32(StatCategory::kCount)> kStatCategoryTexts = {"Time",     "CPU memory", "GPU memory", "GPU misc",
 inline constexpr Array<CString, U32(StatCategory::kCount)> kStatCategoryTexts = {"Time",     "CPU memory", "GPU memory", "GPU misc",
-																				 "Renderer", "GFX API",    "Misc"};
+																				 "Renderer", "GFX API",    "Scene",      "Misc"};
 
 
 /// A stats counter.
 /// A stats counter.
 class StatCounter
 class StatCounter

+ 20 - 110
AnKi/Importer/GltfImporter.cpp

@@ -406,30 +406,6 @@ Error GltfImporter::writeAll()
 		}
 		}
 	}
 	}
 
 
-	for(auto& req : m_modelImportRequests)
-	{
-		if(m_jobManager)
-		{
-			m_jobManager->dispatchTask([&req]([[maybe_unused]] U32 threadId) {
-				Error err = req.m_importer->m_errorInThread.load();
-
-				if(!err)
-				{
-					err = req.m_importer->writeModel(*req.m_value);
-				}
-
-				if(err)
-				{
-					req.m_importer->m_errorInThread.store(err._getCode());
-				}
-			});
-		}
-		else
-		{
-			ANKI_CHECK(writeModel(*req.m_value));
-		}
-	}
-
 	if(m_jobManager)
 	if(m_jobManager)
 	{
 	{
 		m_jobManager->waitForAllTasksToFinish();
 		m_jobManager->waitForAllTasksToFinish();
@@ -829,7 +805,7 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
 		}
 		}
 		else
 		else
 		{
 		{
-			// Model node
+			// Mesh+Material node
 
 
 			ANKI_CHECK(getExtra(extras, "no_rt", extraValueBool, extraFound));
 			ANKI_CHECK(getExtra(extras, "no_rt", extraValueBool, extraFound));
 			const Bool skipRt = (extraFound) ? extraValueBool : false;
 			const Bool skipRt = (extraFound) ? extraValueBool : false;
@@ -855,12 +831,10 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
 					addRequest<const cgltf_skin*>(node.skin, m_skinImportRequests);
 					addRequest<const cgltf_skin*>(node.skin, m_skinImportRequests);
 				}
 				}
 
 
-				addRequest<const cgltf_mesh*>(node.mesh, m_modelImportRequests);
-
 				ImporterHashMap<CString, ImporterString>::Iterator it2;
 				ImporterHashMap<CString, ImporterString>::Iterator it2;
 				const Bool selfCollision = (it2 = extras.find("collision_mesh")) != extras.getEnd() && *it2 == "self";
 				const Bool selfCollision = (it2 = extras.find("collision_mesh")) != extras.getEnd() && *it2 == "self";
 
 
-				ANKI_CHECK(writeModelNode(node, parentExtras));
+				ANKI_CHECK(writeMeshMaterialNode(node, parentExtras));
 
 
 				ANKI_CHECK(writeTransform(parentTrf.combineTransformations(localTrf)));
 				ANKI_CHECK(writeTransform(parentTrf.combineTransformations(localTrf)));
 
 
@@ -870,7 +844,7 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
 
 
 					const ImporterString meshFname = computeMeshResourceFilename(*node.mesh);
 					const ImporterString meshFname = computeMeshResourceFilename(*node.mesh);
 
 
-					ANKI_CHECK(m_sceneFile.writeText("comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromModelComponent)\n"));
+					ANKI_CHECK(m_sceneFile.writeText("comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)\n"));
 					ANKI_CHECK(m_sceneFile.writeText("comp:teleportTo(trf:getOrigin(), trf:getRotation())\n"));
 					ANKI_CHECK(m_sceneFile.writeText("comp:teleportTo(trf:getOrigin(), trf:getRotation())\n"));
 				}
 				}
 			}
 			}
@@ -919,59 +893,6 @@ Error GltfImporter::writeTransform(const Transform& trf)
 	return Error::kNone;
 	return Error::kNone;
 }
 }
 
 
-Error GltfImporter::writeModel(const cgltf_mesh& mesh) const
-{
-	const ImporterString modelFname = computeModelResourceFilename(mesh);
-	ANKI_IMPORTER_LOGV("Importing model %s", modelFname.cstr());
-
-	ImporterHashMap<CString, ImporterString> extras;
-	ANKI_CHECK(appendExtras(mesh.extras, extras));
-
-	File file;
-	ImporterString modelFullFname;
-	modelFullFname.sprintf("%s/%s", m_outDir.cstr(), modelFname.cstr());
-	ANKI_CHECK(file.open(modelFullFname, FileOpenFlag::kWrite));
-
-	ANKI_CHECK(file.writeText("<model>\n"));
-	ANKI_CHECK(file.writeText("\t<modelPatches>\n"));
-
-	for(U32 primIdx = 0; primIdx < mesh.primitives_count; ++primIdx)
-	{
-		ANKI_CHECK(file.writeText("\t\t<modelPatch>\n"));
-
-		const ImporterString meshFname = computeMeshResourceFilename(mesh);
-		if(mesh.primitives_count == 1)
-		{
-			ANKI_CHECK(file.writeTextf("\t\t\t<mesh>%s%s</mesh>\n", m_rpath.cstr(), meshFname.cstr()));
-		}
-		else
-		{
-			ANKI_CHECK(file.writeTextf("\t\t\t<mesh subMeshIndex=\"%u\">%s%s</mesh>\n", primIdx, m_rpath.cstr(), meshFname.cstr()));
-		}
-
-		ImporterHashMap<CString, ImporterString> materialExtras;
-		ANKI_CHECK(appendExtras(mesh.primitives[primIdx].material->extras, materialExtras));
-		auto mtlOverride = materialExtras.find("material_override");
-		if(mtlOverride != materialExtras.getEnd())
-		{
-			ANKI_CHECK(file.writeTextf("\t\t\t<material>%s</material>\n", mtlOverride->cstr()));
-		}
-		else
-		{
-			const ImporterString mtlFname = computeMaterialResourceFilename(*mesh.primitives[primIdx].material);
-			ANKI_CHECK(file.writeTextf("\t\t\t<material>%s%s</material>\n", m_rpath.cstr(), mtlFname.cstr()));
-		}
-
-		ANKI_CHECK(file.writeText("\t\t</modelPatch>\n"));
-	}
-
-	ANKI_CHECK(file.writeText("\t</modelPatches>\n"));
-
-	ANKI_CHECK(file.writeText("</model>\n"));
-
-	return Error::kNone;
-}
-
 Error GltfImporter::writeSkeleton(const cgltf_skin& skin) const
 Error GltfImporter::writeSkeleton(const cgltf_skin& skin) const
 {
 {
 	ImporterString fname;
 	ImporterString fname;
@@ -1196,48 +1117,37 @@ Error GltfImporter::writeCamera(const cgltf_node& node, [[maybe_unused]] const I
 	return Error::kNone;
 	return Error::kNone;
 }
 }
 
 
-Error GltfImporter::writeModelNode(const cgltf_node& node, const ImporterHashMap<CString, ImporterString>& parentExtras)
+Error GltfImporter::writeMeshMaterialNode(const cgltf_node& node, const ImporterHashMap<CString, ImporterString>& parentExtras)
 {
 {
-	ANKI_IMPORTER_LOGV("Importing model node %s", getNodeName(node).cstr());
+	ANKI_IMPORTER_LOGV("Importing mesh&material node %s", getNodeName(node).cstr());
 
 
 	ImporterHashMap<CString, ImporterString> extras(parentExtras);
 	ImporterHashMap<CString, ImporterString> extras(parentExtras);
 	ANKI_CHECK(appendExtras(node.extras, extras));
 	ANKI_CHECK(appendExtras(node.extras, extras));
 
 
-	const ImporterString modelFname = computeModelResourceFilename(*node.mesh);
-
 	ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newSceneNode(\"%s\")\n", getNodeName(node).cstr()));
 	ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newSceneNode(\"%s\")\n", getNodeName(node).cstr()));
-	ANKI_CHECK(m_sceneFile.writeTextf("node:newModelComponent():loadModelResource(\"%s%s\")\n", m_rpath.cstr(), modelFname.cstr()));
 
 
-	if(node.skin)
-	{
-		ANKI_CHECK(m_sceneFile.writeTextf("node:newSkinComponent():loadSkeletonResource(\"%s%s\")\n", m_rpath.cstr(),
-										  computeSkeletonResourceFilename(*node.skin).cstr()));
-	}
+	const cgltf_mesh& mesh = *node.mesh;
 
 
-	return Error::kNone;
-}
-
-ImporterString GltfImporter::computeModelResourceFilename(const cgltf_mesh& mesh) const
-{
-	ImporterStringList list;
-
-	list.pushBack(mesh.name);
+	ANKI_CHECK(
+		m_sceneFile.writeTextf("node:newMeshComponent():setMeshFilename(\"%s%s\")\n", m_rpath.cstr(), computeMeshResourceFilename(mesh).cstr()));
 
 
-	for(U i = 0; i < mesh.primitives_count; ++i)
+	for(U32 primIdx = 0; primIdx < mesh.primitives_count; ++primIdx)
 	{
 	{
-		const Char* mtlName = (mesh.primitives[i].material) ? mesh.primitives[i].material->name : "UnamedMtl";
-		list.pushBackSprintf("_%s", mtlName);
-	}
+		ANKI_CHECK(m_sceneFile.writeText("mtlc = node:newMaterialComponent()\n"));
 
 
-	ImporterString joined;
-	list.join("", joined);
+		ANKI_CHECK(m_sceneFile.writeTextf("mtlc:setMaterialFilename(\"%s%s\")\n", m_rpath.cstr(),
+										  computeMaterialResourceFilename(*mesh.primitives[primIdx].material).cstr()));
 
 
-	const U64 hash = computeHash(joined.getBegin(), joined.getLength());
+		ANKI_CHECK(m_sceneFile.writeTextf("mtlc:setSubmeshIndex(%d)\n", primIdx));
+	}
 
 
-	ImporterString out;
-	out.sprintf("%.64s_%" PRIx64 ".ankimdl", joined.cstr(), hash); // Limit the filename size
+	if(node.skin)
+	{
+		ANKI_CHECK(m_sceneFile.writeTextf("node:newSkinComponent():loadSkeletonResource(\"%s%s\")\n", m_rpath.cstr(),
+										  computeSkeletonResourceFilename(*node.skin).cstr()));
+	}
 
 
-	return out;
+	return Error::kNone;
 }
 }
 
 
 ImporterString GltfImporter::computeMeshResourceFilename(const cgltf_mesh& mesh) const
 ImporterString GltfImporter::computeMeshResourceFilename(const cgltf_mesh& mesh) const

+ 1 - 4
AnKi/Importer/GltfImporter.h

@@ -103,7 +103,6 @@ private:
 	ImporterDynamicArray<ImportRequest<const cgltf_mesh*>> m_meshImportRequests;
 	ImporterDynamicArray<ImportRequest<const cgltf_mesh*>> m_meshImportRequests;
 	ImporterDynamicArray<ImportRequest<MaterialImportRequest>> m_materialImportRequests;
 	ImporterDynamicArray<ImportRequest<MaterialImportRequest>> m_materialImportRequests;
 	ImporterDynamicArray<ImportRequest<const cgltf_skin*>> m_skinImportRequests;
 	ImporterDynamicArray<ImportRequest<const cgltf_skin*>> m_skinImportRequests;
-	ImporterDynamicArray<ImportRequest<const cgltf_mesh*>> m_modelImportRequests;
 
 
 	// Misc
 	// Misc
 	template<typename T>
 	template<typename T>
@@ -166,7 +165,6 @@ private:
 	static U32 getMeshTotalVertexCount(const cgltf_mesh& mesh);
 	static U32 getMeshTotalVertexCount(const cgltf_mesh& mesh);
 
 
 	// Compute filenames for various resources. Use a hash to solve the casing issue and remove unwanted special chars
 	// Compute filenames for various resources. Use a hash to solve the casing issue and remove unwanted special chars
-	ImporterString computeModelResourceFilename(const cgltf_mesh& mesh) const;
 	ImporterString computeMeshResourceFilename(const cgltf_mesh& mesh) const;
 	ImporterString computeMeshResourceFilename(const cgltf_mesh& mesh) const;
 	ImporterString computeMaterialResourceFilename(const cgltf_material& mtl) const;
 	ImporterString computeMaterialResourceFilename(const cgltf_material& mtl) const;
 	ImporterString computeAnimationResourceFilename(const cgltf_animation& anim) const;
 	ImporterString computeAnimationResourceFilename(const cgltf_animation& anim) const;
@@ -177,7 +175,6 @@ private:
 	Error writeMeshInternal(const cgltf_mesh& mesh) const;
 	Error writeMeshInternal(const cgltf_mesh& mesh) const;
 	Error writeMaterial(const cgltf_material& mtl, Bool writeRayTracing) const;
 	Error writeMaterial(const cgltf_material& mtl, Bool writeRayTracing) const;
 	Error writeMaterialInternal(const cgltf_material& mtl, Bool writeRayTracing) const;
 	Error writeMaterialInternal(const cgltf_material& mtl, Bool writeRayTracing) const;
-	Error writeModel(const cgltf_mesh& mesh) const;
 	Error writeAnimation(const cgltf_animation& anim);
 	Error writeAnimation(const cgltf_animation& anim);
 	Error writeSkeleton(const cgltf_skin& skin) const;
 	Error writeSkeleton(const cgltf_skin& skin) const;
 
 
@@ -186,7 +183,7 @@ private:
 	Error visitNode(const cgltf_node& node, const Transform& parentTrf, const ImporterHashMap<CString, ImporterString>& parentExtras);
 	Error visitNode(const cgltf_node& node, const Transform& parentTrf, const ImporterHashMap<CString, ImporterString>& parentExtras);
 	Error writeLight(const cgltf_node& node, const ImporterHashMap<CString, ImporterString>& parentExtras);
 	Error writeLight(const cgltf_node& node, const ImporterHashMap<CString, ImporterString>& parentExtras);
 	Error writeCamera(const cgltf_node& node, const ImporterHashMap<CString, ImporterString>& parentExtras);
 	Error writeCamera(const cgltf_node& node, const ImporterHashMap<CString, ImporterString>& parentExtras);
-	Error writeModelNode(const cgltf_node& node, const ImporterHashMap<CString, ImporterString>& parentExtras);
+	Error writeMeshMaterialNode(const cgltf_node& node, const ImporterHashMap<CString, ImporterString>& parentExtras);
 };
 };
 /// @}
 /// @}
 
 

+ 34 - 18
AnKi/Scene/Components/BodyComponent.cpp

@@ -4,13 +4,13 @@
 // http://www.anki3d.org/LICENSE
 // http://www.anki3d.org/LICENSE
 
 
 #include <AnKi/Scene/Components/BodyComponent.h>
 #include <AnKi/Scene/Components/BodyComponent.h>
-#include <AnKi/Scene/Components/ModelComponent.h>
+#include <AnKi/Scene/Components/MeshComponent.h>
 #include <AnKi/Scene/SceneNode.h>
 #include <AnKi/Scene/SceneNode.h>
 #include <AnKi/Scene/SceneGraph.h>
 #include <AnKi/Scene/SceneGraph.h>
 #include <AnKi/Resource/CpuMeshResource.h>
 #include <AnKi/Resource/CpuMeshResource.h>
 #include <AnKi/Resource/ResourceManager.h>
 #include <AnKi/Resource/ResourceManager.h>
 #include <AnKi/Physics/PhysicsWorld.h>
 #include <AnKi/Physics/PhysicsWorld.h>
-#include <AnKi/Resource/ModelResource.h>
+#include <AnKi/Resource/MeshResource.h>
 
 
 namespace anki {
 namespace anki {
 
 
@@ -38,16 +38,17 @@ void BodyComponent::teleportTo(Vec3 position, const Mat3& rotation)
 
 
 void BodyComponent::update(SceneComponentUpdateInfo& info, Bool& updated)
 void BodyComponent::update(SceneComponentUpdateInfo& info, Bool& updated)
 {
 {
-	if(m_shapeType == BodyComponentCollisionShapeType::kCount
-	   || (m_shapeType == BodyComponentCollisionShapeType::kFromModelComponent && !m_mesh.m_modelc))
+	const Bool meshIsValid = m_mesh.m_meshc && m_mesh.m_meshc->isEnabled();
+	if(m_shapeType == BodyComponentCollisionShapeType::kCount || (m_shapeType == BodyComponentCollisionShapeType::kFromMeshComponent && !meshIsValid))
 	{
 	{
+		// It's invalid, return
 		ANKI_ASSERT(!m_body);
 		ANKI_ASSERT(!m_body);
 		return;
 		return;
 	}
 	}
 
 
-	const Bool shapeDirty =
-		!m_body.isCreated()
-		|| (m_shapeType == BodyComponentCollisionShapeType::kFromModelComponent && m_mesh.m_modelc->getUuid() != m_mesh.m_modelcUuid);
+	const Bool shapeDirty = !m_body.isCreated()
+							|| (m_shapeType == BodyComponentCollisionShapeType::kFromMeshComponent
+								&& m_mesh.m_meshc->getMeshResource().getUuid() != m_mesh.m_meshResourceUuid);
 	if(shapeDirty)
 	if(shapeDirty)
 	{
 	{
 		updated = true;
 		updated = true;
@@ -64,7 +65,8 @@ void BodyComponent::update(SceneComponentUpdateInfo& info, Bool& updated)
 			init.m_transform = m_node->getLocalTransform();
 			init.m_transform = m_node->getLocalTransform();
 		}
 		}
 
 
-		if(m_mass == 0.0f)
+		const Bool isStatic = m_mass == 0.0f;
+		if(isStatic)
 		{
 		{
 			init.m_layer = PhysicsLayer::kStatic;
 			init.m_layer = PhysicsLayer::kStatic;
 		}
 		}
@@ -73,14 +75,14 @@ void BodyComponent::update(SceneComponentUpdateInfo& info, Bool& updated)
 			init.m_layer = PhysicsLayer::kMoving;
 			init.m_layer = PhysicsLayer::kMoving;
 		}
 		}
 
 
-		if(m_shapeType == BodyComponentCollisionShapeType::kFromModelComponent)
+		if(m_shapeType == BodyComponentCollisionShapeType::kFromMeshComponent)
 		{
 		{
-			m_mesh.m_modelcUuid = m_mesh.m_modelc->getUuid();
+			const MeshResource& meshResource = m_mesh.m_meshc->getMeshResource();
+			m_mesh.m_meshResourceUuid = meshResource.getUuid();
 
 
-			if(m_mesh.m_modelc->getModelResource()->getModelPatches()[0].getMesh()->getOrCreateCollisionShape(m_mass == 0.0f, kMaxLodCount - 1,
-																											  m_collisionShape))
+			if(meshResource.getOrCreateCollisionShape(isStatic, kMaxLodCount - 1, m_collisionShape))
 			{
 			{
-				ANKI_SCENE_LOGE("BodyComponent::update failed");
+				ANKI_SCENE_LOGE("BodyComponent::update failed due to error");
 				return;
 				return;
 			}
 			}
 		}
 		}
@@ -132,19 +134,33 @@ void BodyComponent::update(SceneComponentUpdateInfo& info, Bool& updated)
 
 
 void BodyComponent::onOtherComponentRemovedOrAdded(SceneComponent* other, Bool added)
 void BodyComponent::onOtherComponentRemovedOrAdded(SceneComponent* other, Bool added)
 {
 {
-	if(other->getType() != SceneComponentType::kModel)
+	if(other->getType() != SceneComponentType::kMesh)
 	{
 	{
 		return;
 		return;
 	}
 	}
 
 
-	if(added && m_mesh.m_modelc == nullptr)
+	if(added && m_mesh.m_meshc == nullptr)
 	{
 	{
-		m_mesh.m_modelc = static_cast<ModelComponent*>(other);
+		m_mesh.m_meshc = static_cast<MeshComponent*>(other);
+		if(m_shapeType == BodyComponentCollisionShapeType::kFromMeshComponent)
+		{
+			cleanup();
+		}
 	}
 	}
-	else if(!added && m_mesh.m_modelc == other)
+	else if(!added && m_mesh.m_meshc == other)
 	{
 	{
-		m_mesh.m_modelc = nullptr;
+		m_mesh.m_meshc = nullptr;
+		if(m_shapeType == BodyComponentCollisionShapeType::kFromMeshComponent)
+		{
+			cleanup();
+		}
 	}
 	}
 }
 }
 
 
+void BodyComponent::cleanup()
+{
+	m_body.reset(nullptr);
+	m_collisionShape.reset(nullptr);
+}
+
 } // end namespace anki
 } // end namespace anki

+ 9 - 7
AnKi/Scene/Components/BodyComponent.h

@@ -17,7 +17,7 @@ namespace anki {
 /// @memberof BodyComponent
 /// @memberof BodyComponent
 enum class BodyComponentCollisionShapeType : U8
 enum class BodyComponentCollisionShapeType : U8
 {
 {
-	kFromModelComponent, ///< Set the collision shape by looking at the ModelComponent's meshes.
+	kFromMeshComponent, ///< Set the collision shape by looking at the MeshComponent's mesh.
 	kAabb,
 	kAabb,
 	kSphere,
 	kSphere,
 
 
@@ -41,7 +41,7 @@ public:
 			m_box.m_extend = extend;
 			m_box.m_extend = extend;
 			if(m_shapeType == BodyComponentCollisionShapeType::kAabb)
 			if(m_shapeType == BodyComponentCollisionShapeType::kAabb)
 			{
 			{
-				m_body.reset(nullptr); // Force recreate
+				cleanup(); // Force recreate
 			}
 			}
 		}
 		}
 	}
 	}
@@ -58,7 +58,7 @@ public:
 			m_sphere.m_radius = radius;
 			m_sphere.m_radius = radius;
 			if(m_shapeType == BodyComponentCollisionShapeType::kSphere)
 			if(m_shapeType == BodyComponentCollisionShapeType::kSphere)
 			{
 			{
-				m_body.reset(nullptr); // Force recreate
+				cleanup(); // Force recreate
 			}
 			}
 		}
 		}
 	}
 	}
@@ -73,7 +73,7 @@ public:
 		if(ANKI_EXPECT(type <= BodyComponentCollisionShapeType::kCount) && m_shapeType != type)
 		if(ANKI_EXPECT(type <= BodyComponentCollisionShapeType::kCount) && m_shapeType != type)
 		{
 		{
 			m_shapeType = type;
 			m_shapeType = type;
-			m_body.reset(nullptr); // Force recreate
+			cleanup(); // Force recreate
 		}
 		}
 	}
 	}
 
 
@@ -82,7 +82,7 @@ public:
 		if(ANKI_EXPECT(mass >= 0.0f) && m_mass != mass)
 		if(ANKI_EXPECT(mass >= 0.0f) && m_mass != mass)
 		{
 		{
 			m_mass = mass;
 			m_mass = mass;
-			m_body.reset(nullptr); // Force recreate
+			cleanup(); // Force recreate
 		}
 		}
 	}
 	}
 
 
@@ -118,8 +118,8 @@ private:
 	class
 	class
 	{
 	{
 	public:
 	public:
-		ModelComponent* m_modelc = nullptr;
-		U32 m_modelcUuid = 0;
+		MeshComponent* m_meshc = nullptr;
+		U32 m_meshResourceUuid = 0;
 	} m_mesh;
 	} m_mesh;
 
 
 	class
 	class
@@ -151,6 +151,8 @@ private:
 	void update(SceneComponentUpdateInfo& info, Bool& updated) override;
 	void update(SceneComponentUpdateInfo& info, Bool& updated) override;
 
 
 	void onOtherComponentRemovedOrAdded(SceneComponent* other, Bool added) override;
 	void onOtherComponentRemovedOrAdded(SceneComponent* other, Bool added) override;
+
+	void cleanup();
 };
 };
 /// @}
 /// @}
 
 

+ 119 - 60
AnKi/Scene/Components/MaterialComponent.cpp

@@ -39,7 +39,8 @@ void MaterialComponent::setMaterialFilename(CString fname)
 		return;
 		return;
 	}
 	}
 
 
-	m_resource = newRsrc;
+	m_resource = std::move(newRsrc);
+	m_castsShadow = m_resource->castsShadow();
 	m_resourceDirty = true;
 	m_resourceDirty = true;
 }
 }
 
 
@@ -56,34 +57,50 @@ void MaterialComponent::onOtherComponentRemovedOrAdded(SceneComponent* other, Bo
 {
 {
 	ANKI_ASSERT(other);
 	ANKI_ASSERT(other);
 
 
-	if(other->getType() != SceneComponentType::kSkin && other->getType() != SceneComponentType::kMesh)
+	if(other->getType() == SceneComponentType::kSkin)
 	{
 	{
-		return;
+		const Bool alreadyHasSkinComponent = m_skinComponent != nullptr;
+		if(added && !alreadyHasSkinComponent)
+		{
+			m_skinComponent = static_cast<SkinComponent*>(other);
+			m_skinDirty = true;
+		}
+		else if(!added && other == m_skinComponent)
+		{
+			m_skinComponent = nullptr;
+			m_skinDirty = true;
+		}
 	}
 	}
 
 
-	const Bool alreadyHasSkinComponent = m_skinComponent != nullptr;
-	if(added && !alreadyHasSkinComponent)
+	if(other->getType() == SceneComponentType::kMesh)
 	{
 	{
-		m_skinComponent = static_cast<SkinComponent*>(other);
-		m_skinDirty = true;
-	}
-	else if(!added && other == m_skinComponent)
-	{
-		m_skinComponent = nullptr;
-		m_skinDirty = true;
+		const Bool alreadyHasMeshComponent = m_meshComponent != nullptr;
+		if(added && !alreadyHasMeshComponent)
+		{
+			m_meshComponent = static_cast<MeshComponent*>(other);
+			m_meshComponentDirty = true;
+		}
+		else if(!added && other == m_meshComponent)
+		{
+			m_meshComponent = nullptr;
+			m_meshComponentDirty = true;
+		}
 	}
 	}
+}
 
 
-	const Bool alreadyHasMeshComponent = m_meshComponent != nullptr;
-	if(added && !alreadyHasMeshComponent)
-	{
-		m_meshComponent = static_cast<MeshComponent*>(other);
-		m_meshComponentDirty = true;
-	}
-	else if(!added && other == m_meshComponent)
+Aabb MaterialComponent::computeAabb(U32 submeshIndex, const SceneNode& node) const
+{
+	U32 firstIndex, indexCount, firstMeshlet, meshletCount;
+	Aabb aabbLocal;
+	m_meshComponent->getMeshResource().getSubMeshInfo(0, submeshIndex, firstIndex, indexCount, firstMeshlet, meshletCount, aabbLocal);
+
+	if(m_skinComponent)
 	{
 	{
-		m_meshComponent = nullptr;
-		m_meshComponentDirty = true;
+		aabbLocal = m_skinComponent->getBoneBoundingVolumeLocalSpace().getCompoundShape(aabbLocal);
 	}
 	}
+
+	const Aabb aabbWorld = aabbLocal.getTransformed(node.getWorldTransform());
+	return aabbWorld;
 }
 }
 
 
 void MaterialComponent::update(SceneComponentUpdateInfo& info, Bool& updated)
 void MaterialComponent::update(SceneComponentUpdateInfo& info, Bool& updated)
@@ -156,18 +173,21 @@ void MaterialComponent::update(SceneComponentUpdateInfo& info, Bool& updated)
 			IndexType indexType;
 			IndexType indexType;
 			PtrSize indexUgbOffset;
 			PtrSize indexUgbOffset;
 			mesh.getIndexBufferInfo(l, indexUgbOffset, totalIndexCount, indexType);
 			mesh.getIndexBufferInfo(l, indexUgbOffset, totalIndexCount, indexType);
-			indexUgbOffset += firstIndex * getIndexSize(indexType);
 
 
 			for(VertexStreamId stream = VertexStreamId::kMeshRelatedFirst; stream < VertexStreamId::kMeshRelatedCount; ++stream)
 			for(VertexStreamId stream = VertexStreamId::kMeshRelatedFirst; stream < VertexStreamId::kMeshRelatedCount; ++stream)
 			{
 			{
 				if(mesh.isVertexStreamPresent(stream))
 				if(mesh.isVertexStreamPresent(stream))
 				{
 				{
 					U32 vertCount;
 					U32 vertCount;
-					PtrSize offset;
-					mesh.getVertexBufferInfo(l, stream, offset, vertCount);
+					PtrSize ugbOffset;
+					mesh.getVertexBufferInfo(l, stream, ugbOffset, vertCount);
 					const PtrSize elementSize = getFormatInfo(kMeshRelatedVertexStreamFormats[stream]).m_texelSize;
 					const PtrSize elementSize = getFormatInfo(kMeshRelatedVertexStreamFormats[stream]).m_texelSize;
-					ANKI_ASSERT(offset % elementSize == 0);
-					meshLod.m_vertexOffsets[U32(stream)] = U32(offset / elementSize);
+					ANKI_ASSERT(ugbOffset % elementSize == 0);
+					meshLod.m_vertexOffsets[U32(stream)] = U32(ugbOffset / elementSize);
+				}
+				else
+				{
+					meshLod.m_vertexOffsets[U32(stream)] = kMaxU32;
 				}
 				}
 			}
 			}
 
 
@@ -200,6 +220,12 @@ void MaterialComponent::update(SceneComponentUpdateInfo& info, Bool& updated)
 			}
 			}
 		}
 		}
 
 
+		// Copy the last LOD to the rest just in case
+		for(U32 l = mesh.getLodCount(); l < kMaxLodCount; ++l)
+		{
+			meshLods[l] = meshLods[l - 1];
+		}
+
 		m_gpuSceneMeshLods.uploadToGpuScene(meshLods);
 		m_gpuSceneMeshLods.uploadToGpuScene(meshLods);
 	}
 	}
 
 
@@ -225,7 +251,7 @@ void MaterialComponent::update(SceneComponentUpdateInfo& info, Bool& updated)
 		GpuSceneRenderable gpuRenderable = {};
 		GpuSceneRenderable gpuRenderable = {};
 		gpuRenderable.m_worldTransformsIndex = m_gpuSceneTransforms.getIndex() * 2;
 		gpuRenderable.m_worldTransformsIndex = m_gpuSceneTransforms.getIndex() * 2;
 		gpuRenderable.m_constantsOffset = m_gpuSceneConstants.getOffset();
 		gpuRenderable.m_constantsOffset = m_gpuSceneConstants.getOffset();
-		gpuRenderable.m_meshLodsIndex = m_gpuSceneMeshLods.getIndex();
+		gpuRenderable.m_meshLodsIndex = m_gpuSceneMeshLods.getIndex() * kMaxLodCount;
 		gpuRenderable.m_boneTransformsOffset = (hasSkin) ? m_skinComponent->getBoneTransformsGpuSceneOffset() : 0;
 		gpuRenderable.m_boneTransformsOffset = (hasSkin) ? m_skinComponent->getBoneTransformsGpuSceneOffset() : 0;
 		gpuRenderable.m_particleEmitterIndex = kMaxU32;
 		gpuRenderable.m_particleEmitterIndex = kMaxU32;
 		if(!!(mtl.getRenderingTechniques() & RenderingTechniqueBit::kRtShadow))
 		if(!!(mtl.getRenderingTechniques() & RenderingTechniqueBit::kRtShadow))
@@ -247,19 +273,9 @@ void MaterialComponent::update(SceneComponentUpdateInfo& info, Bool& updated)
 
 
 	// Scene bounds update
 	// Scene bounds update
 	const Bool aabbUpdated = moved || meshUpdated || submeshUpdated || hasSkin;
 	const Bool aabbUpdated = moved || meshUpdated || submeshUpdated || hasSkin;
-	Aabb aabbWorld;
-	if(aabbUpdated && isValid) [[unlikely]]
+	if(aabbUpdated) [[unlikely]]
 	{
 	{
-		U32 firstIndex, indexCount, firstMeshlet, meshletCount;
-		Aabb aabbLocal;
-		mesh.getSubMeshInfo(0, submeshIdx, firstIndex, indexCount, firstMeshlet, meshletCount, aabbLocal);
-
-		if(m_skinComponent)
-		{
-			aabbLocal = m_skinComponent->getBoneBoundingVolumeLocalSpace().getCompoundShape(aabbLocal);
-		}
-
-		aabbWorld = aabbLocal.getTransformed(info.m_node->getWorldTransform());
+		const Aabb aabbWorld = computeAabb(submeshIdx, *info.m_node);
 		SceneGraph::getSingleton().updateSceneBounds(aabbWorld.getMin().xyz(), aabbWorld.getMax().xyz());
 		SceneGraph::getSingleton().updateSceneBounds(aabbWorld.getMin().xyz(), aabbWorld.getMax().xyz());
 	}
 	}
 
 
@@ -304,38 +320,81 @@ void MaterialComponent::update(SceneComponentUpdateInfo& info, Bool& updated)
 	const Bool gpuSceneAabbsNeedUpdate = aabbUpdated || bucketsNeedUpdate;
 	const Bool gpuSceneAabbsNeedUpdate = aabbUpdated || bucketsNeedUpdate;
 	if(gpuSceneAabbsNeedUpdate) [[unlikely]]
 	if(gpuSceneAabbsNeedUpdate) [[unlikely]]
 	{
 	{
-		// Do raster techniques
-		for(RenderingTechnique t :
-			EnumBitsIterable<RenderingTechnique, RenderingTechniqueBit>(mtl.getRenderingTechniques() & ~RenderingTechniqueBit::kAllRt))
-		{
-			const GpuSceneRenderableBoundingVolume gpuVolume = initGpuSceneRenderableBoundingVolume(
-				aabbWorld.getMin().xyz(), aabbWorld.getMax().xyz(), m_gpuSceneRenderable.getIndex(), m_renderStateBucketIndices[t].get());
+		const Aabb aabbWorld = computeAabb(submeshIdx, *info.m_node);
 
 
-			switch(t)
+		// Raster
+		for(RenderingTechnique t : EnumBitsIterable<RenderingTechnique, RenderingTechniqueBit>(RenderingTechniqueBit::kAllRaster))
+		{
+			const RenderingTechniqueBit bit = RenderingTechniqueBit(1 << t);
+			if(!(mtl.getRenderingTechniques() & bit))
+			{
+				switch(t)
+				{
+				case RenderingTechnique::kGBuffer:
+					m_gpuSceneRenderableAabbGBuffer.free();
+					break;
+				case RenderingTechnique::kDepth:
+					m_gpuSceneRenderableAabbDepth.free();
+					break;
+				case RenderingTechnique::kForward:
+					m_gpuSceneRenderableAabbForward.free();
+					break;
+				default:
+					ANKI_ASSERT(0);
+				}
+			}
+			else
 			{
 			{
-			case RenderingTechnique::kGBuffer:
-				m_gpuSceneRenderableAabbGBuffer.uploadToGpuScene(gpuVolume);
-				break;
-			case RenderingTechnique::kDepth:
-				m_gpuSceneRenderableAabbDepth.uploadToGpuScene(gpuVolume);
-				break;
-			case RenderingTechnique::kForward:
-				m_gpuSceneRenderableAabbForward.uploadToGpuScene(gpuVolume);
-				break;
-			default:
-				ANKI_ASSERT(0);
+				const GpuSceneRenderableBoundingVolume gpuVolume = initGpuSceneRenderableBoundingVolume(
+					aabbWorld.getMin().xyz(), aabbWorld.getMax().xyz(), m_gpuSceneRenderable.getIndex(), m_renderStateBucketIndices[t].get());
+
+				switch(t)
+				{
+				case RenderingTechnique::kGBuffer:
+					if(!m_gpuSceneRenderableAabbGBuffer.isValid())
+					{
+						m_gpuSceneRenderableAabbGBuffer.allocate();
+					}
+					m_gpuSceneRenderableAabbGBuffer.uploadToGpuScene(gpuVolume);
+					break;
+				case RenderingTechnique::kDepth:
+					if(!m_gpuSceneRenderableAabbDepth.isValid())
+					{
+						m_gpuSceneRenderableAabbDepth.allocate();
+					}
+					m_gpuSceneRenderableAabbDepth.uploadToGpuScene(gpuVolume);
+					break;
+				case RenderingTechnique::kForward:
+					if(!m_gpuSceneRenderableAabbForward.isValid())
+					{
+						m_gpuSceneRenderableAabbForward.allocate();
+					}
+					m_gpuSceneRenderableAabbForward.uploadToGpuScene(gpuVolume);
+					break;
+				default:
+					ANKI_ASSERT(0);
+				}
 			}
 			}
 		}
 		}
 
 
-		// Do RT techniques
+		// RT
 		if(!!(mtl.getRenderingTechniques() & RenderingTechniqueBit::kAllRt))
 		if(!!(mtl.getRenderingTechniques() & RenderingTechniqueBit::kAllRt))
 		{
 		{
-			const U32 bucket = 0;
+			if(!m_gpuSceneRenderableAabbRt.isValid())
+			{
+				m_gpuSceneRenderableAabbRt.allocate();
+			}
+
+			const U32 bucketIdx = 0;
 			const GpuSceneRenderableBoundingVolume gpuVolume =
 			const GpuSceneRenderableBoundingVolume gpuVolume =
-				initGpuSceneRenderableBoundingVolume(aabbWorld.getMin().xyz(), aabbWorld.getMax().xyz(), m_gpuSceneRenderable.getIndex(), bucket);
+				initGpuSceneRenderableBoundingVolume(aabbWorld.getMin().xyz(), aabbWorld.getMax().xyz(), m_gpuSceneRenderable.getIndex(), bucketIdx);
 
 
 			m_gpuSceneRenderableAabbRt.uploadToGpuScene(gpuVolume);
 			m_gpuSceneRenderableAabbRt.uploadToGpuScene(gpuVolume);
 		}
 		}
+		else
+		{
+			m_gpuSceneRenderableAabbRt.free();
+		}
 	}
 	}
 }
 }
 
 

+ 5 - 0
AnKi/Scene/Components/MaterialComponent.h

@@ -12,6 +12,9 @@
 
 
 namespace anki {
 namespace anki {
 
 
+// Forward
+class Aabb;
+
 /// @addtogroup scene
 /// @addtogroup scene
 /// @{
 /// @{
 
 
@@ -59,6 +62,8 @@ private:
 	void update(SceneComponentUpdateInfo& info, Bool& updated) override;
 	void update(SceneComponentUpdateInfo& info, Bool& updated) override;
 
 
 	void onOtherComponentRemovedOrAdded(SceneComponent* other, Bool added) override;
 	void onOtherComponentRemovedOrAdded(SceneComponent* other, Bool added) override;
+
+	Aabb computeAabb(U32 submeshIndex, const SceneNode& node) const;
 };
 };
 /// @}
 /// @}
 
 

+ 7 - 3
AnKi/Scene/SceneGraph.cpp

@@ -40,6 +40,8 @@ namespace anki {
 
 
 static StatCounter g_sceneUpdateTimeStatVar(StatCategory::kTime, "All scene update",
 static StatCounter g_sceneUpdateTimeStatVar(StatCategory::kTime, "All scene update",
 											StatFlag::kMilisecond | StatFlag::kShowAverage | StatFlag::kMainThreadUpdates);
 											StatFlag::kMilisecond | StatFlag::kShowAverage | StatFlag::kMainThreadUpdates);
+static StatCounter g_sceneComponentsUpdatedStatVar(StatCategory::kScene, "Scene components updated per frame", StatFlag::kZeroEveryFrame);
+static StatCounter g_sceneNodesUpdatedStatVar(StatCategory::kScene, "Scene nodes updated per frame", StatFlag::kZeroEveryFrame);
 
 
 constexpr U32 kUpdateNodeBatchSize = 10;
 constexpr U32 kUpdateNodeBatchSize = 10;
 
 
@@ -244,7 +246,7 @@ void SceneGraph::updateNode(Second prevTime, Second crntTime, SceneNode& node)
 	SceneComponentUpdateInfo componentUpdateInfo(prevTime, crntTime);
 	SceneComponentUpdateInfo componentUpdateInfo(prevTime, crntTime);
 	componentUpdateInfo.m_framePool = &m_framePool;
 	componentUpdateInfo.m_framePool = &m_framePool;
 
 
-	Bool atLeastOneComponentUpdated = false;
+	U32 sceneComponentUpdatedCount = 0;
 	node.iterateComponents([&](SceneComponent& comp) {
 	node.iterateComponents([&](SceneComponent& comp) {
 		componentUpdateInfo.m_node = &node;
 		componentUpdateInfo.m_node = &node;
 		Bool updated = false;
 		Bool updated = false;
@@ -254,7 +256,7 @@ void SceneGraph::updateNode(Second prevTime, Second crntTime, SceneNode& node)
 		{
 		{
 			ANKI_TRACE_INC_COUNTER(SceneComponentUpdated, 1);
 			ANKI_TRACE_INC_COUNTER(SceneComponentUpdated, 1);
 			comp.setTimestamp(GlobalFrameIndex::getSingleton().m_value);
 			comp.setTimestamp(GlobalFrameIndex::getSingleton().m_value);
-			atLeastOneComponentUpdated = true;
+			++sceneComponentUpdatedCount;
 		}
 		}
 	});
 	});
 
 
@@ -266,9 +268,11 @@ void SceneGraph::updateNode(Second prevTime, Second crntTime, SceneNode& node)
 
 
 	// Frame update
 	// Frame update
 	{
 	{
-		if(atLeastOneComponentUpdated)
+		if(sceneComponentUpdatedCount)
 		{
 		{
 			node.setComponentMaxTimestamp(GlobalFrameIndex::getSingleton().m_value);
 			node.setComponentMaxTimestamp(GlobalFrameIndex::getSingleton().m_value);
+			g_sceneComponentsUpdatedStatVar.increment(sceneComponentUpdatedCount);
+			g_sceneNodesUpdatedStatVar.increment(1);
 		}
 		}
 		else
 		else
 		{
 		{

+ 230 - 31
AnKi/Script/Scene.cpp

@@ -40,7 +40,7 @@ static EventManager* getEventManager(lua_State* l)
 
 
 using WeakArraySceneNodePtr = WeakArray<SceneNode*>;
 using WeakArraySceneNodePtr = WeakArray<SceneNode*>;
 
 
-LuaUserDataTypeInfo luaUserDataTypeInfoLightComponentType = {1017868390018106569, "LightComponentType", 0, nullptr, nullptr};
+LuaUserDataTypeInfo luaUserDataTypeInfoLightComponentType = {1705216774773193669, "LightComponentType", 0, nullptr, nullptr};
 
 
 template<>
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<LightComponentType>()
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<LightComponentType>()
@@ -75,8 +75,7 @@ static inline void wrapLightComponentType(lua_State* l)
 	lua_settop(l, 0);
 	lua_settop(l, 0);
 }
 }
 
 
-LuaUserDataTypeInfo luaUserDataTypeInfoBodyComponentCollisionShapeType = {-4469018935477875302, "BodyComponentCollisionShapeType", 0, nullptr,
-																		  nullptr};
+LuaUserDataTypeInfo luaUserDataTypeInfoBodyComponentCollisionShapeType = {655862457130768896, "BodyComponentCollisionShapeType", 0, nullptr, nullptr};
 
 
 template<>
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<BodyComponentCollisionShapeType>()
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<BodyComponentCollisionShapeType>()
@@ -91,11 +90,11 @@ static inline void wrapBodyComponentCollisionShapeType(lua_State* l)
 	lua_setglobal(l, luaUserDataTypeInfoBodyComponentCollisionShapeType.m_typeName);
 	lua_setglobal(l, luaUserDataTypeInfoBodyComponentCollisionShapeType.m_typeName);
 	lua_getglobal(l, luaUserDataTypeInfoBodyComponentCollisionShapeType.m_typeName);
 	lua_getglobal(l, luaUserDataTypeInfoBodyComponentCollisionShapeType.m_typeName);
 
 
-	lua_pushstring(l, "kFromModelComponent");
-	ANKI_ASSERT(BodyComponentCollisionShapeType(lua_Number(BodyComponentCollisionShapeType::kFromModelComponent))
-					== BodyComponentCollisionShapeType::kFromModelComponent
+	lua_pushstring(l, "kFromMeshComponent");
+	ANKI_ASSERT(BodyComponentCollisionShapeType(lua_Number(BodyComponentCollisionShapeType::kFromMeshComponent))
+					== BodyComponentCollisionShapeType::kFromMeshComponent
 				&& "Can't map the enumerant to a lua_Number");
 				&& "Can't map the enumerant to a lua_Number");
-	lua_pushnumber(l, lua_Number(BodyComponentCollisionShapeType::kFromModelComponent));
+	lua_pushnumber(l, lua_Number(BodyComponentCollisionShapeType::kFromMeshComponent));
 	lua_settable(l, -3);
 	lua_settable(l, -3);
 
 
 	lua_pushstring(l, "kAabb");
 	lua_pushstring(l, "kAabb");
@@ -120,7 +119,7 @@ static inline void wrapBodyComponentCollisionShapeType(lua_State* l)
 }
 }
 
 
 LuaUserDataTypeInfo luaUserDataTypeInfoWeakArraySceneNodePtr = {
 LuaUserDataTypeInfo luaUserDataTypeInfoWeakArraySceneNodePtr = {
-	5474400433201232564, "WeakArraySceneNodePtr", LuaUserData::computeSizeForGarbageCollected<WeakArraySceneNodePtr>(), nullptr, nullptr};
+	3313685462671490673, "WeakArraySceneNodePtr", LuaUserData::computeSizeForGarbageCollected<WeakArraySceneNodePtr>(), nullptr, nullptr};
 
 
 template<>
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<WeakArraySceneNodePtr>()
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<WeakArraySceneNodePtr>()
@@ -238,7 +237,7 @@ static inline void wrapWeakArraySceneNodePtr(lua_State* l)
 	lua_settop(l, 0);
 	lua_settop(l, 0);
 }
 }
 
 
-LuaUserDataTypeInfo luaUserDataTypeInfoLightComponent = {833662240382024818, "LightComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoLightComponent = {5525591367996120980, "LightComponent",
 														 LuaUserData::computeSizeForGarbageCollected<LightComponent>(), nullptr, nullptr};
 														 LuaUserData::computeSizeForGarbageCollected<LightComponent>(), nullptr, nullptr};
 
 
 template<>
 template<>
@@ -849,7 +848,7 @@ static inline void wrapLightComponent(lua_State* l)
 	lua_settop(l, 0);
 	lua_settop(l, 0);
 }
 }
 
 
-LuaUserDataTypeInfo luaUserDataTypeInfoDecalComponent = {-2747121038409584545, "DecalComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoDecalComponent = {-3496490616109595414, "DecalComponent",
 														 LuaUserData::computeSizeForGarbageCollected<DecalComponent>(), nullptr, nullptr};
 														 LuaUserData::computeSizeForGarbageCollected<DecalComponent>(), nullptr, nullptr};
 
 
 template<>
 template<>
@@ -971,7 +970,7 @@ static inline void wrapDecalComponent(lua_State* l)
 	lua_settop(l, 0);
 	lua_settop(l, 0);
 }
 }
 
 
-LuaUserDataTypeInfo luaUserDataTypeInfoLensFlareComponent = {4022752674248547993, "LensFlareComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoLensFlareComponent = {8343332549488008242, "LensFlareComponent",
 															 LuaUserData::computeSizeForGarbageCollected<LensFlareComponent>(), nullptr, nullptr};
 															 LuaUserData::computeSizeForGarbageCollected<LensFlareComponent>(), nullptr, nullptr};
 
 
 template<>
 template<>
@@ -1134,7 +1133,7 @@ static inline void wrapLensFlareComponent(lua_State* l)
 	lua_settop(l, 0);
 	lua_settop(l, 0);
 }
 }
 
 
-LuaUserDataTypeInfo luaUserDataTypeInfoBodyComponent = {2720560564281158059, "BodyComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoBodyComponent = {-9073165845536614590, "BodyComponent",
 														LuaUserData::computeSizeForGarbageCollected<BodyComponent>(), nullptr, nullptr};
 														LuaUserData::computeSizeForGarbageCollected<BodyComponent>(), nullptr, nullptr};
 
 
 template<>
 template<>
@@ -1444,7 +1443,7 @@ static inline void wrapBodyComponent(lua_State* l)
 	lua_settop(l, 0);
 	lua_settop(l, 0);
 }
 }
 
 
-LuaUserDataTypeInfo luaUserDataTypeInfoTriggerComponent = {8183277099337493224, "TriggerComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoTriggerComponent = {-6183500062696695809, "TriggerComponent",
 														   LuaUserData::computeSizeForGarbageCollected<TriggerComponent>(), nullptr, nullptr};
 														   LuaUserData::computeSizeForGarbageCollected<TriggerComponent>(), nullptr, nullptr};
 
 
 template<>
 template<>
@@ -1558,7 +1557,7 @@ static inline void wrapTriggerComponent(lua_State* l)
 	lua_settop(l, 0);
 	lua_settop(l, 0);
 }
 }
 
 
-LuaUserDataTypeInfo luaUserDataTypeInfoFogDensityComponent = {2337586273051444619, "FogDensityComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoFogDensityComponent = {-7152888456323500040, "FogDensityComponent",
 															  LuaUserData::computeSizeForGarbageCollected<FogDensityComponent>(), nullptr, nullptr};
 															  LuaUserData::computeSizeForGarbageCollected<FogDensityComponent>(), nullptr, nullptr};
 
 
 template<>
 template<>
@@ -1664,7 +1663,7 @@ static inline void wrapFogDensityComponent(lua_State* l)
 	lua_settop(l, 0);
 	lua_settop(l, 0);
 }
 }
 
 
-LuaUserDataTypeInfo luaUserDataTypeInfoCameraComponent = {-5107745728978735734, "CameraComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoCameraComponent = {3377927193506206528, "CameraComponent",
 														  LuaUserData::computeSizeForGarbageCollected<CameraComponent>(), nullptr, nullptr};
 														  LuaUserData::computeSizeForGarbageCollected<CameraComponent>(), nullptr, nullptr};
 
 
 template<>
 template<>
@@ -1746,7 +1745,7 @@ static inline void wrapCameraComponent(lua_State* l)
 }
 }
 
 
 LuaUserDataTypeInfo luaUserDataTypeInfoGlobalIlluminationProbeComponent = {
 LuaUserDataTypeInfo luaUserDataTypeInfoGlobalIlluminationProbeComponent = {
-	8103061505586344331, "GlobalIlluminationProbeComponent", LuaUserData::computeSizeForGarbageCollected<GlobalIlluminationProbeComponent>(), nullptr,
+	8463230767507270345, "GlobalIlluminationProbeComponent", LuaUserData::computeSizeForGarbageCollected<GlobalIlluminationProbeComponent>(), nullptr,
 	nullptr};
 	nullptr};
 
 
 template<>
 template<>
@@ -1943,7 +1942,7 @@ static inline void wrapGlobalIlluminationProbeComponent(lua_State* l)
 }
 }
 
 
 LuaUserDataTypeInfo luaUserDataTypeInfoReflectionProbeComponent = {
 LuaUserDataTypeInfo luaUserDataTypeInfoReflectionProbeComponent = {
-	-2939452214358016744, "ReflectionProbeComponent", LuaUserData::computeSizeForGarbageCollected<ReflectionProbeComponent>(), nullptr, nullptr};
+	1607944270322761426, "ReflectionProbeComponent", LuaUserData::computeSizeForGarbageCollected<ReflectionProbeComponent>(), nullptr, nullptr};
 
 
 template<>
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<ReflectionProbeComponent>()
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<ReflectionProbeComponent>()
@@ -1959,7 +1958,7 @@ static inline void wrapReflectionProbeComponent(lua_State* l)
 }
 }
 
 
 LuaUserDataTypeInfo luaUserDataTypeInfoParticleEmitterComponent = {
 LuaUserDataTypeInfo luaUserDataTypeInfoParticleEmitterComponent = {
-	386004265828847962, "ParticleEmitterComponent", LuaUserData::computeSizeForGarbageCollected<ParticleEmitterComponent>(), nullptr, nullptr};
+	5707635792619582103, "ParticleEmitterComponent", LuaUserData::computeSizeForGarbageCollected<ParticleEmitterComponent>(), nullptr, nullptr};
 
 
 template<>
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<ParticleEmitterComponent>()
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<ParticleEmitterComponent>()
@@ -2021,7 +2020,7 @@ static inline void wrapParticleEmitterComponent(lua_State* l)
 	lua_settop(l, 0);
 	lua_settop(l, 0);
 }
 }
 
 
-LuaUserDataTypeInfo luaUserDataTypeInfoModelComponent = {2696577720630677131, "ModelComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoModelComponent = {4960763752009423851, "ModelComponent",
 														 LuaUserData::computeSizeForGarbageCollected<ModelComponent>(), nullptr, nullptr};
 														 LuaUserData::computeSizeForGarbageCollected<ModelComponent>(), nullptr, nullptr};
 
 
 template<>
 template<>
@@ -2084,7 +2083,7 @@ static inline void wrapModelComponent(lua_State* l)
 	lua_settop(l, 0);
 	lua_settop(l, 0);
 }
 }
 
 
-LuaUserDataTypeInfo luaUserDataTypeInfoMeshComponent = {-8442755837115802242, "MeshComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoMeshComponent = {-7599728640014352259, "MeshComponent",
 														LuaUserData::computeSizeForGarbageCollected<MeshComponent>(), nullptr, nullptr};
 														LuaUserData::computeSizeForGarbageCollected<MeshComponent>(), nullptr, nullptr};
 
 
 template<>
 template<>
@@ -2147,7 +2146,7 @@ static inline void wrapMeshComponent(lua_State* l)
 	lua_settop(l, 0);
 	lua_settop(l, 0);
 }
 }
 
 
-LuaUserDataTypeInfo luaUserDataTypeInfoMaterialComponent = {-5580106782512361834, "MaterialComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoMaterialComponent = {1355466570762771132, "MaterialComponent",
 															LuaUserData::computeSizeForGarbageCollected<MaterialComponent>(), nullptr, nullptr};
 															LuaUserData::computeSizeForGarbageCollected<MaterialComponent>(), nullptr, nullptr};
 
 
 template<>
 template<>
@@ -2257,7 +2256,7 @@ static inline void wrapMaterialComponent(lua_State* l)
 	lua_settop(l, 0);
 	lua_settop(l, 0);
 }
 }
 
 
-LuaUserDataTypeInfo luaUserDataTypeInfoSkinComponent = {8982112231014763956, "SkinComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoSkinComponent = {-7996777685958623301, "SkinComponent",
 														LuaUserData::computeSizeForGarbageCollected<SkinComponent>(), nullptr, nullptr};
 														LuaUserData::computeSizeForGarbageCollected<SkinComponent>(), nullptr, nullptr};
 
 
 template<>
 template<>
@@ -2320,7 +2319,7 @@ static inline void wrapSkinComponent(lua_State* l)
 	lua_settop(l, 0);
 	lua_settop(l, 0);
 }
 }
 
 
-LuaUserDataTypeInfo luaUserDataTypeInfoSkyboxComponent = {7444083320643039653, "SkyboxComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoSkyboxComponent = {-8896621779961213756, "SkyboxComponent",
 														  LuaUserData::computeSizeForGarbageCollected<SkyboxComponent>(), nullptr, nullptr};
 														  LuaUserData::computeSizeForGarbageCollected<SkyboxComponent>(), nullptr, nullptr};
 
 
 template<>
 template<>
@@ -2811,7 +2810,7 @@ static inline void wrapSkyboxComponent(lua_State* l)
 	lua_settop(l, 0);
 	lua_settop(l, 0);
 }
 }
 
 
-LuaUserDataTypeInfo luaUserDataTypeInfoSceneNode = {-742916811498860873, "SceneNode", LuaUserData::computeSizeForGarbageCollected<SceneNode>(),
+LuaUserDataTypeInfo luaUserDataTypeInfoSceneNode = {3754927209486510352, "SceneNode", LuaUserData::computeSizeForGarbageCollected<SceneNode>(),
 													nullptr, nullptr};
 													nullptr, nullptr};
 
 
 template<>
 template<>
@@ -3908,6 +3907,110 @@ static int wrapSceneNodenewModelComponent(lua_State* l)
 	return 0;
 	return 0;
 }
 }
 
 
+/// Pre-wrap method SceneNode::newComponent<MeshComponent>.
+static inline int pwrapSceneNodenewMeshComponent(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, luaUserDataTypeInfoSceneNode, ud))
+	{
+		return -1;
+	}
+
+	SceneNode* self = ud->getData<SceneNode>();
+
+	// Call the method
+	MeshComponent* ret = self->newComponent<MeshComponent>();
+
+	// Push return value
+	if(ret == nullptr) [[unlikely]]
+	{
+		lua_pushstring(l, "Glue code returned nullptr");
+		return -1;
+	}
+
+	voidp = lua_newuserdata(l, sizeof(LuaUserData));
+	ud = static_cast<LuaUserData*>(voidp);
+	luaL_setmetatable(l, "MeshComponent");
+	extern LuaUserDataTypeInfo luaUserDataTypeInfoMeshComponent;
+	ud->initPointed(&luaUserDataTypeInfoMeshComponent, ret);
+
+	return 1;
+}
+
+/// Wrap method SceneNode::newComponent<MeshComponent>.
+static int wrapSceneNodenewMeshComponent(lua_State* l)
+{
+	int res = pwrapSceneNodenewMeshComponent(l);
+	if(res >= 0)
+	{
+		return res;
+	}
+
+	lua_error(l);
+	return 0;
+}
+
+/// Pre-wrap method SceneNode::newComponent<MaterialComponent>.
+static inline int pwrapSceneNodenewMaterialComponent(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, luaUserDataTypeInfoSceneNode, ud))
+	{
+		return -1;
+	}
+
+	SceneNode* self = ud->getData<SceneNode>();
+
+	// Call the method
+	MaterialComponent* ret = self->newComponent<MaterialComponent>();
+
+	// Push return value
+	if(ret == nullptr) [[unlikely]]
+	{
+		lua_pushstring(l, "Glue code returned nullptr");
+		return -1;
+	}
+
+	voidp = lua_newuserdata(l, sizeof(LuaUserData));
+	ud = static_cast<LuaUserData*>(voidp);
+	luaL_setmetatable(l, "MaterialComponent");
+	extern LuaUserDataTypeInfo luaUserDataTypeInfoMaterialComponent;
+	ud->initPointed(&luaUserDataTypeInfoMaterialComponent, ret);
+
+	return 1;
+}
+
+/// Wrap method SceneNode::newComponent<MaterialComponent>.
+static int wrapSceneNodenewMaterialComponent(lua_State* l)
+{
+	int res = pwrapSceneNodenewMaterialComponent(l);
+	if(res >= 0)
+	{
+		return res;
+	}
+
+	lua_error(l);
+	return 0;
+}
+
 /// Pre-wrap method SceneNode::newComponent<SkinComponent>.
 /// Pre-wrap method SceneNode::newComponent<SkinComponent>.
 static inline int pwrapSceneNodenewSkinComponent(lua_State* l)
 static inline int pwrapSceneNodenewSkinComponent(lua_State* l)
 {
 {
@@ -4518,6 +4621,98 @@ static int wrapSceneNodegetFirstModelComponent(lua_State* l)
 	return 0;
 	return 0;
 }
 }
 
 
+/// Pre-wrap method SceneNode::getFirstComponentOfType<MeshComponent>.
+static inline int pwrapSceneNodegetFirstMeshComponent(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, luaUserDataTypeInfoSceneNode, ud))
+	{
+		return -1;
+	}
+
+	SceneNode* self = ud->getData<SceneNode>();
+
+	// Call the method
+	MeshComponent& ret = self->getFirstComponentOfType<MeshComponent>();
+
+	// Push return value
+	voidp = lua_newuserdata(l, sizeof(LuaUserData));
+	ud = static_cast<LuaUserData*>(voidp);
+	luaL_setmetatable(l, "MeshComponent");
+	extern LuaUserDataTypeInfo luaUserDataTypeInfoMeshComponent;
+	ud->initPointed(&luaUserDataTypeInfoMeshComponent, &ret);
+
+	return 1;
+}
+
+/// Wrap method SceneNode::getFirstComponentOfType<MeshComponent>.
+static int wrapSceneNodegetFirstMeshComponent(lua_State* l)
+{
+	int res = pwrapSceneNodegetFirstMeshComponent(l);
+	if(res >= 0)
+	{
+		return res;
+	}
+
+	lua_error(l);
+	return 0;
+}
+
+/// Pre-wrap method SceneNode::getFirstComponentOfType<MaterialComponent>.
+static inline int pwrapSceneNodegetFirstMaterialComponent(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, luaUserDataTypeInfoSceneNode, ud))
+	{
+		return -1;
+	}
+
+	SceneNode* self = ud->getData<SceneNode>();
+
+	// Call the method
+	MaterialComponent& ret = self->getFirstComponentOfType<MaterialComponent>();
+
+	// Push return value
+	voidp = lua_newuserdata(l, sizeof(LuaUserData));
+	ud = static_cast<LuaUserData*>(voidp);
+	luaL_setmetatable(l, "MaterialComponent");
+	extern LuaUserDataTypeInfo luaUserDataTypeInfoMaterialComponent;
+	ud->initPointed(&luaUserDataTypeInfoMaterialComponent, &ret);
+
+	return 1;
+}
+
+/// Wrap method SceneNode::getFirstComponentOfType<MaterialComponent>.
+static int wrapSceneNodegetFirstMaterialComponent(lua_State* l)
+{
+	int res = pwrapSceneNodegetFirstMaterialComponent(l);
+	if(res >= 0)
+	{
+		return res;
+	}
+
+	lua_error(l);
+	return 0;
+}
+
 /// Pre-wrap method SceneNode::getFirstComponentOfType<SkinComponent>.
 /// Pre-wrap method SceneNode::getFirstComponentOfType<SkinComponent>.
 static inline int pwrapSceneNodegetFirstSkinComponent(lua_State* l)
 static inline int pwrapSceneNodegetFirstSkinComponent(lua_State* l)
 {
 {
@@ -4636,6 +4831,8 @@ static inline void wrapSceneNode(lua_State* l)
 	LuaBinder::pushLuaCFuncMethod(l, "newBodyComponent", wrapSceneNodenewBodyComponent);
 	LuaBinder::pushLuaCFuncMethod(l, "newBodyComponent", wrapSceneNodenewBodyComponent);
 	LuaBinder::pushLuaCFuncMethod(l, "newParticleEmitterComponent", wrapSceneNodenewParticleEmitterComponent);
 	LuaBinder::pushLuaCFuncMethod(l, "newParticleEmitterComponent", wrapSceneNodenewParticleEmitterComponent);
 	LuaBinder::pushLuaCFuncMethod(l, "newModelComponent", wrapSceneNodenewModelComponent);
 	LuaBinder::pushLuaCFuncMethod(l, "newModelComponent", wrapSceneNodenewModelComponent);
+	LuaBinder::pushLuaCFuncMethod(l, "newMeshComponent", wrapSceneNodenewMeshComponent);
+	LuaBinder::pushLuaCFuncMethod(l, "newMaterialComponent", wrapSceneNodenewMaterialComponent);
 	LuaBinder::pushLuaCFuncMethod(l, "newSkinComponent", wrapSceneNodenewSkinComponent);
 	LuaBinder::pushLuaCFuncMethod(l, "newSkinComponent", wrapSceneNodenewSkinComponent);
 	LuaBinder::pushLuaCFuncMethod(l, "newSkyboxComponent", wrapSceneNodenewSkyboxComponent);
 	LuaBinder::pushLuaCFuncMethod(l, "newSkyboxComponent", wrapSceneNodenewSkyboxComponent);
 	LuaBinder::pushLuaCFuncMethod(l, "getFirstLightComponent", wrapSceneNodegetFirstLightComponent);
 	LuaBinder::pushLuaCFuncMethod(l, "getFirstLightComponent", wrapSceneNodegetFirstLightComponent);
@@ -4649,12 +4846,14 @@ static inline void wrapSceneNode(lua_State* l)
 	LuaBinder::pushLuaCFuncMethod(l, "getFirstBodyComponent", wrapSceneNodegetFirstBodyComponent);
 	LuaBinder::pushLuaCFuncMethod(l, "getFirstBodyComponent", wrapSceneNodegetFirstBodyComponent);
 	LuaBinder::pushLuaCFuncMethod(l, "getFirstParticleEmitterComponent", wrapSceneNodegetFirstParticleEmitterComponent);
 	LuaBinder::pushLuaCFuncMethod(l, "getFirstParticleEmitterComponent", wrapSceneNodegetFirstParticleEmitterComponent);
 	LuaBinder::pushLuaCFuncMethod(l, "getFirstModelComponent", wrapSceneNodegetFirstModelComponent);
 	LuaBinder::pushLuaCFuncMethod(l, "getFirstModelComponent", wrapSceneNodegetFirstModelComponent);
+	LuaBinder::pushLuaCFuncMethod(l, "getFirstMeshComponent", wrapSceneNodegetFirstMeshComponent);
+	LuaBinder::pushLuaCFuncMethod(l, "getFirstMaterialComponent", wrapSceneNodegetFirstMaterialComponent);
 	LuaBinder::pushLuaCFuncMethod(l, "getFirstSkinComponent", wrapSceneNodegetFirstSkinComponent);
 	LuaBinder::pushLuaCFuncMethod(l, "getFirstSkinComponent", wrapSceneNodegetFirstSkinComponent);
 	LuaBinder::pushLuaCFuncMethod(l, "getFirstSkyboxComponent", wrapSceneNodegetFirstSkyboxComponent);
 	LuaBinder::pushLuaCFuncMethod(l, "getFirstSkyboxComponent", wrapSceneNodegetFirstSkyboxComponent);
 	lua_settop(l, 0);
 	lua_settop(l, 0);
 }
 }
 
 
-LuaUserDataTypeInfo luaUserDataTypeInfoSceneGraph = {-2594793568578495671, "SceneGraph", LuaUserData::computeSizeForGarbageCollected<SceneGraph>(),
+LuaUserDataTypeInfo luaUserDataTypeInfoSceneGraph = {-344565074435104509, "SceneGraph", LuaUserData::computeSizeForGarbageCollected<SceneGraph>(),
 													 nullptr, nullptr};
 													 nullptr, nullptr};
 
 
 template<>
 template<>
@@ -4840,7 +5039,7 @@ static inline void wrapSceneGraph(lua_State* l)
 	lua_settop(l, 0);
 	lua_settop(l, 0);
 }
 }
 
 
-LuaUserDataTypeInfo luaUserDataTypeInfoEvent = {-4509585165280068945, "Event", LuaUserData::computeSizeForGarbageCollected<Event>(), nullptr,
+LuaUserDataTypeInfo luaUserDataTypeInfoEvent = {-7213519083778952731, "Event", LuaUserData::computeSizeForGarbageCollected<Event>(), nullptr,
 												nullptr};
 												nullptr};
 
 
 template<>
 template<>
@@ -4905,7 +5104,7 @@ static inline void wrapEvent(lua_State* l)
 	lua_settop(l, 0);
 	lua_settop(l, 0);
 }
 }
 
 
-LuaUserDataTypeInfo luaUserDataTypeInfoLightEvent = {-5941448867113593269, "LightEvent", LuaUserData::computeSizeForGarbageCollected<LightEvent>(),
+LuaUserDataTypeInfo luaUserDataTypeInfoLightEvent = {-7500641618326072918, "LightEvent", LuaUserData::computeSizeForGarbageCollected<LightEvent>(),
 													 nullptr, nullptr};
 													 nullptr, nullptr};
 
 
 template<>
 template<>
@@ -5024,7 +5223,7 @@ static inline void wrapLightEvent(lua_State* l)
 	lua_settop(l, 0);
 	lua_settop(l, 0);
 }
 }
 
 
-LuaUserDataTypeInfo luaUserDataTypeInfoScriptEvent = {6583137492092883558, "ScriptEvent", LuaUserData::computeSizeForGarbageCollected<ScriptEvent>(),
+LuaUserDataTypeInfo luaUserDataTypeInfoScriptEvent = {-4651637831792818432, "ScriptEvent", LuaUserData::computeSizeForGarbageCollected<ScriptEvent>(),
 													  nullptr, nullptr};
 													  nullptr, nullptr};
 
 
 template<>
 template<>
@@ -5040,7 +5239,7 @@ static inline void wrapScriptEvent(lua_State* l)
 	lua_settop(l, 0);
 	lua_settop(l, 0);
 }
 }
 
 
-LuaUserDataTypeInfo luaUserDataTypeInfoJitterMoveEvent = {2406885170982830049, "JitterMoveEvent",
+LuaUserDataTypeInfo luaUserDataTypeInfoJitterMoveEvent = {4333832701995217077, "JitterMoveEvent",
 														  LuaUserData::computeSizeForGarbageCollected<JitterMoveEvent>(), nullptr, nullptr};
 														  LuaUserData::computeSizeForGarbageCollected<JitterMoveEvent>(), nullptr, nullptr};
 
 
 template<>
 template<>
@@ -5115,7 +5314,7 @@ static inline void wrapJitterMoveEvent(lua_State* l)
 	lua_settop(l, 0);
 	lua_settop(l, 0);
 }
 }
 
 
-LuaUserDataTypeInfo luaUserDataTypeInfoAnimationEvent = {-2264930335835658590, "AnimationEvent",
+LuaUserDataTypeInfo luaUserDataTypeInfoAnimationEvent = {4989625889996658889, "AnimationEvent",
 														 LuaUserData::computeSizeForGarbageCollected<AnimationEvent>(), nullptr, nullptr};
 														 LuaUserData::computeSizeForGarbageCollected<AnimationEvent>(), nullptr, nullptr};
 
 
 template<>
 template<>
@@ -5131,7 +5330,7 @@ static inline void wrapAnimationEvent(lua_State* l)
 	lua_settop(l, 0);
 	lua_settop(l, 0);
 }
 }
 
 
-LuaUserDataTypeInfo luaUserDataTypeInfoEventManager = {-8213202443626292885, "EventManager",
+LuaUserDataTypeInfo luaUserDataTypeInfoEventManager = {-8182166887483462514, "EventManager",
 													   LuaUserData::computeSizeForGarbageCollected<EventManager>(), nullptr, nullptr};
 													   LuaUserData::computeSizeForGarbageCollected<EventManager>(), nullptr, nullptr};
 
 
 template<>
 template<>

+ 13 - 1
AnKi/Script/Scene.xml

@@ -52,7 +52,7 @@ using WeakArraySceneNodePtr = WeakArray<SceneNode*>;
 
 
 	<enums>
 	<enums>
 		<enum name="BodyComponentCollisionShapeType">
 		<enum name="BodyComponentCollisionShapeType">
-			<enumerant name="kFromModelComponent"/>
+			<enumerant name="kFromMeshComponent"/>
 			<enumerant name="kAabb"/>
 			<enumerant name="kAabb"/>
 			<enumerant name="kSphere"/>
 			<enumerant name="kSphere"/>
 			<enumerant name="kCount"/>
 			<enumerant name="kCount"/>
@@ -449,6 +449,12 @@ using WeakArraySceneNodePtr = WeakArray<SceneNode*>;
 				<method name="newComponent&lt;ModelComponent&gt;" alias="newModelComponent">
 				<method name="newComponent&lt;ModelComponent&gt;" alias="newModelComponent">
 					<return>ModelComponent*</return>
 					<return>ModelComponent*</return>
 				</method>
 				</method>
+				<method name="newComponent&lt;MeshComponent&gt;" alias="newMeshComponent">
+					<return>MeshComponent*</return>
+				</method>
+				<method name="newComponent&lt;MaterialComponent&gt;" alias="newMaterialComponent">
+					<return>MaterialComponent*</return>
+				</method>
 				<method name="newComponent&lt;SkinComponent&gt;" alias="newSkinComponent">
 				<method name="newComponent&lt;SkinComponent&gt;" alias="newSkinComponent">
 					<return>SkinComponent*</return>
 					<return>SkinComponent*</return>
 				</method>
 				</method>
@@ -489,6 +495,12 @@ using WeakArraySceneNodePtr = WeakArray<SceneNode*>;
 				<method name="getFirstComponentOfType&lt;ModelComponent&gt;" alias="getFirstModelComponent">
 				<method name="getFirstComponentOfType&lt;ModelComponent&gt;" alias="getFirstModelComponent">
 					<return>ModelComponent&amp;</return>
 					<return>ModelComponent&amp;</return>
 				</method>
 				</method>
+				<method name="getFirstComponentOfType&lt;MeshComponent&gt;" alias="getFirstMeshComponent">
+					<return>MeshComponent&amp;</return>
+				</method>
+				<method name="getFirstComponentOfType&lt;MaterialComponent&gt;" alias="getFirstMaterialComponent">
+					<return>MaterialComponent&amp;</return>
+				</method>
 				<method name="getFirstComponentOfType&lt;SkinComponent&gt;" alias="getFirstSkinComponent">
 				<method name="getFirstComponentOfType&lt;SkinComponent&gt;" alias="getFirstSkinComponent">
 					<return>SkinComponent&amp;</return>
 					<return>SkinComponent&amp;</return>
 				</method>
 				</method>

BIN
Samples/Sponza/Assets/Background_Roughness.ankitex


+ 0 - 1410
Samples/Sponza/Assets/Camera.001Action.003_67159cf18109479.ankianim

@@ -1,1410 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<animation>
-	<channels>
-		<channel name="Camera.001">
-			<positionKeys>
-				<key time="0.041667">18.599913 10.657731 6.683091</key>
-				<key time="0.083333">18.822186 10.665800 6.544144</key>
-				<key time="0.125000">18.996122 10.672124 6.434316</key>
-				<key time="0.291667">19.503559 10.690758 6.087018</key>
-				<key time="0.458333">19.981510 10.708467 5.683402</key>
-				<key time="0.541667">20.195549 10.716311 5.455306</key>
-				<key time="0.625000">20.387455 10.723156 5.207519</key>
-				<key time="0.708333">20.553846 10.728799 4.940104</key>
-				<key time="0.791667">20.692162 10.733084 4.654717</key>
-				<key time="0.875000">20.800594 10.735905 4.354607</key>
-				<key time="0.958333">20.877872 10.737204 4.044442</key>
-				<key time="1.041667">20.922955 10.736956 3.730020</key>
-				<key time="1.125000">20.934895 10.735174 3.417887</key>
-				<key time="1.208333">20.912884 10.731926 3.114892</key>
-				<key time="1.291667">20.856510 10.727356 2.827701</key>
-				<key time="1.375000">20.766167 10.721722 2.562281</key>
-				<key time="1.458333">20.643417 10.715406 2.323405</key>
-				<key time="1.541667">20.491119 10.708911 2.114231</key>
-				<key time="1.625000">20.313278 10.702819 1.936038</key>
-				<key time="1.708333">20.114534 10.697716 1.788191</key>
-				<key time="1.791667">19.899435 10.694124 1.668359</key>
-				<key time="1.875000">19.671700 10.692419 1.572947</key>
-				<key time="1.958333">19.433662 10.692770 1.497663</key>
-				<key time="2.125000">18.928328 10.699270 1.390209</key>
-				<key time="2.291667">18.376240 10.711187 1.316724</key>
-				<key time="2.458333">17.767275 10.724472 1.259140</key>
-				<key time="2.625000">17.103523 10.734613 1.208215</key>
-				<key time="2.791667">16.399994 10.736689 1.158352</key>
-				<key time="2.958333">15.675097 10.724964 1.104653</key>
-				<key time="3.125000">14.942680 10.693155 1.042741</key>
-				<key time="3.291667">14.210680 10.635603 0.969610</key>
-				<key time="3.458333">13.483395 10.548584 0.884107</key>
-				<key time="3.625000">12.763412 10.430819 0.786817</key>
-				<key time="3.791667">12.052084 10.283070 0.679641</key>
-				<key time="3.958333">11.349483 10.107351 0.565279</key>
-				<key time="4.125000">10.654624 9.906337 0.446674</key>
-				<key time="4.291667">9.965987 9.683138 0.326437</key>
-				<key time="4.625000">8.601766 9.184402 0.087807</key>
-				<key time="4.958333">7.250775 8.637899 -0.143137</key>
-				<key time="5.291667">5.913395 8.058323 -0.362561</key>
-				<key time="5.625000">4.582897 7.457387 -0.568914</key>
-				<key time="5.958333">3.240909 6.865014 -0.761852</key>
-				<key time="6.291667">1.874348 6.319550 -0.934276</key>
-				<key time="6.625000">0.485990 5.838725 -1.074294</key>
-				<key time="6.958333">-0.919216 5.413220 -1.176733</key>
-				<key time="7.291667">-2.339242 5.026521 -1.249977</key>
-				<key time="7.625000">-3.769131 4.670967 -1.310930</key>
-				<key time="7.958333">-5.208096 4.351663 -1.371988</key>
-				<key time="8.291667">-6.668030 4.069740 -1.434060</key>
-				<key time="8.625000">-8.169161 3.817044 -1.490574</key>
-				<key time="8.958333">-9.697276 3.595090 -1.532717</key>
-				<key time="9.291667">-11.195747 3.416538 -1.569650</key>
-				<key time="9.458333">-11.923072 3.346066 -1.604990</key>
-				<key time="9.625000">-12.637314 3.287948 -1.661278</key>
-				<key time="9.958333">-14.045298 3.203719 -1.788217</key>
-				<key time="10.125000">-14.747589 3.173756 -1.806604</key>
-				<key time="10.291667">-15.450908 3.149598 -1.771097</key>
-				<key time="10.458333">-16.154732 3.130527 -1.687234</key>
-				<key time="10.625000">-16.857090 3.116380 -1.569690</key>
-				<key time="10.791667">-17.551704 3.106683 -1.424278</key>
-				<key time="10.958333">-18.223717 3.100041 -1.238775</key>
-				<key time="11.125000">-18.848549 3.094316 -0.989448</key>
-				<key time="11.208333">-19.134197 3.091138 -0.834443</key>
-				<key time="11.291667">-19.397619 3.087515 -0.658150</key>
-				<key time="11.375000">-19.636494 3.083391 -0.462045</key>
-				<key time="11.458333">-19.849598 3.078817 -0.249667</key>
-				<key time="11.541667">-20.036842 3.073945 -0.026494</key>
-				<key time="11.625000">-20.199154 3.068991 0.200462</key>
-				<key time="11.708333">-20.338131 3.064203 0.423349</key>
-				<key time="11.875000">-20.553947 3.055986 0.826490</key>
-				<key time="11.958333">-20.634682 3.052835 0.994611</key>
-				<key time="12.041667">-20.699703 3.050380 1.135668</key>
-				<key time="12.125000">-20.750702 3.048575 1.248965</key>
-				<key time="12.208333">-20.789412 3.047329 1.335907</key>
-				<key time="12.291667">-20.817631 3.046531 1.399491</key>
-				<key time="12.458333">-20.849964 3.045848 1.472582</key>
-				<key time="12.625000">-20.861412 3.045848 1.500001</key>
-				<key time="13.125000">-20.847111 3.047797 1.489110</key>
-				<key time="13.291667">-20.829523 3.049638 1.465426</key>
-				<key time="13.458333">-20.797611 3.053257 1.415202</key>
-				<key time="13.625000">-20.743519 3.060141 1.312364</key>
-				<key time="13.708333">-20.706882 3.065330 1.230567</key>
-				<key time="13.791667">-20.664574 3.071908 1.122706</key>
-				<key time="13.875000">-20.618334 3.079957 0.985193</key>
-				<key time="13.958333">-20.570807 3.089456 0.815655</key>
-				<key time="14.041667">-20.525253 3.100278 0.613280</key>
-				<key time="14.125000">-20.485067 3.112195 0.378940</key>
-				<key time="14.208333">-20.453209 3.124893 0.115052</key>
-				<key time="14.291667">-20.431709 3.138003 -0.174772</key>
-				<key time="14.458333">-20.421619 3.163806 -0.814799</key>
-				<key time="14.625000">-20.446142 3.186148 -1.506940</key>
-				<key time="14.791667">-20.483044 3.201410 -2.224765</key>
-				<key time="14.958333">-20.506811 3.206013 -2.952337</key>
-				<key time="15.125000">-20.495430 3.197032 -3.680725</key>
-				<key time="15.291667">-20.432266 3.173155 -4.403027</key>
-				<key time="15.458333">-20.305168 3.135388 -5.110269</key>
-				<key time="15.625000">-20.104576 3.087032 -5.788065</key>
-				<key time="15.708333">-19.973991 3.060347 -6.109302</key>
-				<key time="15.791667">-19.821815 3.032845 -6.414222</key>
-				<key time="15.875000">-19.647125 3.005142 -6.698987</key>
-				<key time="15.958333">-19.449242 2.977796 -6.959751</key>
-				<key time="16.041666">-19.227867 2.951284 -7.193053</key>
-				<key time="16.125000">-18.983242 2.925996 -7.396255</key>
-				<key time="16.208334">-18.716242 2.902236 -7.567934</key>
-				<key time="16.291666">-18.428392 2.880221 -7.708116</key>
-				<key time="16.375000">-18.121811 2.860104 -7.818319</key>
-				<key time="16.458334">-17.799049 2.841971 -7.901360</key>
-				<key time="16.625000">-17.116093 2.811751 -8.001388</key>
-				<key time="16.791666">-16.400719 2.789289 -8.040969</key>
-				<key time="16.958334">-15.669464 2.773689 -8.047886</key>
-				<key time="17.625000">-12.723013 2.752452 -7.991353</key>
-				<key time="17.958334">-11.261705 2.751890 -7.986588</key>
-				<key time="18.125000">-10.544326 2.753063 -8.025124</key>
-				<key time="18.291666">-9.842689 2.755398 -8.111837</key>
-				<key time="18.458334">-9.158098 2.758962 -8.248920</key>
-				<key time="18.791666">-7.817936 2.769473 -8.577328</key>
-				<key time="18.958334">-7.146201 2.776019 -8.699396</key>
-				<key time="19.125000">-6.467148 2.782954 -8.768600</key>
-				<key time="19.291666">-5.780540 2.789775 -8.788515</key>
-				<key time="19.458334">-5.087101 2.795949 -8.768289</key>
-				<key time="19.958334">-2.980813 2.807382 -8.585955</key>
-				<key time="20.125000">-2.281404 2.808696 -8.547382</key>
-				<key time="20.291666">-1.588733 2.808765 -8.544467</key>
-				<key time="20.458334">-0.902960 2.807305 -8.573917</key>
-				<key time="20.625000">-0.222297 2.803858 -8.623427</key>
-				<key time="20.958334">1.133789 2.789793 -8.731656</key>
-				<key time="21.291666">2.492939 2.767121 -8.818524</key>
-				<key time="21.625000">3.854218 2.737098 -8.923834</key>
-				<key time="21.791666">4.535362 2.718819 -9.002103</key>
-				<key time="21.958334">5.218511 2.698289 -9.101288</key>
-				<key time="22.291666">6.599566 2.652621 -9.362638</key>
-				<key time="22.625000">8.011450 2.605076 -9.663230</key>
-				<key time="22.791666">8.729987 2.581515 -9.791387</key>
-				<key time="22.958334">9.455343 2.558429 -9.886024</key>
-				<key time="23.125000">10.184942 2.536244 -9.938847</key>
-				<key time="23.291666">10.915472 2.515528 -9.944702</key>
-				<key time="23.458334">11.643295 2.496823 -9.899830</key>
-				<key time="23.625000">12.364454 2.480437 -9.801151</key>
-				<key time="23.791666">13.074257 2.466351 -9.646054</key>
-				<key time="23.958334">13.766792 2.454346 -9.432074</key>
-				<key time="24.125000">14.434791 2.444305 -9.156690</key>
-				<key time="24.291666">15.069858 2.436532 -8.817722</key>
-				<key time="24.458334">15.662816 2.431943 -8.414280</key>
-				<key time="24.625000">16.203335 2.432111 -7.947755</key>
-				<key time="24.791666">16.678474 2.439229 -7.422742</key>
-				<key time="24.875000">16.886242 2.446250 -7.140918</key>
-				<key time="24.958334">17.070557 2.456128 -6.848341</key>
-				<key time="25.041666">17.228210 2.469346 -6.547179</key>
-				<key time="25.125000">17.355644 2.486454 -6.240115</key>
-				<key time="25.208334">17.449141 2.508071 -5.930326</key>
-				<key time="25.291666">17.505074 2.534883 -5.621396</key>
-				<key time="25.375000">17.520319 2.567617 -5.317132</key>
-				<key time="25.458334">17.492668 2.607009 -5.021319</key>
-				<key time="25.541666">17.421223 2.653754 -4.737433</key>
-				<key time="25.625000">17.306652 2.708459 -4.468376</key>
-				<key time="25.708334">17.151260 2.771596 -4.216290</key>
-				<key time="25.791666">16.958790 2.843464 -3.982477</key>
-				<key time="25.875000">16.734053 2.924179 -3.767450</key>
-				<key time="25.958334">16.482403 3.013670 -3.571076</key>
-				<key time="26.125000">15.919456 3.217913 -3.231747</key>
-				<key time="26.291666">15.306437 3.452894 -2.957921</key>
-				<key time="26.458334">14.667709 3.714142 -2.742759</key>
-				<key time="26.625000">14.016788 3.996767 -2.579484</key>
-				<key time="26.791666">13.360518 4.295928 -2.460209</key>
-				<key time="26.958334">12.702274 4.607166 -2.375690</key>
-				<key time="27.125000">12.043463 4.926665 -2.316513</key>
-				<key time="27.458334">10.724075 5.578759 -2.244229</key>
-				<key time="28.125000">8.067225 6.870669 -2.182507</key>
-				<key time="28.458334">6.723283 7.478613 -2.172328</key>
-				<key time="28.791666">5.363656 8.051859 -2.174680</key>
-				<key time="29.125000">3.989486 8.588755 -2.202410</key>
-				<key time="29.458334">2.603762 9.081986 -2.272598</key>
-				<key time="29.791666">1.200978 9.520834 -2.376251</key>
-				<key time="30.125000">-0.223667 9.891789 -2.471269</key>
-				<key time="30.458334">-1.667380 10.194010 -2.526085</key>
-				<key time="30.791666">-3.122175 10.441963 -2.541461</key>
-				<key time="31.125000">-4.580384 10.641924 -2.517591</key>
-				<key time="31.458334">-6.038427 10.789780 -2.433568</key>
-				<key time="31.791666">-7.486670 10.885197 -2.301667</key>
-				<key time="31.958334">-8.203708 10.915564 -2.253929</key>
-				<key time="32.125000">-8.916685 10.936018 -2.244318</key>
-				<key time="32.291668">-9.628515 10.947508 -2.277673</key>
-				<key time="32.625000">-11.062487 10.945853 -2.399858</key>
-				<key time="32.791668">-11.787268 10.933599 -2.434516</key>
-				<key time="32.958332">-12.514944 10.914709 -2.430093</key>
-				<key time="33.458332">-14.678410 10.837156 -2.301394</key>
-				<key time="33.625000">-15.382831 10.814022 -2.307011</key>
-				<key time="33.791668">-16.074844 10.796627 -2.366518</key>
-				<key time="33.958332">-16.746319 10.785493 -2.467564</key>
-				<key time="34.125000">-17.376820 10.779518 -2.581190</key>
-				<key time="34.208332">-17.666527 10.777892 -2.633252</key>
-				<key time="34.291668">-17.932854 10.776870 -2.678557</key>
-				<key time="34.375000">-18.171413 10.776259 -2.715793</key>
-				<key time="34.458332">-18.378902 10.775917 -2.744727</key>
-				<key time="34.541668">-18.553596 10.775739 -2.765979</key>
-				<key time="34.625000">-18.695641 10.775660 -2.780720</key>
-				<key time="34.708332">-18.806980 10.775633 -2.790358</key>
-				<key time="34.791668">-18.891045 10.775635 -2.796280</key>
-				<key time="34.958332">-18.995056 10.775696 -2.801530</key>
-				<key time="35.125000">-19.043365 10.775810 -2.802927</key>
-				<key time="35.458332">-19.072309 10.776237 -2.803731</key>
-				<key time="35.791668">-19.078568 10.777027 -2.804934</key>
-				<key time="36.458332">-19.109829 10.781214 -2.809161</key>
-				<key time="36.625000">-19.152012 10.784633 -2.807474</key>
-				<key time="36.791668">-19.240292 10.791181 -2.795567</key>
-				<key time="36.958332">-19.397852 10.802458 -2.755679</key>
-				<key time="37.125000">-19.632656 10.819035 -2.657059</key>
-				<key time="37.208332">-19.773361 10.828917 -2.573656</key>
-				<key time="37.291668">-19.922588 10.839371 -2.461307</key>
-				<key time="37.375000">-20.073503 10.849911 -2.316504</key>
-				<key time="37.458332">-20.219181 10.860027 -2.137294</key>
-				<key time="37.541668">-20.353676 10.869273 -1.923576</key>
-				<key time="37.625000">-20.472870 10.877312 -1.677113</key>
-				<key time="37.708332">-20.574923 10.883949 -1.401261</key>
-				<key time="37.791668">-20.660236 10.889139 -1.100497</key>
-				<key time="37.958332">-20.790165 10.895529 -0.444318</key>
-				<key time="38.125000">-20.885885 10.897518 0.253494</key>
-				<key time="38.291668">-20.959991 10.895635 0.964076</key>
-				<key time="38.458332">-21.000780 10.889117 1.668675</key>
-				<key time="38.541668">-20.999241 10.883617 2.014801</key>
-				<key time="38.625000">-20.977053 10.876356 2.355283</key>
-				<key time="38.708332">-20.930271 10.867226 2.689257</key>
-				<key time="38.791668">-20.856134 10.856236 3.016098</key>
-				<key time="38.875000">-20.753408 10.843538 3.335426</key>
-				<key time="38.958332">-20.622486 10.829437 3.647099</key>
-				<key time="39.041668">-20.465183 10.814350 3.951158</key>
-				<key time="39.125000">-20.284349 10.798777 4.247734</key>
-				<key time="39.291668">-19.865538 10.768260 4.818480</key>
-				<key time="39.458332">-19.390709 10.741542 5.355957</key>
-				<key time="39.625000">-18.874916 10.720608 5.847857</key>
-				<key time="39.708332">-18.603161 10.712339 6.070009</key>
-				<key time="39.791668">-18.321915 10.705305 6.271868</key>
-				<key time="39.875000">-18.030716 10.699238 6.450179</key>
-				<key time="39.958332">-17.729172 10.693844 6.602301</key>
-				<key time="40.041668">-17.417137 10.688850 6.726640</key>
-				<key time="40.125000">-17.094864 10.684057 6.822968</key>
-				<key time="40.208332">-16.763004 10.679359 6.892529</key>
-				<key time="40.291668">-16.422565 10.674759 6.937916</key>
-				<key time="40.458332">-15.721130 10.666359 6.971237</key>
-				<key time="40.958332">-13.541690 10.660528 6.899354</key>
-				<key time="41.125000">-12.816797 10.666080 6.902542</key>
-				<key time="41.291668">-12.104328 10.673205 6.954195</key>
-				<key time="41.458332">-11.408473 10.680033 7.070054</key>
-				<key time="41.625000">-10.727808 10.685123 7.251807</key>
-				<key time="42.125000">-8.692347 10.685153 7.957540</key>
-				<key time="42.291668">-7.991158 10.680744 8.148555</key>
-				<key time="42.458332">-7.276690 10.674779 8.289656</key>
-				<key time="42.625000">-6.552766 10.667529 8.377592</key>
-				<key time="42.791668">-5.824107 10.659209 8.413383</key>
-				<key time="42.958332">-5.095282 10.650062 8.402437</key>
-				<key time="43.125000">-4.370014 10.640469 8.357624</key>
-				<key time="43.458332">-2.937239 10.622488 8.263958</key>
-				<key time="43.625000">-2.228128 10.615614 8.269767</key>
-				<key time="43.791668">-1.519739 10.610801 8.327892</key>
-				<key time="44.125000">-0.091138 10.606516 8.540812</key>
-				<key time="44.291668">0.632490 10.605936 8.647459</key>
-				<key time="44.458332">1.361743 10.605742 8.732831</key>
-				<key time="44.791668">2.830146 10.605680 8.836858</key>
-				<key time="45.125000">4.302644 10.605680 8.890651</key>
-				<key time="45.791668">7.254715 10.605686 8.972504</key>
-				<key time="46.125000">8.729000 10.605816 8.978042</key>
-				<key time="46.458332">10.188644 10.606917 8.930024</key>
-				<key time="46.791668">11.616880 10.610994 8.896557</key>
-				<key time="47.125000">13.002337 10.618160 8.910742</key>
-				<key time="47.291668">13.677910 10.621869 8.879303</key>
-				<key time="47.458332">14.341169 10.625264 8.782084</key>
-				<key time="47.625000">14.992264 10.628590 8.611425</key>
-				<key time="47.791668">15.632313 10.632416 8.382230</key>
-				<key time="47.958332">16.260843 10.637176 8.116724</key>
-				<key time="48.125000">16.872969 10.642745 7.826006</key>
-				<key time="48.291668">17.461540 10.648476 7.506411</key>
-				<key time="48.458332">18.023928 10.653764 7.154838</key>
-				<key time="48.541668">18.289661 10.656145 6.975844</key>
-				<key time="48.583332">18.469225 10.657731 6.852591</key>
-			</positionKeys>
-			<rotationKeys>
-				<key time="0.041667">-0.021171 0.447604 0.017244 0.893815</key>
-				<key time="0.083333">-0.021531 0.465444 0.018040 0.884631</key>
-				<key time="0.125000">-0.021798 0.479288 0.018679 0.877188</key>
-				<key time="0.166667">-0.021973 0.488671 0.019124 0.871982</key>
-				<key time="0.208333">-0.022167 0.499288 0.019638 0.865930</key>
-				<key time="0.250000">-0.022345 0.509342 0.020138 0.860038</key>
-				<key time="0.291667">-0.022517 0.519371 0.020648 0.854003</key>
-				<key time="0.333333">-0.022681 0.529184 0.021158 0.847940</key>
-				<key time="0.375000">-0.022836 0.538815 0.021671 0.841836</key>
-				<key time="0.416667">-0.022982 0.548230 0.022183 0.835718</key>
-				<key time="0.458333">-0.023118 0.557415 0.022692 0.829602</key>
-				<key time="0.500000">-0.023243 0.566352 0.023197 0.823509</key>
-				<key time="0.541667">-0.023356 0.575026 0.023695 0.817458</key>
-				<key time="0.583333">-0.023455 0.583425 0.024184 0.811468</key>
-				<key time="0.625000">-0.023541 0.591538 0.024660 0.805556</key>
-				<key time="0.666667">-0.023610 0.599357 0.025123 0.799739</key>
-				<key time="0.708333">-0.023664 0.606878 0.025568 0.794031</key>
-				<key time="0.750000">-0.023701 0.614098 0.025995 0.788445</key>
-				<key time="0.791667">-0.023720 0.621019 0.026401 0.782992</key>
-				<key time="0.833333">-0.023722 0.627643 0.026785 0.777679</key>
-				<key time="0.875000">-0.023706 0.633974 0.027146 0.772514</key>
-				<key time="0.916667">-0.023673 0.640018 0.027483 0.767503</key>
-				<key time="0.958333">-0.023623 0.645782 0.027794 0.762650</key>
-				<key time="1.000000">-0.023556 0.651271 0.028081 0.757959</key>
-				<key time="1.041667">-0.023474 0.656492 0.028341 0.753435</key>
-				<key time="1.083333">-0.023376 0.661450 0.028575 0.749080</key>
-				<key time="1.125000">-0.023264 0.666149 0.028783 0.744900</key>
-				<key time="1.166667">-0.023137 0.670592 0.028964 0.740900</key>
-				<key time="1.208333">-0.022995 0.674779 0.029116 0.737087</key>
-				<key time="1.250000">-0.022839 0.678709 0.029238 0.733469</key>
-				<key time="1.291667">-0.022666 0.682382 0.029329 0.730055</key>
-				<key time="1.333333">-0.022475 0.685794 0.029385 0.726855</key>
-				<key time="1.375000">-0.022264 0.688939 0.029402 0.723881</key>
-				<key time="1.416667">-0.022028 0.691814 0.029377 0.721142</key>
-				<key time="1.458333">-0.021763 0.694413 0.029303 0.718650</key>
-				<key time="1.500000">-0.021466 0.696732 0.029177 0.716416</key>
-				<key time="1.541667">-0.021130 0.698769 0.028990 0.714447</key>
-				<key time="1.583333">-0.020748 0.700521 0.028736 0.712751</key>
-				<key time="1.625000">-0.020314 0.701989 0.028409 0.711331</key>
-				<key time="1.666667">-0.019822 0.703175 0.028001 0.710188</key>
-				<key time="1.708333">-0.019263 0.704087 0.027507 0.709319</key>
-				<key time="1.750000">-0.018632 0.704732 0.026921 0.708718</key>
-				<key time="1.791667">-0.017924 0.705123 0.026240 0.708372</key>
-				<key time="1.833333">-0.017133 0.705275 0.025461 0.708270</key>
-				<key time="1.875000">-0.016257 0.705205 0.024584 0.708391</key>
-				<key time="1.916667">-0.015296 0.704934 0.023611 0.708715</key>
-				<key time="1.958333">-0.014252 0.704484 0.022548 0.709218</key>
-				<key time="2.000000">-0.013128 0.703879 0.021402 0.709876</key>
-				<key time="2.041667">-0.011934 0.703143 0.020184 0.710662</key>
-				<key time="2.083333">-0.010680 0.702301 0.018907 0.711549</key>
-				<key time="2.125000">-0.009380 0.701376 0.017588 0.712513</key>
-				<key time="2.208333">-0.006714 0.699366 0.014903 0.714577</key>
-				<key time="2.250000">-0.005390 0.698319 0.013580 0.715638</key>
-				<key time="2.291667">-0.004104 0.697264 0.012302 0.716697</key>
-				<key time="2.333333">-0.002882 0.696213 0.011094 0.717744</key>
-				<key time="2.375000">-0.001751 0.695175 0.009980 0.718769</key>
-				<key time="2.416667">-0.000736 0.694153 0.008986 0.719771</key>
-				<key time="2.458333">0.000135 0.693148 0.008135 0.720749</key>
-				<key time="2.500000">0.000837 0.692160 0.007452 0.721706</key>
-				<key time="2.541667">0.001347 0.691182 0.006956 0.722646</key>
-				<key time="2.583333">0.001643 0.690208 0.006667 0.723579</key>
-				<key time="2.625000">0.001705 0.689229 0.006602 0.724512</key>
-				<key time="2.666667">0.001516 0.688235 0.006775 0.725454</key>
-				<key time="2.708333">0.001063 0.687217 0.007197 0.726416</key>
-				<key time="2.750000">0.000335 0.686164 0.007876 0.727404</key>
-				<key time="2.791667">-0.000675 0.685066 0.008816 0.728428</key>
-				<key time="2.833333">-0.001972 0.683914 0.010018 0.729491</key>
-				<key time="2.875000">-0.003555 0.682701 0.011479 0.730599</key>
-				<key time="2.916667">-0.005422 0.681423 0.013194 0.731751</key>
-				<key time="2.958333">-0.007567 0.680074 0.015153 0.732948</key>
-				<key time="3.000000">-0.009979 0.678653 0.017342 0.734187</key>
-				<key time="3.041667">-0.012646 0.677160 0.019748 0.735462</key>
-				<key time="3.083333">-0.015553 0.675597 0.022352 0.736768</key>
-				<key time="3.125000">-0.018681 0.673968 0.025134 0.738097</key>
-				<key time="3.166667">-0.022010 0.672277 0.028073 0.739439</key>
-				<key time="3.208333">-0.025519 0.670533 0.031147 0.740786</key>
-				<key time="3.250000">-0.029185 0.668742 0.034333 0.742128</key>
-				<key time="3.291667">-0.032985 0.666914 0.037609 0.743454</key>
-				<key time="3.333333">-0.036895 0.665058 0.040953 0.744755</key>
-				<key time="3.375000">-0.040893 0.663184 0.044344 0.746022</key>
-				<key time="3.416667">-0.044955 0.661304 0.047764 0.747245</key>
-				<key time="3.458333">-0.049060 0.659428 0.051194 0.748417</key>
-				<key time="3.500000">-0.053189 0.657567 0.054619 0.749529</key>
-				<key time="3.541667">-0.057322 0.655732 0.058024 0.750575</key>
-				<key time="3.583333">-0.061443 0.653935 0.061398 0.751548</key>
-				<key time="3.625000">-0.065537 0.652185 0.064731 0.752443</key>
-				<key time="3.666667">-0.069589 0.650492 0.068013 0.753254</key>
-				<key time="3.708333">-0.073587 0.648866 0.071239 0.753978</key>
-				<key time="3.750000">-0.077520 0.647315 0.074402 0.754611</key>
-				<key time="3.791667">-0.081379 0.645845 0.077499 0.755152</key>
-				<key time="3.833333">-0.085156 0.644463 0.080526 0.755600</key>
-				<key time="3.875000">-0.088843 0.643174 0.083480 0.755954</key>
-				<key time="3.916667">-0.092434 0.641979 0.086360 0.756215</key>
-				<key time="3.958333">-0.095923 0.640882 0.089162 0.756385</key>
-				<key time="4.000000">-0.099305 0.639883 0.091887 0.756469</key>
-				<key time="4.041667">-0.102574 0.638980 0.094530 0.756470</key>
-				<key time="4.083333">-0.105729 0.638172 0.097092 0.756394</key>
-				<key time="4.125000">-0.108763 0.637455 0.099569 0.756246</key>
-				<key time="4.166667">-0.111675 0.636825 0.101958 0.756034</key>
-				<key time="4.208333">-0.114460 0.636276 0.104259 0.755766</key>
-				<key time="4.250000">-0.117117 0.635804 0.106468 0.755448</key>
-				<key time="4.291667">-0.119644 0.635402 0.108583 0.755089</key>
-				<key time="4.333333">-0.122041 0.635064 0.110602 0.754697</key>
-				<key time="4.375000">-0.124306 0.634784 0.112526 0.754278</key>
-				<key time="4.416667">-0.126443 0.634556 0.114352 0.753840</key>
-				<key time="4.458333">-0.128453 0.634375 0.116083 0.753388</key>
-				<key time="4.500000">-0.130341 0.634236 0.117720 0.752926</key>
-				<key time="4.541667">-0.132111 0.634134 0.119268 0.752460</key>
-				<key time="4.583333">-0.133772 0.634065 0.120731 0.751992</key>
-				<key time="4.625000">-0.135331 0.634026 0.122114 0.751522</key>
-				<key time="4.666667">-0.136797 0.634013 0.123426 0.751052</key>
-				<key time="4.708333">-0.138181 0.634026 0.124675 0.750582</key>
-				<key time="4.750000">-0.139492 0.634062 0.125869 0.750110</key>
-				<key time="4.791667">-0.140742 0.634118 0.127016 0.749635</key>
-				<key time="4.833333">-0.141939 0.634195 0.128125 0.749155</key>
-				<key time="4.875000">-0.143092 0.634291 0.129204 0.748669</key>
-				<key time="4.958333">-0.145293 0.634537 0.131291 0.747673</key>
-				<key time="5.041667">-0.147375 0.634850 0.133304 0.746643</key>
-				<key time="5.125000">-0.149330 0.635226 0.135232 0.745588</key>
-				<key time="5.166667">-0.150245 0.635437 0.136152 0.745057</key>
-				<key time="5.208333">-0.151108 0.635663 0.137031 0.744528</key>
-				<key time="5.250000">-0.151906 0.635906 0.137858 0.744005</key>
-				<key time="5.291667">-0.152626 0.636166 0.138623 0.743493</key>
-				<key time="5.333333">-0.153255 0.636445 0.139312 0.742996</key>
-				<key time="5.375000">-0.153778 0.636746 0.139913 0.742517</key>
-				<key time="5.416667">-0.154182 0.637072 0.140413 0.742059</key>
-				<key time="5.458333">-0.154451 0.637427 0.140800 0.741625</key>
-				<key time="5.500000">-0.154573 0.637814 0.141064 0.741216</key>
-				<key time="5.541667">-0.154537 0.638240 0.141195 0.740833</key>
-				<key time="5.583333">-0.154332 0.638708 0.141184 0.740474</key>
-				<key time="5.625000">-0.153950 0.639224 0.141026 0.740137</key>
-				<key time="5.666667">-0.153386 0.639794 0.140717 0.739821</key>
-				<key time="5.708333">-0.152636 0.640422 0.140255 0.739520</key>
-				<key time="5.750000">-0.151699 0.641113 0.139641 0.739230</key>
-				<key time="5.791667">-0.150577 0.641871 0.138876 0.738946</key>
-				<key time="5.833333">-0.149276 0.642698 0.137966 0.738662</key>
-				<key time="5.875000">-0.147803 0.643596 0.136918 0.738371</key>
-				<key time="5.916667">-0.146168 0.644566 0.135741 0.738067</key>
-				<key time="5.958333">-0.144384 0.645609 0.134446 0.737745</key>
-				<key time="6.000000">-0.142466 0.646721 0.133045 0.737397</key>
-				<key time="6.041667">-0.140430 0.647901 0.131552 0.737019</key>
-				<key time="6.083333">-0.138296 0.649146 0.129982 0.736606</key>
-				<key time="6.125000">-0.136082 0.650450 0.128351 0.736154</key>
-				<key time="6.166667">-0.133807 0.651809 0.126673 0.735659</key>
-				<key time="6.208333">-0.131491 0.653218 0.124965 0.735119</key>
-				<key time="6.250000">-0.129153 0.654670 0.123240 0.734533</key>
-				<key time="6.291667">-0.126809 0.656158 0.121513 0.733901</key>
-				<key time="6.333333">-0.124477 0.657677 0.119797 0.733222</key>
-				<key time="6.375000">-0.122170 0.659220 0.118101 0.732500</key>
-				<key time="6.416667">-0.119900 0.660779 0.116435 0.731737</key>
-				<key time="6.458333">-0.117678 0.662348 0.114806 0.730936</key>
-				<key time="6.500000">-0.115510 0.663919 0.113220 0.730103</key>
-				<key time="6.541667">-0.113404 0.665487 0.111680 0.729242</key>
-				<key time="6.583333">-0.111363 0.667042 0.110188 0.728362</key>
-				<key time="6.625000">-0.109389 0.668579 0.108745 0.727468</key>
-				<key time="6.666667">-0.107484 0.670090 0.107350 0.726569</key>
-				<key time="6.708333">-0.105648 0.671567 0.106002 0.725672</key>
-				<key time="6.750000">-0.103879 0.673002 0.104698 0.724787</key>
-				<key time="6.791667">-0.102176 0.674389 0.103436 0.723920</key>
-				<key time="6.833333">-0.100537 0.675721 0.102213 0.723081</key>
-				<key time="6.875000">-0.098959 0.676991 0.101025 0.722277</key>
-				<key time="6.916667">-0.097440 0.678193 0.099869 0.721516</key>
-				<key time="6.958333">-0.095977 0.679322 0.098741 0.720805</key>
-				<key time="7.000000">-0.094565 0.680375 0.097638 0.720149</key>
-				<key time="7.041667">-0.093202 0.681348 0.096556 0.719553</key>
-				<key time="7.083333">-0.091883 0.682238 0.095491 0.719020</key>
-				<key time="7.125000">-0.090603 0.683047 0.094439 0.718554</key>
-				<key time="7.166667">-0.089356 0.683773 0.093397 0.718155</key>
-				<key time="7.208333">-0.088139 0.684420 0.092360 0.717824</key>
-				<key time="7.250000">-0.086944 0.684990 0.091323 0.717559</key>
-				<key time="7.291667">-0.085766 0.685486 0.090284 0.717358</key>
-				<key time="7.333333">-0.084600 0.685915 0.089237 0.717218</key>
-				<key time="7.375000">-0.083440 0.686280 0.088181 0.717134</key>
-				<key time="7.416667">-0.082281 0.686590 0.087111 0.717103</key>
-				<key time="7.458333">-0.081121 0.686849 0.086028 0.717118</key>
-				<key time="7.541667">-0.078784 0.687243 0.083816 0.717262</key>
-				<key time="7.625000">-0.076424 0.687515 0.081555 0.717518</key>
-				<key time="7.708333">-0.074051 0.687715 0.079267 0.717831</key>
-				<key time="7.791667">-0.071692 0.687887 0.076990 0.718153</key>
-				<key time="7.875000">-0.069378 0.688071 0.074762 0.718439</key>
-				<key time="7.958333">-0.067136 0.688300 0.072615 0.718654</key>
-				<key time="8.041667">-0.064981 0.688599 0.070567 0.718770</key>
-				<key time="8.125000">-0.062914 0.688986 0.068620 0.718770</key>
-				<key time="8.208333">-0.060919 0.689475 0.066760 0.718649</key>
-				<key time="8.291667">-0.058970 0.690075 0.064963 0.718400</key>
-				<key time="8.375000">-0.057037 0.690797 0.063198 0.718019</key>
-				<key time="8.416667">-0.056067 0.691210 0.062318 0.717776</key>
-				<key time="8.458333">-0.055089 0.691662 0.061435 0.717492</key>
-				<key time="8.500000">-0.054100 0.692159 0.060547 0.717163</key>
-				<key time="8.541667">-0.053096 0.692708 0.059651 0.716783</key>
-				<key time="8.583333">-0.052076 0.693318 0.058745 0.716343</key>
-				<key time="8.625000">-0.051035 0.694000 0.057828 0.715832</key>
-				<key time="8.666667">-0.049972 0.694766 0.056899 0.715238</key>
-				<key time="8.708333">-0.048885 0.695634 0.055956 0.714544</key>
-				<key time="8.750000">-0.047771 0.696620 0.055001 0.713732</key>
-				<key time="8.791667">-0.046630 0.697745 0.054033 0.712781</key>
-				<key time="8.833333">-0.045459 0.699033 0.053052 0.711668</key>
-				<key time="8.875000">-0.044259 0.700509 0.052061 0.710365</key>
-				<key time="8.916667">-0.043029 0.702199 0.051060 0.708842</key>
-				<key time="8.958333">-0.041768 0.704135 0.050050 0.707068</key>
-				<key time="9.000000">-0.040477 0.706347 0.049035 0.705005</key>
-				<key time="9.041667">-0.039156 0.708869 0.048015 0.702614</key>
-				<key time="9.083333">-0.037807 0.711735 0.046993 0.699854</key>
-				<key time="9.125000">-0.036431 0.714983 0.045972 0.696677</key>
-				<key time="9.166667">-0.035030 0.718649 0.044953 0.693034</key>
-				<key time="9.208333">-0.033604 0.722769 0.043939 0.688873</key>
-				<key time="9.250000">-0.032158 0.727380 0.042932 0.684136</key>
-				<key time="9.291667">-0.030692 0.732515 0.041934 0.678764</key>
-				<key time="9.333333">-0.029211 0.738207 0.040947 0.672696</key>
-				<key time="9.375000">-0.027717 0.744482 0.039972 0.665868</key>
-				<key time="9.416667">-0.026214 0.751360 0.039011 0.658216</key>
-				<key time="9.458333">-0.024706 0.758855 0.038065 0.649676</key>
-				<key time="9.500000">-0.023198 0.766969 0.037136 0.640188</key>
-				<key time="9.541667">-0.021696 0.775695 0.036226 0.629694</key>
-				<key time="9.583333">-0.020205 0.785009 0.035337 0.618145</key>
-				<key time="9.625000">-0.018731 0.794879 0.034471 0.605498</key>
-				<key time="9.666667">-0.017283 0.805255 0.033631 0.591722</key>
-				<key time="9.708333">-0.015867 0.816072 0.032822 0.576800</key>
-				<key time="9.750000">-0.014490 0.827254 0.032048 0.560726</key>
-				<key time="9.791667">-0.013158 0.838713 0.031313 0.543513</key>
-				<key time="9.833333">-0.011877 0.850352 0.030624 0.525189</key>
-				<key time="9.875000">-0.010653 0.862065 0.029986 0.505798</key>
-				<key time="9.916667">-0.009489 0.873745 0.029407 0.485402</key>
-				<key time="9.958333">-0.008386 0.885284 0.028891 0.464076</key>
-				<key time="10.000000">-0.007345 0.896579 0.028444 0.441908</key>
-				<key time="10.041667">-0.006366 0.907531 0.028070 0.418997</key>
-				<key time="10.083333">-0.005445 0.918052 0.027772 0.395449</key>
-				<key time="10.125000">-0.004577 0.928062 0.027551 0.371377</key>
-				<key time="10.166667">-0.003758 0.937497 0.027407 0.346893</key>
-				<key time="10.208333">-0.002982 0.946303 0.027337 0.322110</key>
-				<key time="10.250000">-0.002241 0.954440 0.027338 0.297140</key>
-				<key time="10.291667">-0.001530 0.961882 0.027402 0.272085</key>
-				<key time="10.333333">-0.000841 0.968613 0.027523 0.247044</key>
-				<key time="10.375000">-0.000170 0.974629 0.027692 0.222108</key>
-				<key time="10.416667">0.000488 0.979935 0.027899 0.197357</key>
-				<key time="10.458333">0.001139 0.984544 0.028133 0.172862</key>
-				<key time="10.500000">0.001785 0.988476 0.028386 0.148684</key>
-				<key time="10.541667">0.002427 0.991756 0.028647 0.124873</key>
-				<key time="10.583333">0.003069 0.994414 0.028905 0.101469</key>
-				<key time="10.625000">0.003709 0.996481 0.029154 0.078499</key>
-				<key time="10.666667">0.004348 0.997990 0.029383 0.055983</key>
-				<key time="10.708333">0.004986 0.998974 0.029588 0.033927</key>
-				<key time="10.750000">0.005621 0.999465 0.029762 0.012328</key>
-				<key time="10.791667">-0.006252 -0.999494 -0.029901 0.008825</key>
-				<key time="10.833333">-0.006877 -0.999089 -0.030000 0.029554</key>
-				<key time="10.875000">-0.007497 -0.998274 -0.030059 0.049887</key>
-				<key time="10.916667">-0.008109 -0.997071 -0.030074 0.069858</key>
-				<key time="10.958333">-0.008713 -0.995495 -0.030045 0.089506</key>
-				<key time="11.000000">-0.009308 -0.993560 -0.029971 0.108874</key>
-				<key time="11.041667">-0.009892 -0.991275 -0.029854 0.128007</key>
-				<key time="11.083333">-0.010467 -0.988643 -0.029692 0.146948</key>
-				<key time="11.125000">-0.011030 -0.985667 -0.029487 0.165739</key>
-				<key time="11.166667">-0.011581 -0.982344 -0.029240 0.184422</key>
-				<key time="11.208333">-0.012121 -0.978669 -0.028950 0.203032</key>
-				<key time="11.250000">-0.012647 -0.974636 -0.028618 0.221597</key>
-				<key time="11.291667">-0.013159 -0.970237 -0.028245 0.240143</key>
-				<key time="11.333333">-0.013655 -0.965465 -0.027831 0.258684</key>
-				<key time="11.375000">-0.014135 -0.960310 -0.027376 0.277228</key>
-				<key time="11.416667">-0.014595 -0.954768 -0.026879 0.295774</key>
-				<key time="11.458333">-0.015033 -0.948835 -0.026341 0.314313</key>
-				<key time="11.500000">-0.015446 -0.942511 -0.025761 0.332824</key>
-				<key time="11.541667">-0.015831 -0.935799 -0.025139 0.351280</key>
-				<key time="11.625000">-0.016503 -0.921258 -0.023770 0.387875</key>
-				<key time="11.666667">-0.016782 -0.913464 -0.023024 0.405922</key>
-				<key time="11.708333">-0.017017 -0.905355 -0.022238 0.423732</key>
-				<key time="11.750000">-0.017205 -0.896964 -0.021412 0.441250</key>
-				<key time="11.791667">-0.017340 -0.888330 -0.020549 0.458419</key>
-				<key time="11.833333">-0.017419 -0.879494 -0.019648 0.475185</key>
-				<key time="11.875000">-0.017439 -0.870504 -0.018712 0.491496</key>
-				<key time="11.916667">-0.017395 -0.861406 -0.017742 0.507309</key>
-				<key time="11.958333">-0.017285 -0.852248 -0.016739 0.522584</key>
-				<key time="12.000000">-0.017106 -0.843077 -0.015705 0.537291</key>
-				<key time="12.041667">-0.016855 -0.833936 -0.014641 0.551409</key>
-				<key time="12.083333">-0.016532 -0.824862 -0.013548 0.564930</key>
-				<key time="12.125000">-0.016135 -0.815888 -0.012428 0.577852</key>
-				<key time="12.166667">-0.015663 -0.807038 -0.011280 0.590184</key>
-				<key time="12.208333">-0.015115 -0.798329 -0.010107 0.601947</key>
-				<key time="12.250000">-0.014491 -0.789771 -0.008908 0.613166</key>
-				<key time="12.291667">-0.013793 -0.781363 -0.007686 0.623878</key>
-				<key time="12.333333">-0.013021 -0.773098 -0.006440 0.634120</key>
-				<key time="12.375000">-0.012175 -0.764962 -0.005173 0.643940</key>
-				<key time="12.416667">-0.011258 -0.756934 -0.003887 0.653383</key>
-				<key time="12.458333">-0.010272 -0.748987 -0.002583 0.662500</key>
-				<key time="12.500000">-0.009218 -0.741091 -0.001265 0.671340</key>
-				<key time="12.541667">-0.008099 -0.733214 0.000064 0.679950</key>
-				<key time="12.583333">-0.006917 -0.725321 0.001401 0.688374</key>
-				<key time="12.625000">-0.005677 -0.717378 0.002740 0.696656</key>
-				<key time="12.666667">-0.004380 -0.709350 0.004078 0.704831</key>
-				<key time="12.708333">-0.003031 -0.701207 0.005408 0.712931</key>
-				<key time="12.750000">-0.001633 -0.692919 0.006726 0.720982</key>
-				<key time="12.791667">-0.000192 -0.684462 0.008023 0.729005</key>
-				<key time="12.833333">0.001289 -0.675813 0.009296 0.737013</key>
-				<key time="12.875000">0.002802 -0.666957 0.010535 0.745017</key>
-				<key time="12.916667">0.004343 -0.657879 0.011736 0.753020</key>
-				<key time="12.958333">0.005905 -0.648570 0.012890 0.761023</key>
-				<key time="13.000000">0.007481 -0.639026 0.013991 0.769022</key>
-				<key time="13.041667">0.009060 -0.629243 0.015032 0.777010</key>
-				<key time="13.083333">0.010637 -0.619223 0.016007 0.784980</key>
-				<key time="13.125000">0.012200 -0.608967 0.016909 0.792921</key>
-				<key time="13.166667">0.013739 -0.598482 0.017733 0.800822</key>
-				<key time="13.208333">0.015244 -0.587774 0.018472 0.808671</key>
-				<key time="13.250000">0.016703 -0.576852 0.019123 0.816454</key>
-				<key time="13.291667">0.018106 -0.565728 0.019681 0.824158</key>
-				<key time="13.333333">0.019441 -0.554415 0.020144 0.831769</key>
-				<key time="13.375000">0.020698 -0.542933 0.020511 0.839270</key>
-				<key time="13.416667">0.021866 -0.531304 0.020781 0.846644</key>
-				<key time="13.458333">0.022937 -0.519555 0.020956 0.853872</key>
-				<key time="13.500000">0.023903 -0.507722 0.021038 0.860932</key>
-				<key time="13.541667">0.024758 -0.495845 0.021032 0.867803</key>
-				<key time="13.583333">0.025498 -0.483973 0.020945 0.874460</key>
-				<key time="13.625000">0.026120 -0.472163 0.020784 0.880879</key>
-				<key time="13.666667">0.026625 -0.460476 0.020558 0.887035</key>
-				<key time="13.708333">0.027016 -0.448980 0.020276 0.892904</key>
-				<key time="13.750000">0.027294 -0.437746 0.019948 0.898463</key>
-				<key time="13.791667">0.027469 -0.426849 0.019586 0.903693</key>
-				<key time="13.833333">0.027544 -0.416362 0.019198 0.908579</key>
-				<key time="13.875000">0.027531 -0.406354 0.018795 0.913107</key>
-				<key time="13.916667">0.027436 -0.396893 0.018384 0.917270</key>
-				<key time="13.958333">0.027269 -0.388035 0.017974 0.921066</key>
-				<key time="14.000000">0.027038 -0.379830 0.017570 0.924494</key>
-				<key time="14.041667">0.026748 -0.372316 0.017177 0.927562</key>
-				<key time="14.083333">0.026405 -0.365520 0.016796 0.930277</key>
-				<key time="14.125000">0.026011 -0.359460 0.016430 0.932653</key>
-				<key time="14.166667">0.025568 -0.354140 0.016078 0.934705</key>
-				<key time="14.208333">0.025071 -0.349557 0.015737 0.936447</key>
-				<key time="14.250000">0.024518 -0.345702 0.015406 0.937898</key>
-				<key time="14.291667">0.023899 -0.342556 0.015079 0.939072</key>
-				<key time="14.333333">0.023205 -0.340099 0.014750 0.939988</key>
-				<key time="14.375000">0.022423 -0.338309 0.014415 0.940658</key>
-				<key time="14.416667">0.021541 -0.337163 0.014065 0.941095</key>
-				<key time="14.458333">0.020544 -0.336642 0.013693 0.941309</key>
-				<key time="14.500000">0.019416 -0.336726 0.013291 0.941309</key>
-				<key time="14.541667">0.018142 -0.337402 0.012851 0.941098</key>
-				<key time="14.583333">0.016708 -0.338659 0.012365 0.940680</key>
-				<key time="14.625000">0.015103 -0.340490 0.011824 0.940053</key>
-				<key time="14.666667">0.013316 -0.342891 0.011220 0.939214</key>
-				<key time="14.708333">0.011339 -0.345861 0.010547 0.938158</key>
-				<key time="14.750000">0.009172 -0.349397 0.009795 0.936879</key>
-				<key time="14.791667">0.006813 -0.353502 0.008960 0.935366</key>
-				<key time="14.833333">0.004270 -0.358171 0.008035 0.933612</key>
-				<key time="14.875000">0.001551 -0.363401 0.007016 0.931605</key>
-				<key time="14.916667">-0.001326 -0.369185 0.005899 0.929336</key>
-				<key time="14.958333">-0.004342 -0.375512 0.004684 0.926795</key>
-				<key time="15.000000">-0.007472 -0.382367 0.003371 0.923974</key>
-				<key time="15.041667">-0.010687 -0.389731 0.001962 0.920865</key>
-				<key time="15.083333">-0.013954 -0.397579 0.000461 0.917462</key>
-				<key time="15.125000">-0.017238 -0.405886 -0.001123 0.913760</key>
-				<key time="15.166667">-0.020502 -0.414621 -0.002781 0.909759</key>
-				<key time="15.208333">-0.023707 -0.423750 -0.004501 0.905458</key>
-				<key time="15.250000">-0.026815 -0.433240 -0.006268 0.900858</key>
-				<key time="15.291667">-0.029788 -0.443053 -0.008067 0.895964</key>
-				<key time="15.333333">-0.032590 -0.453154 -0.009877 0.890781</key>
-				<key time="15.375000">-0.035187 -0.463504 -0.011679 0.885319</key>
-				<key time="15.416667">-0.037551 -0.474066 -0.013452 0.879586</key>
-				<key time="15.458333">-0.039654 -0.484800 -0.015173 0.873594</key>
-				<key time="15.500000">-0.041477 -0.495670 -0.016821 0.867357</key>
-				<key time="15.541667">-0.043002 -0.506634 -0.018373 0.860892</key>
-				<key time="15.583333">-0.044221 -0.517652 -0.019810 0.854218</key>
-				<key time="15.625000">-0.045127 -0.528682 -0.021112 0.847357</key>
-				<key time="15.666667">-0.045722 -0.539681 -0.022261 0.840332</key>
-				<key time="15.708333">-0.046010 -0.550604 -0.023243 0.833173</key>
-				<key time="15.750000">-0.046005 -0.561405 -0.024046 0.825912</key>
-				<key time="15.791667">-0.045721 -0.572037 -0.024660 0.818581</key>
-				<key time="15.833333">-0.045178 -0.582453 -0.025082 0.811220</key>
-				<key time="15.875000">-0.044400 -0.592607 -0.025309 0.803869</key>
-				<key time="15.916667">-0.043413 -0.602453 -0.025343 0.796570</key>
-				<key time="15.958333">-0.042243 -0.611948 -0.025189 0.789367</key>
-				<key time="16.000000">-0.040919 -0.621054 -0.024858 0.782304</key>
-				<key time="16.041666">-0.039470 -0.629735 -0.024360 0.775424</key>
-				<key time="16.083334">-0.037923 -0.637962 -0.023710 0.768768</key>
-				<key time="16.125000">-0.036306 -0.645710 -0.022925 0.762375</key>
-				<key time="16.166666">-0.034641 -0.652963 -0.022021 0.756277</key>
-				<key time="16.208334">-0.032952 -0.659709 -0.021018 0.750504</key>
-				<key time="16.250000">-0.031259 -0.665944 -0.019933 0.745080</key>
-				<key time="16.291666">-0.029578 -0.671671 -0.018786 0.740020</key>
-				<key time="16.333334">-0.027924 -0.676899 -0.017593 0.735336</key>
-				<key time="16.375000">-0.026308 -0.681641 -0.016372 0.731031</key>
-				<key time="16.416666">-0.024740 -0.685917 -0.015136 0.727101</key>
-				<key time="16.458334">-0.023227 -0.689751 -0.013900 0.723541</key>
-				<key time="16.500000">-0.021773 -0.693169 -0.012674 0.720335</key>
-				<key time="16.541666">-0.020384 -0.696200 -0.011468 0.717467</key>
-				<key time="16.583334">-0.019061 -0.698875 -0.010292 0.714916</key>
-				<key time="16.625000">-0.017804 -0.701227 -0.009151 0.712657</key>
-				<key time="16.666666">-0.016615 -0.703286 -0.008052 0.710667</key>
-				<key time="16.708334">-0.015493 -0.705085 -0.006999 0.708919</key>
-				<key time="16.750000">-0.014438 -0.706653 -0.005994 0.707388</key>
-				<key time="16.791666">-0.013448 -0.708017 -0.005042 0.706049</key>
-				<key time="16.833334">-0.012523 -0.709205 -0.004142 0.704879</key>
-				<key time="16.875000">-0.011661 -0.710239 -0.003297 0.703856</key>
-				<key time="16.916666">-0.010860 -0.711142 -0.002506 0.702960</key>
-				<key time="16.958334">-0.010120 -0.711932 -0.001770 0.702173</key>
-				<key time="17.000000">-0.009437 -0.712626 -0.001089 0.701480</key>
-				<key time="17.041666">-0.008811 -0.713238 -0.000461 0.700867</key>
-				<key time="17.083334">-0.008238 -0.713780 0.000115 0.700322</key>
-				<key time="17.125000">-0.007718 -0.714262 0.000640 0.699836</key>
-				<key time="17.166666">-0.007248 -0.714694 0.001117 0.699399</key>
-				<key time="17.208334">-0.006823 -0.715084 0.001547 0.699004</key>
-				<key time="17.250000">-0.006443 -0.715439 0.001934 0.698643</key>
-				<key time="17.291666">-0.006104 -0.715766 0.002280 0.698310</key>
-				<key time="17.375000">-0.005533 -0.716364 0.002862 0.697699</key>
-				<key time="17.458334">-0.005085 -0.716938 0.003321 0.697111</key>
-				<key time="17.541666">-0.004730 -0.717561 0.003685 0.696470</key>
-				<key time="17.583334">-0.004580 -0.717919 0.003840 0.696101</key>
-				<key time="17.625000">-0.004442 -0.718325 0.003981 0.695682</key>
-				<key time="17.666666">-0.004315 -0.718795 0.004112 0.695197</key>
-				<key time="17.708334">-0.004196 -0.719343 0.004235 0.694630</key>
-				<key time="17.750000">-0.004083 -0.719986 0.004354 0.693963</key>
-				<key time="17.791666">-0.003972 -0.720740 0.004469 0.693179</key>
-				<key time="17.833334">-0.003863 -0.721623 0.004584 0.692260</key>
-				<key time="17.875000">-0.003753 -0.722650 0.004700 0.691188</key>
-				<key time="17.916666">-0.003643 -0.723834 0.004818 0.689947</key>
-				<key time="17.958334">-0.003530 -0.725190 0.004939 0.688523</key>
-				<key time="18.000000">-0.003416 -0.726724 0.005064 0.686903</key>
-				<key time="18.041666">-0.003298 -0.728444 0.005194 0.685078</key>
-				<key time="18.083334">-0.003179 -0.730350 0.005328 0.683045</key>
-				<key time="18.125000">-0.003058 -0.732439 0.005467 0.680803</key>
-				<key time="18.166666">-0.002935 -0.734705 0.005609 0.678358</key>
-				<key time="18.208334">-0.002812 -0.737132 0.005755 0.675718</key>
-				<key time="18.250000">-0.002689 -0.739705 0.005903 0.672900</key>
-				<key time="18.291666">-0.002567 -0.742400 0.006054 0.669925</key>
-				<key time="18.333334">-0.002448 -0.745191 0.006204 0.666818</key>
-				<key time="18.375000">-0.002332 -0.748049 0.006355 0.663609</key>
-				<key time="18.458334">-0.002114 -0.753841 0.006649 0.657020</key>
-				<key time="18.500000">-0.002013 -0.756710 0.006790 0.653713</key>
-				<key time="18.541666">-0.001919 -0.759518 0.006925 0.650447</key>
-				<key time="18.583334">-0.001832 -0.762237 0.007054 0.647257</key>
-				<key time="18.625000">-0.001752 -0.764840 0.007175 0.644178</key>
-				<key time="18.666666">-0.001681 -0.767304 0.007286 0.641240</key>
-				<key time="18.708334">-0.001619 -0.769611 0.007387 0.638469</key>
-				<key time="18.750000">-0.001566 -0.771744 0.007476 0.635887</key>
-				<key time="18.791666">-0.001522 -0.773695 0.007553 0.633511</key>
-				<key time="18.833334">-0.001488 -0.775457 0.007616 0.631352</key>
-				<key time="18.875000">-0.001464 -0.777028 0.007665 0.629418</key>
-				<key time="18.916666">-0.001451 -0.778409 0.007700 0.627709</key>
-				<key time="18.958334">-0.001448 -0.779605 0.007719 0.626222</key>
-				<key time="19.000000">-0.001456 -0.780622 0.007723 0.624954</key>
-				<key time="19.041666">-0.001475 -0.781471 0.007710 0.623893</key>
-				<key time="19.083334">-0.001504 -0.782160 0.007682 0.623029</key>
-				<key time="19.125000">-0.001546 -0.782702 0.007637 0.622348</key>
-				<key time="19.166666">-0.001598 -0.783108 0.007577 0.621838</key>
-				<key time="19.208334">-0.001661 -0.783390 0.007500 0.621483</key>
-				<key time="19.250000">-0.001736 -0.783561 0.007409 0.621269</key>
-				<key time="19.291666">-0.001821 -0.783633 0.007303 0.621179</key>
-				<key time="19.333334">-0.001915 -0.783617 0.007183 0.621200</key>
-				<key time="19.375000">-0.002020 -0.783526 0.007051 0.621316</key>
-				<key time="19.416666">-0.002132 -0.783371 0.006907 0.621512</key>
-				<key time="19.458334">-0.002252 -0.783165 0.006754 0.621773</key>
-				<key time="19.541666">-0.002511 -0.782645 0.006423 0.622430</key>
-				<key time="19.625000">-0.002786 -0.782066 0.006074 0.623160</key>
-				<key time="19.708334">-0.003066 -0.781524 0.005718 0.623841</key>
-				<key time="19.750000">-0.003206 -0.781299 0.005541 0.624124</key>
-				<key time="19.791666">-0.003345 -0.781120 0.005367 0.624349</key>
-				<key time="19.833334">-0.003482 -0.780997 0.005195 0.624504</key>
-				<key time="19.875000">-0.003617 -0.780940 0.005025 0.624576</key>
-				<key time="19.916666">-0.003751 -0.780957 0.004858 0.624555</key>
-				<key time="19.958334">-0.003885 -0.781055 0.004692 0.624433</key>
-				<key time="20.000000">-0.004018 -0.781239 0.004525 0.624203</key>
-				<key time="20.041666">-0.004153 -0.781512 0.004356 0.623861</key>
-				<key time="20.083334">-0.004292 -0.781877 0.004184 0.623404</key>
-				<key time="20.125000">-0.004435 -0.782333 0.004004 0.622832</key>
-				<key time="20.166666">-0.004586 -0.782877 0.003815 0.622148</key>
-				<key time="20.208334">-0.004746 -0.783507 0.003614 0.621354</key>
-				<key time="20.250000">-0.004916 -0.784218 0.003398 0.620456</key>
-				<key time="20.291666">-0.005099 -0.785004 0.003166 0.619461</key>
-				<key time="20.333334">-0.005296 -0.785858 0.002914 0.618378</key>
-				<key time="20.375000">-0.005507 -0.786771 0.002643 0.617215</key>
-				<key time="20.416666">-0.005733 -0.787735 0.002351 0.615983</key>
-				<key time="20.458334">-0.005973 -0.788741 0.002038 0.614694</key>
-				<key time="20.541666">-0.006494 -0.790839 0.001353 0.611988</key>
-				<key time="20.625000">-0.007058 -0.792990 0.000603 0.609194</key>
-				<key time="20.708334">-0.007646 -0.795116 -0.000190 0.606409</key>
-				<key time="20.791666">-0.008236 -0.797152 -0.000996 0.603721</key>
-				<key time="20.833334">-0.008526 -0.798121 -0.001395 0.602436</key>
-				<key time="20.875000">-0.008809 -0.799050 -0.001788 0.601197</key>
-				<key time="20.916666">-0.009084 -0.799938 -0.002171 0.600010</key>
-				<key time="20.958334">-0.009350 -0.800785 -0.002544 0.598874</key>
-				<key time="21.000000">-0.009607 -0.801591 -0.002906 0.597788</key>
-				<key time="21.041666">-0.009856 -0.802361 -0.003258 0.596749</key>
-				<key time="21.125000">-0.010329 -0.803817 -0.003933 0.594775</key>
-				<key time="21.208334">-0.010785 -0.805217 -0.004589 0.592865</key>
-				<key time="21.291666">-0.011240 -0.806649 -0.005252 0.590901</key>
-				<key time="21.333334">-0.011473 -0.807406 -0.005594 0.589858</key>
-				<key time="21.375000">-0.011712 -0.808207 -0.005949 0.588752</key>
-				<key time="21.416666">-0.011958 -0.809062 -0.006318 0.587568</key>
-				<key time="21.458334">-0.012213 -0.809981 -0.006702 0.586290</key>
-				<key time="21.500000">-0.012477 -0.810974 -0.007104 0.584906</key>
-				<key time="21.541666">-0.012748 -0.812047 -0.007524 0.583404</key>
-				<key time="21.583334">-0.013027 -0.813207 -0.007960 0.581775</key>
-				<key time="21.625000">-0.013311 -0.814457 -0.008411 0.580010</key>
-				<key time="21.666666">-0.013597 -0.815803 -0.008874 0.578102</key>
-				<key time="21.708334">-0.013884 -0.817247 -0.009347 0.576045</key>
-				<key time="21.750000">-0.014168 -0.818791 -0.009826 0.573833</key>
-				<key time="21.791666">-0.014446 -0.820437 -0.010307 0.571462</key>
-				<key time="21.833334">-0.014714 -0.822187 -0.010785 0.568925</key>
-				<key time="21.875000">-0.014970 -0.824044 -0.011258 0.566217</key>
-				<key time="21.916666">-0.015211 -0.826009 -0.011721 0.563329</key>
-				<key time="21.958334">-0.015434 -0.828086 -0.012171 0.560256</key>
-				<key time="22.000000">-0.015637 -0.830277 -0.012606 0.556989</key>
-				<key time="22.041666">-0.015817 -0.832584 -0.013022 0.553520</key>
-				<key time="22.083334">-0.015975 -0.835008 -0.013418 0.549842</key>
-				<key time="22.125000">-0.016109 -0.837550 -0.013794 0.545949</key>
-				<key time="22.166666">-0.016219 -0.840209 -0.014148 0.541835</key>
-				<key time="22.208334">-0.016304 -0.842983 -0.014480 0.537498</key>
-				<key time="22.250000">-0.016367 -0.845867 -0.014791 0.532938</key>
-				<key time="22.291666">-0.016406 -0.848856 -0.015081 0.528155</key>
-				<key time="22.333334">-0.016423 -0.851940 -0.015350 0.523156</key>
-				<key time="22.375000">-0.016420 -0.855112 -0.015600 0.517948</key>
-				<key time="22.416666">-0.016397 -0.858360 -0.015830 0.512541</key>
-				<key time="22.458334">-0.016356 -0.861672 -0.016042 0.506948</key>
-				<key time="22.500000">-0.016297 -0.865036 -0.016235 0.501182</key>
-				<key time="22.541666">-0.016223 -0.868441 -0.016411 0.495256</key>
-				<key time="22.583334">-0.016133 -0.871873 -0.016568 0.489186</key>
-				<key time="22.625000">-0.016028 -0.875323 -0.016706 0.482984</key>
-				<key time="22.666666">-0.015910 -0.878781 -0.016826 0.476662</key>
-				<key time="22.708334">-0.015777 -0.882240 -0.016924 0.470231</key>
-				<key time="22.750000">-0.015631 -0.885692 -0.017001 0.463699</key>
-				<key time="22.791666">-0.015472 -0.889133 -0.017055 0.457070</key>
-				<key time="22.833334">-0.015298 -0.892559 -0.017083 0.450347</key>
-				<key time="22.875000">-0.015111 -0.895969 -0.017085 0.443531</key>
-				<key time="22.916666">-0.014909 -0.899361 -0.017057 0.436619</key>
-				<key time="22.958334">-0.014693 -0.902736 -0.016999 0.429607</key>
-				<key time="23.000000">-0.014463 -0.906095 -0.016908 0.422489</key>
-				<key time="23.041666">-0.014218 -0.909438 -0.016783 0.415258</key>
-				<key time="23.083334">-0.013959 -0.912765 -0.016622 0.407907</key>
-				<key time="23.125000">-0.013687 -0.916078 -0.016427 0.400430</key>
-				<key time="23.166666">-0.013403 -0.919376 -0.016195 0.392817</key>
-				<key time="23.208334">-0.013108 -0.922660 -0.015928 0.385063</key>
-				<key time="23.250000">-0.012803 -0.925927 -0.015628 0.377162</key>
-				<key time="23.291666">-0.012492 -0.929175 -0.015297 0.369111</key>
-				<key time="23.333334">-0.012175 -0.932404 -0.014937 0.360904</key>
-				<key time="23.375000">-0.011855 -0.935608 -0.014554 0.352541</key>
-				<key time="23.416666">-0.011535 -0.938786 -0.014150 0.344017</key>
-				<key time="23.458334">-0.011217 -0.941933 -0.013732 0.335333</key>
-				<key time="23.500000">-0.010903 -0.945046 -0.013303 0.326486</key>
-				<key time="23.541666">-0.010596 -0.948121 -0.012870 0.317473</key>
-				<key time="23.583334">-0.010297 -0.951155 -0.012436 0.308291</key>
-				<key time="23.625000">-0.010009 -0.954145 -0.012007 0.298936</key>
-				<key time="23.666666">-0.009731 -0.957088 -0.011586 0.289401</key>
-				<key time="23.708334">-0.009465 -0.959982 -0.011176 0.279679</key>
-				<key time="23.750000">-0.009210 -0.962823 -0.010778 0.269761</key>
-				<key time="23.791666">-0.008967 -0.965609 -0.010394 0.259635</key>
-				<key time="23.833334">-0.008735 -0.968337 -0.010022 0.249292</key>
-				<key time="23.875000">-0.008513 -0.971003 -0.009661 0.238718</key>
-				<key time="23.916666">-0.008300 -0.973603 -0.009306 0.227905</key>
-				<key time="23.958334">-0.008095 -0.976132 -0.008953 0.216842</key>
-				<key time="24.000000">-0.007896 -0.978584 -0.008596 0.205519</key>
-				<key time="24.041666">-0.007702 -0.980950 -0.008228 0.193931</key>
-				<key time="24.083334">-0.007514 -0.983225 -0.007841 0.182073</key>
-				<key time="24.125000">-0.007329 -0.985399 -0.007425 0.169943</key>
-				<key time="24.166666">-0.007148 -0.987462 -0.006973 0.157542</key>
-				<key time="24.208334">-0.006971 -0.989405 -0.006472 0.144872</key>
-				<key time="24.250000">-0.006800 -0.991217 -0.005915 0.131937</key>
-				<key time="24.291666">-0.006635 -0.992889 -0.005290 0.118742</key>
-				<key time="24.333334">-0.006479 -0.994410 -0.004588 0.105291</key>
-				<key time="24.375000">-0.006334 -0.995770 -0.003798 0.091589</key>
-				<key time="24.416666">-0.006205 -0.996958 -0.002913 0.077638</key>
-				<key time="24.458334">-0.006094 -0.997965 -0.001922 0.063441</key>
-				<key time="24.500000">-0.006007 -0.998781 -0.000820 0.048995</key>
-				<key time="24.541666">-0.005949 -0.999394 0.000403 0.034300</key>
-				<key time="24.583334">-0.005927 -0.999794 0.001751 0.019350</key>
-				<key time="24.625000">-0.005947 -0.999969 0.003230 0.004140</key>
-				<key time="24.666666">0.006015 0.999906 -0.004844 0.011337</key>
-				<key time="24.708334">0.006141 0.999593 -0.006595 0.027086</key>
-				<key time="24.750000">0.006332 0.999014 -0.008485 0.043110</key>
-				<key time="24.791666">0.006596 0.998156 -0.010516 0.059410</key>
-				<key time="24.833334">0.006944 0.997004 -0.012686 0.075984</key>
-				<key time="24.875000">0.007384 0.995542 -0.014995 0.092823</key>
-				<key time="24.916666">0.007926 0.993756 -0.017442 0.109914</key>
-				<key time="24.958334">0.008579 0.991633 -0.020024 0.127237</key>
-				<key time="25.000000">0.009352 0.989161 -0.022738 0.144765</key>
-				<key time="25.041666">0.010256 0.986329 -0.025582 0.162464</key>
-				<key time="25.083334">0.011298 0.983133 -0.028554 0.180295</key>
-				<key time="25.125000">0.012488 0.979569 -0.031650 0.198209</key>
-				<key time="25.166666">0.013833 0.975638 -0.034869 0.216154</key>
-				<key time="25.208334">0.015342 0.971347 -0.038206 0.234074</key>
-				<key time="25.250000">0.017020 0.966705 -0.041660 0.251906</key>
-				<key time="25.291666">0.018874 0.961728 -0.045228 0.269588</key>
-				<key time="25.333334">0.020909 0.956436 -0.048905 0.287056</key>
-				<key time="25.375000">0.023126 0.950854 -0.052688 0.304245</key>
-				<key time="25.416666">0.025527 0.945011 -0.056570 0.321097</key>
-				<key time="25.458334">0.028113 0.938937 -0.060545 0.337553</key>
-				<key time="25.500000">0.030880 0.932666 -0.064605 0.353563</key>
-				<key time="25.541666">0.033825 0.926233 -0.068740 0.369084</key>
-				<key time="25.583334">0.036940 0.919673 -0.072938 0.384080</key>
-				<key time="25.625000">0.040218 0.913018 -0.077186 0.398526</key>
-				<key time="25.666666">0.043647 0.906299 -0.081470 0.412406</key>
-				<key time="25.708334">0.047217 0.899545 -0.085773 0.425714</key>
-				<key time="25.750000">0.050912 0.892778 -0.090077 0.438454</key>
-				<key time="25.791666">0.054720 0.886017 -0.094363 0.450639</key>
-				<key time="25.833334">0.058624 0.879276 -0.098613 0.462291</key>
-				<key time="25.875000">0.062611 0.872564 -0.102807 0.473437</key>
-				<key time="25.916666">0.066663 0.865887 -0.106926 0.484111</key>
-				<key time="25.958334">0.070767 0.859245 -0.110949 0.494349</key>
-				<key time="26.000000">0.074909 0.852637 -0.114860 0.504188</key>
-				<key time="26.041666">0.079073 0.846061 -0.118640 0.513666</key>
-				<key time="26.083334">0.083246 0.839513 -0.122275 0.522817</key>
-				<key time="26.125000">0.087417 0.832988 -0.125751 0.531673</key>
-				<key time="26.166666">0.091572 0.826485 -0.129055 0.540261</key>
-				<key time="26.208334">0.095698 0.820004 -0.132180 0.548602</key>
-				<key time="26.250000">0.099785 0.813549 -0.135117 0.556709</key>
-				<key time="26.291666">0.103819 0.807126 -0.137862 0.564592</key>
-				<key time="26.333334">0.107788 0.800745 -0.140414 0.572253</key>
-				<key time="26.375000">0.111681 0.794421 -0.142772 0.579688</key>
-				<key time="26.416666">0.115485 0.788172 -0.144938 0.586891</key>
-				<key time="26.458334">0.119187 0.782018 -0.146918 0.593850</key>
-				<key time="26.500000">0.122775 0.775982 -0.148717 0.600551</key>
-				<key time="26.541666">0.126237 0.770090 -0.150343 0.606979</key>
-				<key time="26.583334">0.129562 0.764365 -0.151804 0.613119</key>
-				<key time="26.625000">0.132740 0.758835 -0.153111 0.618957</key>
-				<key time="26.666666">0.135763 0.753520 -0.154273 0.624480</key>
-				<key time="26.708334">0.138621 0.748443 -0.155302 0.629681</key>
-				<key time="26.750000">0.141310 0.743622 -0.156207 0.634553</key>
-				<key time="26.791666">0.143824 0.739071 -0.156999 0.639093</key>
-				<key time="26.833334">0.146163 0.734800 -0.157688 0.643304</key>
-				<key time="26.875000">0.148325 0.730815 -0.158283 0.647190</key>
-				<key time="26.916666">0.150313 0.727119 -0.158792 0.650761</key>
-				<key time="26.958334">0.152127 0.723707 -0.159222 0.654029</key>
-				<key time="27.000000">0.153774 0.720574 -0.159581 0.657009</key>
-				<key time="27.041666">0.155259 0.717710 -0.159874 0.659718</key>
-				<key time="27.083334">0.156589 0.715102 -0.160105 0.662174</key>
-				<key time="27.125000">0.157771 0.712737 -0.160279 0.664398</key>
-				<key time="27.166666">0.158813 0.710597 -0.160400 0.666410</key>
-				<key time="27.208334">0.159722 0.708667 -0.160469 0.668229</key>
-				<key time="27.250000">0.160508 0.706927 -0.160489 0.669876</key>
-				<key time="27.291666">0.161177 0.705363 -0.160460 0.671370</key>
-				<key time="27.333334">0.161737 0.703956 -0.160385 0.672728</key>
-				<key time="27.375000">0.162195 0.702691 -0.160264 0.673968</key>
-				<key time="27.416666">0.162556 0.701554 -0.160096 0.675105</key>
-				<key time="27.458334">0.162826 0.700531 -0.159882 0.676152</key>
-				<key time="27.500000">0.163009 0.699610 -0.159620 0.677123</key>
-				<key time="27.541666">0.163109 0.698780 -0.159310 0.678028</key>
-				<key time="27.583334">0.163129 0.698032 -0.158951 0.678878</key>
-				<key time="27.625000">0.163070 0.697357 -0.158541 0.679681</key>
-				<key time="27.666666">0.162935 0.696749 -0.158079 0.680444</key>
-				<key time="27.708334">0.162725 0.696202 -0.157565 0.681173</key>
-				<key time="27.750000">0.162442 0.695709 -0.156995 0.681875</key>
-				<key time="27.791666">0.162085 0.695268 -0.156370 0.682553</key>
-				<key time="27.833334">0.161656 0.694874 -0.155690 0.683212</key>
-				<key time="27.875000">0.161157 0.694523 -0.154954 0.683853</key>
-				<key time="27.916666">0.160588 0.694214 -0.154162 0.684480</key>
-				<key time="27.958334">0.159952 0.693942 -0.153317 0.685094</key>
-				<key time="28.000000">0.159252 0.693706 -0.152419 0.685696</key>
-				<key time="28.041666">0.158492 0.693502 -0.151471 0.686288</key>
-				<key time="28.083334">0.157674 0.693328 -0.150477 0.686871</key>
-				<key time="28.125000">0.156804 0.693180 -0.149440 0.687446</key>
-				<key time="28.166666">0.155887 0.693055 -0.148365 0.688013</key>
-				<key time="28.208334">0.154930 0.692948 -0.147256 0.688575</key>
-				<key time="28.291666">0.152919 0.692773 -0.144959 0.689688</key>
-				<key time="28.375000">0.150822 0.692609 -0.142585 0.690807</key>
-				<key time="28.458334">0.148688 0.692408 -0.140168 0.691966</key>
-				<key time="28.541666">0.146558 0.692109 -0.137724 0.693209</key>
-				<key time="28.583334">0.145502 0.691903 -0.136495 0.693880</key>
-				<key time="28.625000">0.144455 0.691648 -0.135259 0.694594</key>
-				<key time="28.666666">0.143417 0.691338 -0.134014 0.695358</key>
-				<key time="28.708334">0.142389 0.690964 -0.132758 0.696182</key>
-				<key time="28.750000">0.141369 0.690520 -0.131487 0.697071</key>
-				<key time="28.791666">0.140354 0.689999 -0.130198 0.698034</key>
-				<key time="28.833334">0.139343 0.689396 -0.128886 0.699075</key>
-				<key time="28.875000">0.138332 0.688708 -0.127547 0.700198</key>
-				<key time="28.916666">0.137317 0.687934 -0.126179 0.701406</key>
-				<key time="28.958334">0.136293 0.687072 -0.124778 0.702699</key>
-				<key time="29.000000">0.135258 0.686127 -0.123342 0.704075</key>
-				<key time="29.041666">0.134206 0.685103 -0.121870 0.705529</key>
-				<key time="29.083334">0.133133 0.684007 -0.120362 0.707052</key>
-				<key time="29.125000">0.132033 0.682852 -0.118816 0.708634</key>
-				<key time="29.208334">0.129731 0.680421 -0.115616 0.711920</key>
-				<key time="29.250000">0.128517 0.679181 -0.113965 0.713589</key>
-				<key time="29.291666">0.127253 0.677953 -0.112282 0.715248</key>
-				<key time="29.333334">0.125931 0.676762 -0.110567 0.716875</key>
-				<key time="29.375000">0.124545 0.675631 -0.108823 0.718449</key>
-				<key time="29.416666">0.123087 0.674588 -0.107051 0.719945</key>
-				<key time="29.458334">0.121552 0.673657 -0.105251 0.721341</key>
-				<key time="29.500000">0.119931 0.672864 -0.103422 0.722617</key>
-				<key time="29.541666">0.118221 0.672230 -0.101567 0.723751</key>
-				<key time="29.583334">0.116417 0.671774 -0.099683 0.724727</key>
-				<key time="29.625000">0.114517 0.671514 -0.097773 0.725531</key>
-				<key time="29.666666">0.112521 0.671460 -0.095835 0.726152</key>
-				<key time="29.708334">0.110432 0.671619 -0.093871 0.726581</key>
-				<key time="29.750000">0.108254 0.671994 -0.091884 0.726817</key>
-				<key time="29.791666">0.105995 0.672579 -0.089876 0.726859</key>
-				<key time="29.833334">0.103667 0.673367 -0.087851 0.726713</key>
-				<key time="29.875000">0.101281 0.674344 -0.085816 0.726387</key>
-				<key time="29.916666">0.098854 0.675492 -0.083775 0.725893</key>
-				<key time="29.958334">0.096401 0.676789 -0.081737 0.725246</key>
-				<key time="30.000000">0.093939 0.678213 -0.079711 0.724465</key>
-				<key time="30.041666">0.091487 0.679737 -0.077704 0.723567</key>
-				<key time="30.083334">0.089062 0.681336 -0.075726 0.722575</key>
-				<key time="30.125000">0.086678 0.682984 -0.073785 0.721510</key>
-				<key time="30.166666">0.084352 0.684656 -0.071889 0.720391</key>
-				<key time="30.208334">0.082093 0.686330 -0.070045 0.719240</key>
-				<key time="30.250000">0.079911 0.687986 -0.068258 0.718074</key>
-				<key time="30.291666">0.077813 0.689609 -0.066532 0.716909</key>
-				<key time="30.333334">0.075801 0.691186 -0.064867 0.715758</key>
-				<key time="30.375000">0.073876 0.692707 -0.063264 0.714631</key>
-				<key time="30.416666">0.072034 0.694167 -0.061721 0.713536</key>
-				<key time="30.458334">0.070270 0.695567 -0.060233 0.712475</key>
-				<key time="30.500000">0.068578 0.696907 -0.058794 0.711450</key>
-				<key time="30.541666">0.066948 0.698193 -0.057398 0.710457</key>
-				<key time="30.583334">0.065369 0.699435 -0.056037 0.709491</key>
-				<key time="30.625000">0.063832 0.700642 -0.054703 0.708544</key>
-				<key time="30.708334">0.060835 0.703007 -0.052081 0.706659</key>
-				<key time="30.791666">0.057874 0.705412 -0.049470 0.704697</key>
-				<key time="30.833334">0.056383 0.706671 -0.048150 0.703646</key>
-				<key time="30.875000">0.054877 0.707993 -0.046816 0.702526</key>
-				<key time="30.916666">0.053350 0.709394 -0.045461 0.701318</key>
-				<key time="30.958334">0.051798 0.710892 -0.044084 0.700004</key>
-				<key time="31.000000">0.050219 0.712505 -0.042684 0.698565</key>
-				<key time="31.041666">0.048611 0.714247 -0.041259 0.696984</key>
-				<key time="31.083334">0.046977 0.716133 -0.039811 0.695242</key>
-				<key time="31.125000">0.045317 0.718177 -0.038341 0.693324</key>
-				<key time="31.166666">0.043637 0.720389 -0.036851 0.691215</key>
-				<key time="31.208334">0.041939 0.722777 -0.035346 0.688901</key>
-				<key time="31.250000">0.040231 0.725351 -0.033828 0.686370</key>
-				<key time="31.291666">0.038517 0.728113 -0.032301 0.683612</key>
-				<key time="31.333334">0.036804 0.731066 -0.030771 0.680618</key>
-				<key time="31.375000">0.035100 0.734211 -0.029242 0.677382</key>
-				<key time="31.416666">0.033411 0.737548 -0.027719 0.673898</key>
-				<key time="31.458334">0.031745 0.741073 -0.026206 0.670162</key>
-				<key time="31.500000">0.030107 0.744783 -0.024710 0.666169</key>
-				<key time="31.541666">0.028504 0.748676 -0.023232 0.661916</key>
-				<key time="31.583334">0.026941 0.752747 -0.021779 0.657398</key>
-				<key time="31.625000">0.025421 0.756993 -0.020352 0.652611</key>
-				<key time="31.666666">0.023950 0.761414 -0.018954 0.647546</key>
-				<key time="31.708334">0.022528 0.766006 -0.017588 0.642197</key>
-				<key time="31.750000">0.021157 0.770771 -0.016252 0.636553</key>
-				<key time="31.791666">0.019837 0.775709 -0.014948 0.630602</key>
-				<key time="31.833334">0.018568 0.780819 -0.013673 0.624331</key>
-				<key time="31.875000">0.017348 0.786104 -0.012426 0.617726</key>
-				<key time="31.916666">0.016174 0.791562 -0.011202 0.610771</key>
-				<key time="31.958334">0.015045 0.797192 -0.009996 0.603456</key>
-				<key time="32.000000">0.013956 0.802988 -0.008805 0.595766</key>
-				<key time="32.041668">0.012906 0.808943 -0.007622 0.587696</key>
-				<key time="32.083332">0.011891 0.815046 -0.006441 0.579239</key>
-				<key time="32.125000">0.010908 0.821279 -0.005255 0.570399</key>
-				<key time="32.166668">0.009954 0.827623 -0.004058 0.561181</key>
-				<key time="32.208332">0.009028 0.834055 -0.002845 0.551601</key>
-				<key time="32.250000">0.008129 0.840545 -0.001610 0.541679</key>
-				<key time="32.291668">0.007255 0.847062 -0.000348 0.531444</key>
-				<key time="32.333332">0.006407 0.853573 0.000943 0.520933</key>
-				<key time="32.375000">0.005585 0.860043 0.002267 0.510186</key>
-				<key time="32.416668">0.004791 0.866436 0.003625 0.499251</key>
-				<key time="32.458332">0.004025 0.872720 0.005015 0.488180</key>
-				<key time="32.500000">0.003288 0.878859 0.006437 0.477026</key>
-				<key time="32.541668">0.002584 0.884827 0.007887 0.465846</key>
-				<key time="32.583332">0.001914 0.890596 0.009361 0.454695</key>
-				<key time="32.625000">0.001279 0.896144 0.010854 0.443628</key>
-				<key time="32.666668">0.000680 0.901455 0.012359 0.432696</key>
-				<key time="32.708332">0.000119 0.906515 0.013871 0.421946</key>
-				<key time="32.750000">-0.000404 0.911316 0.015382 0.411421</key>
-				<key time="32.791668">-0.000888 0.915854 0.016886 0.401156</key>
-				<key time="32.833332">-0.001334 0.920130 0.018376 0.391180</key>
-				<key time="32.875000">-0.001742 0.924148 0.019845 0.381515</key>
-				<key time="32.916668">-0.002114 0.927916 0.021288 0.372175</key>
-				<key time="32.958332">-0.002451 0.931445 0.022700 0.363164</key>
-				<key time="33.000000">-0.002753 0.934749 0.024077 0.354481</key>
-				<key time="33.041668">-0.003024 0.937843 0.025416 0.346115</key>
-				<key time="33.083332">-0.003263 0.940744 0.026715 0.338047</key>
-				<key time="33.125000">-0.003473 0.943472 0.027971 0.330251</key>
-				<key time="33.166668">-0.003654 0.946047 0.029185 0.322692</key>
-				<key time="33.208332">-0.003807 0.948489 0.030356 0.315329</key>
-				<key time="33.250000">-0.003933 0.950820 0.031484 0.308115</key>
-				<key time="33.291668">-0.004031 0.953060 0.032568 0.300997</key>
-				<key time="33.333332">-0.004101 0.955231 0.033609 0.293916</key>
-				<key time="33.375000">-0.004141 0.957353 0.034607 0.286812</key>
-				<key time="33.416668">-0.004151 0.959443 0.035561 0.279620</key>
-				<key time="33.458332">-0.004128 0.961519 0.036472 0.272274</key>
-				<key time="33.500000">-0.004070 0.963597 0.037337 0.264709</key>
-				<key time="33.541668">-0.003976 0.965687 0.038156 0.256858</key>
-				<key time="33.583332">-0.003842 0.967800 0.038927 0.248661</key>
-				<key time="33.625000">-0.003667 0.969942 0.039649 0.240058</key>
-				<key time="33.666668">-0.003448 0.972112 0.040319 0.230998</key>
-				<key time="33.708332">-0.003185 0.974311 0.040937 0.221433</key>
-				<key time="33.750000">-0.002876 0.976530 0.041500 0.211327</key>
-				<key time="33.791668">-0.002521 0.978759 0.042008 0.200649</key>
-				<key time="33.833332">-0.002120 0.980983 0.042459 0.189383</key>
-				<key time="33.875000">-0.001674 0.983182 0.042854 0.177520</key>
-				<key time="33.916668">-0.001185 0.985336 0.043193 0.165065</key>
-				<key time="33.958332">-0.000657 0.987418 0.043478 0.152034</key>
-				<key time="34.000000">-0.000091 0.989404 0.043709 0.138456</key>
-				<key time="34.041668">0.000508 0.991265 0.043890 0.124369</key>
-				<key time="34.083332">0.001135 0.992975 0.044023 0.109826</key>
-				<key time="34.125000">0.001786 0.994509 0.044112 0.094885</key>
-				<key time="34.166668">0.002456 0.995844 0.044160 0.079616</key>
-				<key time="34.208332">0.003140 0.996961 0.044171 0.064093</key>
-				<key time="34.250000">0.003833 0.997845 0.044150 0.048394</key>
-				<key time="34.291668">0.004531 0.998485 0.044100 0.032599</key>
-				<key time="34.333332">0.005229 0.998876 0.044026 0.016789</key>
-				<key time="34.375000">0.005922 0.999017 0.043932 0.001038</key>
-				<key time="34.416668">-0.006608 -0.998911 -0.043820 0.014582</key>
-				<key time="34.458332">-0.007283 -0.998568 -0.043695 0.030008</key>
-				<key time="34.500000">-0.007946 -0.997997 -0.043559 0.045187</key>
-				<key time="34.541668">-0.008594 -0.997212 -0.043415 0.060074</key>
-				<key time="34.583332">-0.009226 -0.996229 -0.043264 0.074640</key>
-				<key time="34.625000">-0.009841 -0.995062 -0.043107 0.088862</key>
-				<key time="34.666668">-0.010439 -0.993727 -0.042947 0.102733</key>
-				<key time="34.708332">-0.011021 -0.992237 -0.042784 0.116254</key>
-				<key time="34.750000">-0.011587 -0.990604 -0.042617 0.129436</key>
-				<key time="34.791668">-0.012137 -0.988839 -0.042448 0.142299</key>
-				<key time="34.833332">-0.012674 -0.986949 -0.042275 0.154869</key>
-				<key time="34.875000">-0.013198 -0.984940 -0.042098 0.167175</key>
-				<key time="34.916668">-0.013711 -0.982815 -0.041916 0.179248</key>
-				<key time="34.958332">-0.014213 -0.980576 -0.041728 0.191123</key>
-				<key time="35.000000">-0.014706 -0.978223 -0.041532 0.202829</key>
-				<key time="35.041668">-0.015190 -0.975754 -0.041326 0.214394</key>
-				<key time="35.083332">-0.015666 -0.973170 -0.041111 0.225843</key>
-				<key time="35.125000">-0.016135 -0.970468 -0.040882 0.237193</key>
-				<key time="35.166668">-0.016595 -0.967648 -0.040640 0.248457</key>
-				<key time="35.208332">-0.017048 -0.964709 -0.040381 0.259643</key>
-				<key time="35.250000">-0.017491 -0.961655 -0.040106 0.270751</key>
-				<key time="35.291668">-0.017923 -0.958486 -0.039812 0.281777</key>
-				<key time="35.333332">-0.018344 -0.955208 -0.039497 0.292712</key>
-				<key time="35.375000">-0.018752 -0.951827 -0.039163 0.303546</key>
-				<key time="35.416668">-0.019146 -0.948349 -0.038808 0.314263</key>
-				<key time="35.458332">-0.019524 -0.944783 -0.038432 0.324849</key>
-				<key time="35.500000">-0.019884 -0.941137 -0.038035 0.335290</key>
-				<key time="35.541668">-0.020226 -0.937420 -0.037618 0.345571</key>
-				<key time="35.583332">-0.020550 -0.933641 -0.037183 0.355682</key>
-				<key time="35.625000">-0.020854 -0.929807 -0.036730 0.365615</key>
-				<key time="35.666668">-0.021139 -0.925925 -0.036263 0.375367</key>
-				<key time="35.708332">-0.021404 -0.922000 -0.035783 0.384937</key>
-				<key time="35.750000">-0.021652 -0.918036 -0.035291 0.394331</key>
-				<key time="35.791668">-0.021882 -0.914031 -0.034792 0.403556</key>
-				<key time="35.833332">-0.022097 -0.909987 -0.034286 0.412626</key>
-				<key time="35.875000">-0.022297 -0.905899 -0.033776 0.421556</key>
-				<key time="35.916668">-0.022485 -0.901762 -0.033265 0.430364</key>
-				<key time="35.958332">-0.022663 -0.897570 -0.032754 0.439068</key>
-				<key time="36.000000">-0.022832 -0.893315 -0.032245 0.447691</key>
-				<key time="36.041668">-0.022994 -0.888988 -0.031739 0.456251</key>
-				<key time="36.083332">-0.023151 -0.884579 -0.031238 0.464767</key>
-				<key time="36.125000">-0.023304 -0.880080 -0.030743 0.473257</key>
-				<key time="36.166668">-0.023455 -0.875481 -0.030255 0.481734</key>
-				<key time="36.208332">-0.023606 -0.870775 -0.029774 0.490212</key>
-				<key time="36.250000">-0.023757 -0.865956 -0.029302 0.498696</key>
-				<key time="36.291668">-0.023909 -0.861019 -0.028838 0.507192</key>
-				<key time="36.333332">-0.024063 -0.855961 -0.028385 0.515699</key>
-				<key time="36.375000">-0.024220 -0.850783 -0.027941 0.524214</key>
-				<key time="36.416668">-0.024381 -0.845487 -0.027508 0.532730</key>
-				<key time="36.458332">-0.024545 -0.840077 -0.027087 0.541234</key>
-				<key time="36.500000">-0.024712 -0.834561 -0.026677 0.549714</key>
-				<key time="36.541668">-0.024884 -0.828948 -0.026281 0.558153</key>
-				<key time="36.583332">-0.025060 -0.823252 -0.025897 0.566531</key>
-				<key time="36.625000">-0.025239 -0.817486 -0.025528 0.574828</key>
-				<key time="36.666668">-0.025423 -0.811668 -0.025173 0.583022</key>
-				<key time="36.708332">-0.025610 -0.805817 -0.024833 0.591089</key>
-				<key time="36.750000">-0.025800 -0.799952 -0.024508 0.599007</key>
-				<key time="36.791668">-0.025993 -0.794098 -0.024199 0.606752</key>
-				<key time="36.833332">-0.026188 -0.788277 -0.023906 0.614298</key>
-				<key time="36.875000">-0.026386 -0.782515 -0.023631 0.621623</key>
-				<key time="36.916668">-0.026585 -0.776839 -0.023372 0.628703</key>
-				<key time="36.958332">-0.026785 -0.771276 -0.023132 0.635516</key>
-				<key time="37.000000">-0.026986 -0.765854 -0.022911 0.642039</key>
-				<key time="37.041668">-0.027187 -0.760603 -0.022710 0.648250</key>
-				<key time="37.083332">-0.027389 -0.755552 -0.022528 0.654128</key>
-				<key time="37.125000">-0.027590 -0.750730 -0.022369 0.659653</key>
-				<key time="37.166668">-0.027791 -0.746167 -0.022232 0.664807</key>
-				<key time="37.208332">-0.027992 -0.741890 -0.022120 0.669572</key>
-				<key time="37.250000">-0.028193 -0.737927 -0.022032 0.673931</key>
-				<key time="37.291668">-0.028393 -0.734306 -0.021971 0.677869</key>
-				<key time="37.333332">-0.028594 -0.731049 -0.021938 0.681372</key>
-				<key time="37.375000">-0.028794 -0.728180 -0.021933 0.684429</key>
-				<key time="37.416668">-0.028995 -0.725719 -0.021960 0.687030</key>
-				<key time="37.458332">-0.029197 -0.723681 -0.022018 0.689165</key>
-				<key time="37.500000">-0.029400 -0.722081 -0.022110 0.690830</key>
-				<key time="37.541668">-0.029605 -0.720929 -0.022237 0.692019</key>
-				<key time="37.583332">-0.029811 -0.720229 -0.022399 0.692734</key>
-				<key time="37.625000">-0.030020 -0.719982 -0.022597 0.692974</key>
-				<key time="37.666668">-0.030231 -0.720185 -0.022833 0.692747</key>
-				<key time="37.708332">-0.030444 -0.720826 -0.023105 0.692062</key>
-				<key time="37.750000">-0.030658 -0.721890 -0.023414 0.690932</key>
-				<key time="37.791668">-0.030873 -0.723356 -0.023758 0.689376</key>
-				<key time="37.833332">-0.031089 -0.725194 -0.024136 0.687419</key>
-				<key time="37.875000">-0.031303 -0.727371 -0.024544 0.685091</key>
-				<key time="37.916668">-0.031513 -0.729847 -0.024979 0.682427</key>
-				<key time="37.958332">-0.031719 -0.732576 -0.025436 0.679470</key>
-				<key time="38.000000">-0.031917 -0.735509 -0.025910 0.676266</key>
-				<key time="38.041668">-0.032106 -0.738593 -0.026395 0.672870</key>
-				<key time="38.083332">-0.032284 -0.741770 -0.026883 0.669337</key>
-				<key time="38.125000">-0.032447 -0.744984 -0.027368 0.665731</key>
-				<key time="38.166668">-0.032596 -0.748176 -0.027842 0.662115</key>
-				<key time="38.208332">-0.032727 -0.751289 -0.028296 0.658554</key>
-				<key time="38.250000">-0.032839 -0.754269 -0.028723 0.655115</key>
-				<key time="38.291668">-0.032932 -0.757064 -0.029115 0.651860</key>
-				<key time="38.333332">-0.033004 -0.759627 -0.029465 0.648853</key>
-				<key time="38.375000">-0.033056 -0.761915 -0.029766 0.646147</key>
-				<key time="38.416668">-0.033086 -0.763893 -0.030012 0.643795</key>
-				<key time="38.458332">-0.033094 -0.765529 -0.030198 0.641839</key>
-				<key time="38.500000">-0.033080 -0.766801 -0.030319 0.640315</key>
-				<key time="38.541668">-0.033042 -0.767690 -0.030371 0.639247</key>
-				<key time="38.583332">-0.032980 -0.768188 -0.030350 0.638654</key>
-				<key time="38.625000">-0.032892 -0.768290 -0.030255 0.638540</key>
-				<key time="38.666668">-0.032776 -0.767999 -0.030083 0.638904</key>
-				<key time="38.708332">-0.032628 -0.767326 -0.029832 0.639732</key>
-				<key time="38.750000">-0.032445 -0.766285 -0.029502 0.641003</key>
-				<key time="38.791668">-0.032224 -0.764896 -0.029092 0.642689</key>
-				<key time="38.833332">-0.031960 -0.763186 -0.028600 0.644754</key>
-				<key time="38.875000">-0.031647 -0.761184 -0.028028 0.647157</key>
-				<key time="38.916668">-0.031282 -0.758921 -0.027374 0.649855</key>
-				<key time="38.958332">-0.030858 -0.756432 -0.026641 0.652801</key>
-				<key time="39.000000">-0.030371 -0.753751 -0.025827 0.655949</key>
-				<key time="39.041668">-0.029817 -0.750914 -0.024937 0.659255</key>
-				<key time="39.083332">-0.029193 -0.747954 -0.023970 0.662674</key>
-				<key time="39.125000">-0.028496 -0.744903 -0.022932 0.666170</key>
-				<key time="39.166668">-0.027727 -0.741788 -0.021827 0.669706</key>
-				<key time="39.208332">-0.026886 -0.738634 -0.020659 0.673253</key>
-				<key time="39.250000">-0.025976 -0.735464 -0.019438 0.676787</key>
-				<key time="39.291668">-0.025004 -0.732292 -0.018170 0.680289</key>
-				<key time="39.333332">-0.023975 -0.729134 -0.016866 0.683743</key>
-				<key time="39.375000">-0.022901 -0.725999 -0.015539 0.687139</key>
-				<key time="39.416668">-0.021792 -0.722895 -0.014200 0.690468</key>
-				<key time="39.458332">-0.020662 -0.719828 -0.012865 0.693726</key>
-				<key time="39.500000">-0.019525 -0.716802 -0.011547 0.696908</key>
-				<key time="39.541668">-0.018395 -0.713824 -0.010262 0.700009</key>
-				<key time="39.583332">-0.017289 -0.710897 -0.009023 0.703026</key>
-				<key time="39.625000">-0.016222 -0.708029 -0.007845 0.705953</key>
-				<key time="39.666668">-0.015206 -0.705228 -0.006740 0.708786</key>
-				<key time="39.708332">-0.014256 -0.702503 -0.005718 0.711515</key>
-				<key time="39.750000">-0.013379 -0.699866 -0.004785 0.714133</key>
-				<key time="39.791668">-0.012585 -0.697328 -0.003949 0.716631</key>
-				<key time="39.833332">-0.011877 -0.694905 -0.003210 0.718997</key>
-				<key time="39.875000">-0.011256 -0.692610 -0.002566 0.721220</key>
-				<key time="39.916668">-0.010721 -0.690457 -0.002015 0.723291</key>
-				<key time="39.958332">-0.010265 -0.688460 -0.001548 0.725200</key>
-				<key time="40.000000">-0.009882 -0.686632 -0.001156 0.726937</key>
-				<key time="40.041668">-0.009559 -0.684982 -0.000828 0.728497</key>
-				<key time="40.083332">-0.009285 -0.683520 -0.000551 0.729872</key>
-				<key time="40.125000">-0.009046 -0.682252 -0.000311 0.731061</key>
-				<key time="40.166668">-0.008828 -0.681182 -0.000095 0.732061</key>
-				<key time="40.208332">-0.008618 -0.680309 0.000111 0.732875</key>
-				<key time="40.250000">-0.008402 -0.679633 0.000319 0.733504</key>
-				<key time="40.291668">-0.008168 -0.679149 0.000540 0.733955</key>
-				<key time="40.333332">-0.007908 -0.678849 0.000783 0.734235</key>
-				<key time="40.375000">-0.007615 -0.678722 0.001055 0.734355</key>
-				<key time="40.416668">-0.007284 -0.678757 0.001360 0.734326</key>
-				<key time="40.458332">-0.006913 -0.678937 0.001701 0.734162</key>
-				<key time="40.500000">-0.006504 -0.679245 0.002077 0.733880</key>
-				<key time="40.541668">-0.006060 -0.679662 0.002486 0.733496</key>
-				<key time="40.583332">-0.005586 -0.680164 0.002924 0.733033</key>
-				<key time="40.625000">-0.005089 -0.680729 0.003383 0.732510</key>
-				<key time="40.708332">-0.004059 -0.681940 0.004339 0.731384</key>
-				<key time="40.750000">-0.003545 -0.682531 0.004819 0.730833</key>
-				<key time="40.791668">-0.003044 -0.683072 0.005289 0.730326</key>
-				<key time="40.833332">-0.002564 -0.683532 0.005740 0.729894</key>
-				<key time="40.875000">-0.002112 -0.683878 0.006164 0.729567</key>
-				<key time="40.916668">-0.001695 -0.684078 0.006556 0.729378</key>
-				<key time="40.958332">-0.001320 -0.684096 0.006908 0.729358</key>
-				<key time="41.000000">-0.000990 -0.683897 0.007215 0.729542</key>
-				<key time="41.041668">-0.000709 -0.683447 0.007475 0.729962</key>
-				<key time="41.083332">-0.000478 -0.682708 0.007685 0.730651</key>
-				<key time="41.125000">-0.000299 -0.681645 0.007842 0.731641</key>
-				<key time="41.166668">-0.000171 -0.680223 0.007946 0.732963</key>
-				<key time="41.208332">-0.000095 -0.678407 0.007999 0.734643</key>
-				<key time="41.250000">-0.000070 -0.676165 0.008000 0.736707</key>
-				<key time="41.291668">-0.000093 -0.673467 0.007952 0.739175</key>
-				<key time="41.333332">-0.000162 -0.670286 0.007859 0.742061</key>
-				<key time="41.375000">-0.000277 -0.666601 0.007722 0.745375</key>
-				<key time="41.416668">-0.000433 -0.662393 0.007547 0.749119</key>
-				<key time="41.458332">-0.000628 -0.657652 0.007337 0.753286</key>
-				<key time="41.500000">-0.000859 -0.652373 0.007098 0.757864</key>
-				<key time="41.541668">-0.001124 -0.646560 0.006834 0.762831</key>
-				<key time="41.583332">-0.001417 -0.640224 0.006551 0.768159</key>
-				<key time="41.625000">-0.001736 -0.633383 0.006255 0.773811</key>
-				<key time="41.666668">-0.002077 -0.626065 0.005950 0.779745</key>
-				<key time="41.708332">-0.002435 -0.618305 0.005642 0.785914</key>
-				<key time="41.750000">-0.002806 -0.610142 0.005336 0.792269</key>
-				<key time="41.791668">-0.003186 -0.601625 0.005035 0.798756</key>
-				<key time="41.833332">-0.003572 -0.592804 0.004745 0.805325</key>
-				<key time="41.875000">-0.003959 -0.583734 0.004468 0.811923</key>
-				<key time="41.916668">-0.004344 -0.574469 0.004206 0.818504</key>
-				<key time="41.958332">-0.004724 -0.565062 0.003962 0.825025</key>
-				<key time="42.041668">-0.005459 -0.546028 0.003530 0.837742</key>
-				<key time="42.083332">-0.005810 -0.536489 0.003342 0.843881</key>
-				<key time="42.125000">-0.006150 -0.526984 0.003173 0.849847</key>
-				<key time="42.166668">-0.006477 -0.517542 0.003021 0.855628</key>
-				<key time="42.208332">-0.006791 -0.508182 0.002886 0.861218</key>
-				<key time="42.250000">-0.007093 -0.498918 0.002767 0.866616</key>
-				<key time="42.291668">-0.007384 -0.489756 0.002662 0.871824</key>
-				<key time="42.333332">-0.007663 -0.480695 0.002569 0.876851</key>
-				<key time="42.375000">-0.007933 -0.471731 0.002488 0.881703</key>
-				<key time="42.416668">-0.008194 -0.462854 0.002418 0.886393</key>
-				<key time="42.458332">-0.008446 -0.454053 0.002358 0.890931</key>
-				<key time="42.500000">-0.008691 -0.445314 0.002307 0.895329</key>
-				<key time="42.541668">-0.008929 -0.436622 0.002264 0.899598</key>
-				<key time="42.583332">-0.009161 -0.427964 0.002229 0.903747</key>
-				<key time="42.625000">-0.009387 -0.419327 0.002202 0.907784</key>
-				<key time="42.666668">-0.009608 -0.410700 0.002181 0.911717</key>
-				<key time="42.708332">-0.009825 -0.402074 0.002168 0.915552</key>
-				<key time="42.750000">-0.010038 -0.393440 0.002160 0.919293</key>
-				<key time="42.791668">-0.010247 -0.384793 0.002158 0.922944</key>
-				<key time="42.833332">-0.010453 -0.376128 0.002161 0.926506</key>
-				<key time="42.875000">-0.010658 -0.367441 0.002170 0.929983</key>
-				<key time="42.916668">-0.010862 -0.358731 0.002183 0.933375</key>
-				<key time="42.958332">-0.011067 -0.349995 0.002200 0.936684</key>
-				<key time="43.000000">-0.011272 -0.341231 0.002221 0.939909</key>
-				<key time="43.041668">-0.011479 -0.332437 0.002245 0.943053</key>
-				<key time="43.083332">-0.011689 -0.323612 0.002273 0.946115</key>
-				<key time="43.125000">-0.011901 -0.314754 0.002305 0.949096</key>
-				<key time="43.166668">-0.012118 -0.305860 0.002339 0.951996</key>
-				<key time="43.208332">-0.012337 -0.296931 0.002377 0.954816</key>
-				<key time="43.250000">-0.012558 -0.287964 0.002419 0.957556</key>
-				<key time="43.291668">-0.012781 -0.278961 0.002466 0.960214</key>
-				<key time="43.333332">-0.013004 -0.269921 0.002516 0.962791</key>
-				<key time="43.375000">-0.013226 -0.260846 0.002572 0.965287</key>
-				<key time="43.416668">-0.013443 -0.251741 0.002633 0.967698</key>
-				<key time="43.458332">-0.013655 -0.242609 0.002701 0.970024</key>
-				<key time="43.500000">-0.013859 -0.233459 0.002774 0.972264</key>
-				<key time="43.541668">-0.014052 -0.224298 0.002854 0.974415</key>
-				<key time="43.583332">-0.014233 -0.215136 0.002940 0.976476</key>
-				<key time="43.625000">-0.014398 -0.205986 0.003032 0.978445</key>
-				<key time="43.666668">-0.014546 -0.196860 0.003130 0.980319</key>
-				<key time="43.708332">-0.014676 -0.187774 0.003234 0.982097</key>
-				<key time="43.750000">-0.014786 -0.178743 0.003343 0.983779</key>
-				<key time="43.791668">-0.014875 -0.169785 0.003457 0.985363</key>
-				<key time="43.833332">-0.014941 -0.160918 0.003575 0.986848</key>
-				<key time="43.875000">-0.014985 -0.152159 0.003695 0.988236</key>
-				<key time="43.916668">-0.015006 -0.143527 0.003818 0.989525</key>
-				<key time="43.958332">-0.015004 -0.135043 0.003942 0.990718</key>
-				<key time="44.000000">-0.014980 -0.126725 0.004067 0.991816</key>
-				<key time="44.041668">-0.014933 -0.118593 0.004191 0.992822</key>
-				<key time="44.083332">-0.014864 -0.110669 0.004314 0.993737</key>
-				<key time="44.125000">-0.014775 -0.102972 0.004435 0.994565</key>
-				<key time="44.166668">-0.014665 -0.095523 0.004552 0.995309</key>
-				<key time="44.208332">-0.014537 -0.088342 0.004666 0.995973</key>
-				<key time="44.250000">-0.014392 -0.081449 0.004776 0.996562</key>
-				<key time="44.291668">-0.014231 -0.074864 0.004881 0.997080</key>
-				<key time="44.333332">-0.014057 -0.068604 0.004980 0.997532</key>
-				<key time="44.375000">-0.013872 -0.062688 0.005073 0.997924</key>
-				<key time="44.416668">-0.013679 -0.057129 0.005159 0.998260</key>
-				<key time="44.458332">-0.013480 -0.051940 0.005239 0.998546</key>
-				<key time="44.500000">-0.013278 -0.047131 0.005312 0.998786</key>
-				<key time="44.541668">-0.013076 -0.042706 0.005379 0.998988</key>
-				<key time="44.583332">-0.012876 -0.038670 0.005438 0.999154</key>
-				<key time="44.625000">-0.012681 -0.035021 0.005491 0.999291</key>
-				<key time="44.666668">-0.012493 -0.031752 0.005538 0.999402</key>
-				<key time="44.708332">-0.012315 -0.028854 0.005579 0.999492</key>
-				<key time="44.750000">-0.012148 -0.026315 0.005614 0.999564</key>
-				<key time="44.791668">-0.011994 -0.024117 0.005645 0.999621</key>
-				<key time="44.833332">-0.011853 -0.022241 0.005670 0.999666</key>
-				<key time="44.875000">-0.011726 -0.020664 0.005691 0.999702</key>
-				<key time="44.916668">-0.011614 -0.019364 0.005708 0.999729</key>
-				<key time="44.958332">-0.011515 -0.018312 0.005722 0.999750</key>
-				<key time="45.000000">-0.011430 -0.017485 0.005733 0.999765</key>
-				<key time="45.041668">-0.011357 -0.016855 0.005742 0.999777</key>
-				<key time="45.083332">-0.011296 -0.016395 0.005748 0.999785</key>
-				<key time="45.125000">-0.011246 -0.016079 0.005752 0.999791</key>
-				<key time="45.166668">-0.011205 -0.015881 0.005755 0.999795</key>
-				<key time="45.208332">-0.011173 -0.015774 0.005757 0.999797</key>
-				<key time="45.250000">-0.011149 -0.015735 0.005757 0.999798</key>
-				<key time="45.291668">-0.011131 -0.015737 0.005758 0.999798</key>
-				<key time="45.375000">-0.011112 -0.015767 0.005758 0.999797</key>
-				<key time="45.416668">-0.011110 -0.015746 0.005758 0.999798</key>
-				<key time="45.458332">-0.011111 -0.015667 0.005759 0.999799</key>
-				<key time="45.500000">-0.011117 -0.015504 0.005760 0.999801</key>
-				<key time="45.541668">-0.011127 -0.015231 0.005763 0.999806</key>
-				<key time="45.583332">-0.011141 -0.014820 0.005768 0.999811</key>
-				<key time="45.625000">-0.011159 -0.014244 0.005774 0.999820</key>
-				<key time="45.666668">-0.011181 -0.013476 0.005782 0.999830</key>
-				<key time="45.708332">-0.011208 -0.012486 0.005793 0.999842</key>
-				<key time="45.750000">-0.011241 -0.011245 0.005806 0.999857</key>
-				<key time="45.791668">-0.011278 -0.009728 0.005823 0.999872</key>
-				<key time="45.833332">-0.011321 -0.007907 0.005843 0.999888</key>
-				<key time="45.875000">-0.011368 -0.005757 0.005867 0.999902</key>
-				<key time="45.916668">-0.011420 -0.003254 0.005895 0.999912</key>
-				<key time="45.958332">-0.011477 -0.000377 0.005928 0.999916</key>
-				<key time="46.000000">-0.011536 0.002893 0.005966 0.999911</key>
-				<key time="46.041668">-0.011598 0.006571 0.006009 0.999893</key>
-				<key time="46.083332">-0.011660 0.010668 0.006057 0.999857</key>
-				<key time="46.125000">-0.011720 0.015193 0.006111 0.999797</key>
-				<key time="46.166668">-0.011775 0.020151 0.006171 0.999709</key>
-				<key time="46.208332">-0.011823 0.025541 0.006236 0.999584</key>
-				<key time="46.250000">-0.011861 0.031360 0.006307 0.999418</key>
-				<key time="46.291668">-0.011885 0.037598 0.006384 0.999202</key>
-				<key time="46.333332">-0.011891 0.044243 0.006465 0.998929</key>
-				<key time="46.375000">-0.011877 0.051277 0.006550 0.998592</key>
-				<key time="46.416668">-0.011837 0.058680 0.006638 0.998185</key>
-				<key time="46.458332">-0.011769 0.066427 0.006729 0.997699</key>
-				<key time="46.500000">-0.011670 0.074488 0.006821 0.997130</key>
-				<key time="46.541668">-0.011538 0.082832 0.006912 0.996473</key>
-				<key time="46.583332">-0.011371 0.091424 0.007001 0.995723</key>
-				<key time="46.625000">-0.011169 0.100226 0.007088 0.994877</key>
-				<key time="46.666668">-0.010931 0.109198 0.007169 0.993934</key>
-				<key time="46.708332">-0.010662 0.118300 0.007245 0.992894</key>
-				<key time="46.750000">-0.010362 0.127489 0.007313 0.991759</key>
-				<key time="46.791668">-0.010038 0.136721 0.007374 0.990531</key>
-				<key time="46.833332">-0.009694 0.145955 0.007427 0.989216</key>
-				<key time="46.875000">-0.009338 0.155149 0.007472 0.987819</key>
-				<key time="46.916668">-0.008978 0.164263 0.007510 0.986347</key>
-				<key time="46.958332">-0.008623 0.173260 0.007541 0.984810</key>
-				<key time="47.000000">-0.008280 0.182105 0.007567 0.983215</key>
-				<key time="47.041668">-0.007960 0.190767 0.007591 0.981574</key>
-				<key time="47.083332">-0.007672 0.199219 0.007614 0.979895</key>
-				<key time="47.125000">-0.007423 0.207441 0.007639 0.978190</key>
-				<key time="47.166668">-0.007221 0.215413 0.007669 0.976466</key>
-				<key time="47.208332">-0.007073 0.223125 0.007705 0.974734</key>
-				<key time="47.250000">-0.006983 0.230571 0.007752 0.973000</key>
-				<key time="47.291668">-0.006955 0.237749 0.007811 0.971270</key>
-				<key time="47.333332">-0.006989 0.244666 0.007883 0.969550</key>
-				<key time="47.375000">-0.007088 0.251330 0.007971 0.967843</key>
-				<key time="47.416668">-0.007249 0.257757 0.008075 0.966149</key>
-				<key time="47.458332">-0.007469 0.263966 0.008196 0.964468</key>
-				<key time="47.500000">-0.007746 0.269981 0.008335 0.962798</key>
-				<key time="47.541668">-0.008075 0.275830 0.008491 0.961135</key>
-				<key time="47.583332">-0.008451 0.281541 0.008664 0.959473</key>
-				<key time="47.625000">-0.008869 0.287147 0.008854 0.957805</key>
-				<key time="47.708332">-0.009807 0.298177 0.009281 0.954415</key>
-				<key time="47.750000">-0.010318 0.303669 0.009517 0.952674</key>
-				<key time="47.791668">-0.010849 0.309187 0.009768 0.950889</key>
-				<key time="47.833332">-0.011397 0.314763 0.010033 0.949049</key>
-				<key time="47.875000">-0.011958 0.320422 0.010311 0.947143</key>
-				<key time="47.916668">-0.012527 0.326187 0.010602 0.945163</key>
-				<key time="47.958332">-0.013103 0.332077 0.010906 0.943098</key>
-				<key time="48.000000">-0.013683 0.338106 0.011224 0.940942</key>
-				<key time="48.041668">-0.014263 0.344284 0.011554 0.938686</key>
-				<key time="48.083332">-0.014842 0.350615 0.011896 0.936327</key>
-				<key time="48.125000">-0.015418 0.357098 0.012251 0.933859</key>
-				<key time="48.166668">-0.015989 0.363729 0.012618 0.931282</key>
-				<key time="48.208332">-0.016554 0.370501 0.012997 0.928594</key>
-				<key time="48.250000">-0.017112 0.377401 0.013387 0.925795</key>
-				<key time="48.291668">-0.017661 0.384414 0.013788 0.922889</key>
-				<key time="48.333332">-0.018202 0.391529 0.014200 0.919876</key>
-				<key time="48.375000">-0.018733 0.398717 0.014622 0.916766</key>
-				<key time="48.416668">-0.019257 0.405999 0.015056 0.913547</key>
-				<key time="48.458332">-0.019765 0.413230 0.015494 0.910280</key>
-				<key time="48.500000">-0.020285 0.420792 0.015960 0.906790</key>
-				<key time="48.541668">-0.020732 0.427408 0.016375 0.903673</key>
-				<key time="48.583332">-0.021373 0.437043 0.016994 0.899026</key>
-			</rotationKeys>
-		</channel>
-	</channels>
-</animation>

BIN
Samples/Sponza/Assets/Lion_Roughness.ankitex


+ 0 - 27
Samples/Sponza/Assets/MTL_sphere_f75b7f396643f2d.ankimtl

@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shadows="0">
-	<shaderProgram name="GBufferGeneric">
-		<mutation>
-			<mutator name="DIFFUSE_TEX" value="0"/>
-			<mutator name="SPECULAR_TEX" value="0"/>
-			<mutator name="ROUGHNESS_METALNESS_TEX" value="0"/>
-			<mutator name="NORMAL_TEX" value="0"/>
-			<mutator name="PARALLAX" value="0"/>
-			<mutator name="EMISSIVE_TEX" value="0"/>
-			<mutator name="ALPHA_TEST" value="0"/>
-		</mutation>
-	</shaderProgram>
-
-	<inputs>
-		
-		<input name="m_diffuseScale" value="1.000000 1.000000 1.000000 1.000000"/>
-		<input name="m_specularScale" value="0.040000 0.040000 0.040000"/>
-		<input name="m_roughnessScale" value="0.000000"/>
-		<input name="m_metalnessScale" value="1.000000"/>
-		
-		<input name="m_emissionScale" value="0.000000 0.000000 0.000000"/>
-		<input name="m_subsurface" value="0.000000"/>
-		
-	</inputs>
-</material>

File diff suppressed because it is too large
+ 333 - 84
Samples/Sponza/Assets/Scene.lua


+ 0 - 8
Samples/Sponza/Assets/Sphere_MTL_sphere_8df61cca01d9efcc.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/Sphere_b335c223b7f61071.ankimesh</mesh>
-			<material>Assets/MTL_sphere_f75b7f396643f2d.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

BIN
Samples/Sponza/Assets/Sphere_b335c223b7f61071.ankimesh


BIN
Samples/Sponza/Assets/Sponza_Ceiling_roughness_tga.ankitex


BIN
Samples/Sponza/Assets/Sponza_Column_b_roughness_tga.ankitex


BIN
Samples/Sponza/Assets/Sponza_Column_c_roughness_tga.ankitex


BIN
Samples/Sponza/Assets/Sponza_Curtain_Red_normal.ankitex


BIN
Samples/Sponza/Assets/Sponza_Curtain_Red_normal_tga_001.ankitex


BIN
Samples/Sponza/Assets/Sponza_Curtain_roughness_tga_001.ankitex


BIN
Samples/Sponza/Assets/Sponza_Details_metallic-Sponza_Details_roughness.ankitex


BIN
Samples/Sponza/Assets/Sponza_Details_normal.ankitex


BIN
Samples/Sponza/Assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex


BIN
Samples/Sponza/Assets/Sponza_FlagPole_normal.ankitex


BIN
Samples/Sponza/Assets/Sponza_FlagPole_roughness.ankitex


BIN
Samples/Sponza/Assets/Sponza_Floor_normal.ankitex


BIN
Samples/Sponza/Assets/Sponza_Floor_roughness.ankitex


BIN
Samples/Sponza/Assets/Sponza_Roof_normal.ankitex


BIN
Samples/Sponza/Assets/Sponza_Roof_roughness.ankitex


BIN
Samples/Sponza/Assets/Sponza_Thorn_roughness.ankitex


+ 0 - 8
Samples/Sponza/Assets/Suzanne_MTL_monkey_2913e2ee09fd26cb.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/Suzanne_e3526e1428c0763c.ankimesh</mesh>
-			<material>Assets/MTL_monkey_381dce880f246211.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

BIN
Samples/Sponza/Assets/Suzanne_e3526e1428c0763c.ankimesh


BIN
Samples/Sponza/Assets/VaseHanging_normal_tga.ankitex


BIN
Samples/Sponza/Assets/VaseHanging_roughness_tga.ankitex


BIN
Samples/Sponza/Assets/VasePlant_normal.ankitex


BIN
Samples/Sponza/Assets/VaseRound_normal.ankitex


BIN
Samples/Sponza/Assets/VaseRound_roughness.ankitex


BIN
Samples/Sponza/Assets/Vase_roughness.ankitex


+ 0 - 8
Samples/Sponza/Assets/arc_2_arch.001_7f6cd4617500b9e.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/arc_2_5fe181d03e97a985.ankimesh</mesh>
-			<material>Assets/arch.001_efebbb2a6f84fff0.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/arch_a_arch_ee9218d363e2c47c.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/arch_a_2340d230b53e2a69.ankimesh</mesh>
-			<material>Assets/arch_e0c8c7e29c806284.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/arch_support_big_column_c_b5e8839cd276d81.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/arch_support_big_68d8367a811fb94b.ankimesh</mesh>
-			<material>Assets/column_c_43f866fc7b9f0169.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/arch_support_med_column_c_7324dbf874b0902d.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/arch_support_med_f674c0ad36e855d5.ankimesh</mesh>
-			<material>Assets/column_c_43f866fc7b9f0169.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/arch_support_tiny_column_c_74601fe6ddc602fd.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/arch_support_tiny_6e5678a158e0a576.ankimesh</mesh>
-			<material>Assets/column_c_43f866fc7b9f0169.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

BIN
Samples/Sponza/Assets/background.ankitex


BIN
Samples/Sponza/Assets/background_ddn.ankitex


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


+ 0 - 12
Samples/Sponza/Assets/candle_3_l.001_MTL_Candle_MTL_Flame_9eab681a977f1ff8.ankimdl

@@ -1,12 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh subMeshIndex="0">Assets/candle_3_l.001_9966f5242837df58.ankimesh</mesh>
-			<material>Assets/MTL_Candle_33551c344b101f46.ankimtl</material>
-		</modelPatch>
-		<modelPatch>
-			<mesh subMeshIndex="1">Assets/candle_3_l.001_9966f5242837df58.ankimesh</mesh>
-			<material>Assets/MTL_Flame_35971c3f216651ba.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/carpet_fabric_a_7b2d33bd44d3c83a.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/carpet_9773eaac1e11dc54.ankimesh</mesh>
-			<material>Assets/fabric_a_945c29fc221550fb.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/carpet_fabric_d_327fde8eebe28165.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/carpet_9773eaac1e11dc54.ankimesh</mesh>
-			<material>Assets/fabric_d_8ff4aebb25bf20b0.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/carpet_fabric_e_1daa4785c181ff7c.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/carpet_9773eaac1e11dc54.ankimesh</mesh>
-			<material>Assets/fabric_e_d1c5a44841c48230.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/ceiling_ceiling_652d2c332b14f7c1.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/ceiling_3fd94cde277a48e1.ankimesh</mesh>
-			<material>Assets/ceiling_3fd94cde277a48e1.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

BIN
Samples/Sponza/Assets/chain_texture_tga.ankitex


+ 0 - 8
Samples/Sponza/Assets/column_a.001_column_a_33375155773963c4.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/column_a.001_d7e2987db26e19ee.ankimesh</mesh>
-			<material>Assets/column_a_1e1bacae3460b88.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/column_a_column_a_e2bba72dc764b614.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/column_a_1e1bacae3460b88.ankimesh</mesh>
-			<material>Assets/column_a_1e1bacae3460b88.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/column_b_column_b_2147575ec1137d95.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/column_b_c9391d56bff59fc3.ankimesh</mesh>
-			<material>Assets/column_b_c9391d56bff59fc3.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/column_b_top_column_b_5a662a93fda5781c.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/column_b_top_b71e6265349a8db8.ankimesh</mesh>
-			<material>Assets/column_b_c9391d56bff59fc3.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/column_c_column_c_8cfb4773e7984c6c.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/column_c_43f866fc7b9f0169.ankimesh</mesh>
-			<material>Assets/column_c_43f866fc7b9f0169.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/column_c_small_column_b_60ac9c1e9bb600f6.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/column_c_small_a940cbc4b06b29e0.ankimesh</mesh>
-			<material>Assets/column_b_c9391d56bff59fc3.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/column_c_small_top_column_b_212d13057d434c4c.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/column_c_small_top_ac474e000598477b.ankimesh</mesh>
-			<material>Assets/column_b_c9391d56bff59fc3.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/column_c_square_column_c_31141c63525ac8c7.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/column_c_square_34f84a5277d35506.ankimesh</mesh>
-			<material>Assets/column_c_43f866fc7b9f0169.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 1
Samples/Sponza/Assets/convert_textures.sh

@@ -1 +0,0 @@
-ls ~/etc/blender/maps/sponza-crytek-pbr/textures/ | xargs -I % echo % | grep .tga | rev | cut -b4- | rev | xargs -I % ~/src/anki/tools/texture/convert_image.py -i ~/etc/blender/maps/sponza-crytek-pbr/textures/%tga -o %ankitex -t 2D

+ 0 - 8
Samples/Sponza/Assets/door_b_details_8719c311905b9f09.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/door_b_43d9d0f054a59e0d.ankimesh</mesh>
-			<material>Assets/details_4242afc5fc479920.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

BIN
Samples/Sponza/Assets/fabric_a_945c29fc221550fb.ankimesh


+ 0 - 8
Samples/Sponza/Assets/fabric_a_fabric_c_c4b70d2083f41709.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/fabric_a_945c29fc221550fb.ankimesh</mesh>
-			<material>Assets/fabric_c_c8bf70dee411d1bd.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

BIN
Samples/Sponza/Assets/fabric_b_e8dd2769dc642ab7.ankimesh


+ 0 - 8
Samples/Sponza/Assets/fabric_b_fabric_f_3f1537f39a3f726f.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/fabric_b_e8dd2769dc642ab7.ankimesh</mesh>
-			<material>Assets/fabric_f_d54bbaca38ed4391.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/flag_pole_flagpole_aaa6bb6e0416a890.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/flag_pole_b7fcab939d35270d.ankimesh</mesh>
-			<material>Assets/flagpole_6c7e0eb8dd33b39e.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/hanging_vase_vase_hanging_706736339658bc85.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/hanging_vase_a37dedd7f8c3beeb.ankimesh</mesh>
-			<material>Assets/vase_hanging_c2d2b40b27cacd7d.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

BIN
Samples/Sponza/Assets/leaf_3a245efd17475037.ankimesh


+ 0 - 8
Samples/Sponza/Assets/leaf_b_leaf_582f73514dcafca7.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/leaf_b_686ab977af97774c.ankimesh</mesh>
-			<material>Assets/leaf_3a245efd17475037.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/leaf_leaf_81e750c893cfd021.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/leaf_3a245efd17475037.ankimesh</mesh>
-			<material>Assets/leaf_3a245efd17475037.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

BIN
Samples/Sponza/Assets/lion.ankitex


BIN
Samples/Sponza/Assets/lion_ddn.ankitex


+ 0 - 8
Samples/Sponza/Assets/lion_frame_lion_stand_1508a85aa76feee9.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/lion_frame_c8b97a33096fbdb.ankimesh</mesh>
-			<material>Assets/lion_stand_ab5e3642131ad971.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/lion_lion_4d0c52a46bec131.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/lion_c45d3035db3bc17b.ankimesh</mesh>
-			<material>Assets/lion_c45d3035db3bc17b.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/list_b_bricks_ce9a437a3dc16846.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/list_b_457f406a16f12d4d.ankimesh</mesh>
-			<material>Assets/bricks_8bd6f24aa0ad3654.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/list_bricks_ed8eb2090688095e.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/list_8b0526c84dd681e3.ankimesh</mesh>
-			<material>Assets/bricks_8bd6f24aa0ad3654.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/marble_list_arch_608c34e5ea65c976.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/marble_list_f312f13d76c75a21.ankimesh</mesh>
-			<material>Assets/arch_e0c8c7e29c806284.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/metal_rod_flagpole_9479a6e38cbe7f92.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/metal_rod_f68ba1d1e70f4801.ankimesh</mesh>
-			<material>Assets/flagpole_6c7e0eb8dd33b39e.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/rod_end_flagpole_dabbea129c33a92d.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/rod_end_e8bfe2abf71f7057.ankimesh</mesh>
-			<material>Assets/flagpole_6c7e0eb8dd33b39e.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/round_window_arch.001_fd6a8a3b62ac68f8.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/round_window_e1fb3c1edc11246b.ankimesh</mesh>
-			<material>Assets/arch.001_efebbb2a6f84fff0.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/small_window_inner_ceiling_5c90e4976a019db.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/small_window_inner_def811d202476946.ankimesh</mesh>
-			<material>Assets/ceiling_3fd94cde277a48e1.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/small_window_outter_arch.001_a7b87e3effcac7cc.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/small_window_outter_9a4f8126fe7e5119.ankimesh</mesh>
-			<material>Assets/arch.001_efebbb2a6f84fff0.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/sponza_00_leaf_8971879d70912750.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/sponza_00_ae01670872faa30.ankimesh</mesh>
-			<material>Assets/leaf_3a245efd17475037.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/sponza_05_bricks_18a0c6948fe21908.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/sponza_05_e7b110614ca46ef3.ankimesh</mesh>
-			<material>Assets/bricks_8bd6f24aa0ad3654.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/sponza_06_bricks_3bf0e0da0e9e2662.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/sponza_06_fd85d8293143f003.ankimesh</mesh>
-			<material>Assets/bricks_8bd6f24aa0ad3654.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/sponza_117_floor_54a39f24ac527941.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/sponza_117_9e80200db76c37cf.ankimesh</mesh>
-			<material>Assets/floor_71cbd2644e53ab8c.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

BIN
Samples/Sponza/Assets/sponza_122_a88206b9ae16e15.ankimesh


+ 0 - 8
Samples/Sponza/Assets/sponza_122_arch.001_14fd292eefa0a1aa.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/sponza_122_a88206b9ae16e15.ankimesh</mesh>
-			<material>Assets/arch.001_efebbb2a6f84fff0.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/sponza_17_arch_1e1cd51ca1d1f70d.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/sponza_17_95d7e6624ab3177.ankimesh</mesh>
-			<material>Assets/arch_e0c8c7e29c806284.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/sponza_18_floor_567a5d17476d6a45.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/sponza_18_8f59c6e13449896e.ankimesh</mesh>
-			<material>Assets/floor_71cbd2644e53ab8c.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/sponza_257_ceiling_4fe40e1d7c22b53.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/sponza_257_8ac7b83ec0e64ca0.ankimesh</mesh>
-			<material>Assets/ceiling_3fd94cde277a48e1.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/sponza_258_bricks_450cd1e90d9e98cd.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/sponza_258_9e5285ce7e2189af.ankimesh</mesh>
-			<material>Assets/bricks_8bd6f24aa0ad3654.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/sponza_277_leaf_1925984a6862a79d.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/sponza_277_a862a3463155379b.ankimesh</mesh>
-			<material>Assets/leaf_3a245efd17475037.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/sponza_278_leaf_a6f3f415115d14d4.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/sponza_278_2814c1fc2c992170.ankimesh</mesh>
-			<material>Assets/leaf_3a245efd17475037.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/sponza_279_leaf_1869e5ec81c20a1d.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/sponza_279_6912e5f5d4128531.ankimesh</mesh>
-			<material>Assets/leaf_3a245efd17475037.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

+ 0 - 8
Samples/Sponza/Assets/sponza_280_leaf_21937133f5eb6d92.ankimdl

@@ -1,8 +0,0 @@
-<model>
-	<modelPatches>
-		<modelPatch>
-			<mesh>Assets/sponza_280_8dec8aa3e97a7a31.ankimesh</mesh>
-			<material>Assets/leaf_3a245efd17475037.ankimtl</material>
-		</modelPatch>
-	</modelPatches>
-</model>

Some files were not shown because too many files changed in this diff