Răsfoiți Sursa

Port sponza to the new material format

Panagiotis Christopoulos Charitos 5 ani în urmă
părinte
comite
c905b915bc
100 a modificat fișierele cu 359 adăugiri și 380 ștergeri
  1. BIN
      samples/simple_scene/assets/simple_scene.blend
  2. BIN
      samples/sponza/assets/arc_2.ankimesh
  3. 10 14
      samples/sponza/assets/arch.001.ankimtl
  4. 10 14
      samples/sponza/assets/arch.ankimtl
  5. BIN
      samples/sponza/assets/arch_a.ankimesh
  6. BIN
      samples/sponza/assets/arch_support_big.ankimesh
  7. BIN
      samples/sponza/assets/arch_support_med.ankimesh
  8. BIN
      samples/sponza/assets/arch_support_tiny.ankimesh
  9. 10 14
      samples/sponza/assets/bricks.ankimtl
  10. BIN
      samples/sponza/assets/carpet.ankimesh
  11. BIN
      samples/sponza/assets/ceiling.ankimesh
  12. 9 13
      samples/sponza/assets/ceiling.ankimtl
  13. 9 13
      samples/sponza/assets/chain.ankimtl
  14. BIN
      samples/sponza/assets/column_a.001.ankimesh
  15. BIN
      samples/sponza/assets/column_a.ankimesh
  16. 10 14
      samples/sponza/assets/column_a.ankimtl
  17. BIN
      samples/sponza/assets/column_b.ankimesh
  18. 10 14
      samples/sponza/assets/column_b.ankimtl
  19. BIN
      samples/sponza/assets/column_b_top.ankimesh
  20. BIN
      samples/sponza/assets/column_c.ankimesh
  21. 10 14
      samples/sponza/assets/column_c.ankimtl
  22. BIN
      samples/sponza/assets/column_c_small.ankimesh
  23. BIN
      samples/sponza/assets/column_c_small_top.ankimesh
  24. BIN
      samples/sponza/assets/column_c_square.ankimesh
  25. 10 14
      samples/sponza/assets/details.ankimtl
  26. BIN
      samples/sponza/assets/door_b.ankimesh
  27. BIN
      samples/sponza/assets/fabric_a.ankimesh
  28. 10 14
      samples/sponza/assets/fabric_a.ankimtl
  29. BIN
      samples/sponza/assets/fabric_b.ankimesh
  30. 10 14
      samples/sponza/assets/fabric_c.ankimtl
  31. 10 14
      samples/sponza/assets/fabric_d.ankimtl
  32. 10 14
      samples/sponza/assets/fabric_e.ankimtl
  33. 10 14
      samples/sponza/assets/fabric_f.ankimtl
  34. 6 10
      samples/sponza/assets/fire.ankimtl
  35. BIN
      samples/sponza/assets/flag_pole.ankimesh
  36. 10 14
      samples/sponza/assets/flagpole.ankimtl
  37. 10 14
      samples/sponza/assets/floor.ankimtl
  38. BIN
      samples/sponza/assets/hanging_vase.ankimesh
  39. BIN
      samples/sponza/assets/leaf.ankimesh
  40. 10 14
      samples/sponza/assets/leaf.ankimtl
  41. BIN
      samples/sponza/assets/leaf_b.ankimesh
  42. BIN
      samples/sponza/assets/lion.ankimesh
  43. 10 14
      samples/sponza/assets/lion.ankimtl
  44. BIN
      samples/sponza/assets/lion_frame.ankimesh
  45. 10 14
      samples/sponza/assets/lion_stand.ankimtl
  46. BIN
      samples/sponza/assets/list.ankimesh
  47. BIN
      samples/sponza/assets/list_b.ankimesh
  48. BIN
      samples/sponza/assets/marble_list.ankimesh
  49. BIN
      samples/sponza/assets/metal_rod.ankimesh
  50. BIN
      samples/sponza/assets/rod_end.ankimesh
  51. 10 14
      samples/sponza/assets/roof.ankimtl
  52. BIN
      samples/sponza/assets/round_window.ankimesh
  53. 12 0
      samples/sponza/assets/scene.lua
  54. BIN
      samples/sponza/assets/sky.ankimesh
  55. 9 13
      samples/sponza/assets/sky.ankimtl
  56. BIN
      samples/sponza/assets/small_window_inner.ankimesh
  57. BIN
      samples/sponza/assets/small_window_outter.ankimesh
  58. 6 10
      samples/sponza/assets/smoke.ankimtl
  59. BIN
      samples/sponza/assets/sponza_00.ankimesh
  60. BIN
      samples/sponza/assets/sponza_05.ankimesh
  61. BIN
      samples/sponza/assets/sponza_06.ankimesh
  62. BIN
      samples/sponza/assets/sponza_117.ankimesh
  63. BIN
      samples/sponza/assets/sponza_122.ankimesh
  64. BIN
      samples/sponza/assets/sponza_17.ankimesh
  65. BIN
      samples/sponza/assets/sponza_18.ankimesh
  66. BIN
      samples/sponza/assets/sponza_257.ankimesh
  67. BIN
      samples/sponza/assets/sponza_258.ankimesh
  68. BIN
      samples/sponza/assets/sponza_277.ankimesh
  69. BIN
      samples/sponza/assets/sponza_278.ankimesh
  70. BIN
      samples/sponza/assets/sponza_279.ankimesh
  71. BIN
      samples/sponza/assets/sponza_280.ankimesh
  72. BIN
      samples/sponza/assets/sponza_281.ankimesh
  73. BIN
      samples/sponza/assets/sponza_34.ankimesh
  74. BIN
      samples/sponza/assets/sponza_35.ankimesh
  75. BIN
      samples/sponza/assets/sponza_36.ankimesh
  76. BIN
      samples/sponza/assets/sponza_369.002.ankimesh
  77. BIN
      samples/sponza/assets/sponza_379.ankimesh
  78. BIN
      samples/sponza/assets/sponza_380.ankimesh
  79. BIN
      samples/sponza/assets/sponza_381.ankimesh
  80. BIN
      samples/sponza/assets/sponza_382.ankimesh
  81. BIN
      samples/sponza/assets/sponza_66.ankimesh
  82. BIN
      samples/sponza/assets/sponza_68.ankimesh
  83. BIN
      samples/sponza/assets/sponza_69.ankimesh
  84. BIN
      samples/sponza/assets/square_door.ankimesh
  85. BIN
      samples/sponza/assets/vase.ankimesh
  86. 10 14
      samples/sponza/assets/vase.ankimtl
  87. BIN
      samples/sponza/assets/vase_chains.ankimesh
  88. 10 14
      samples/sponza/assets/vase_fl.ankimtl
  89. BIN
      samples/sponza/assets/vase_flowers.ankimesh
  90. BIN
      samples/sponza/assets/vase_hanger.ankimesh
  91. 10 14
      samples/sponza/assets/vase_hanging.ankimtl
  92. 10 14
      samples/sponza/assets/vase_round.ankimtl
  93. BIN
      samples/sponza/assets/window.ankimesh
  94. 1 1
      shaders/ForwardShadingFog.ankiprog
  95. 1 1
      shaders/ForwardShadingParticles.ankiprog
  96. 37 8
      src/anki/importer/GltfImporter.cpp
  97. 4 0
      src/anki/importer/GltfImporter.h
  98. 12 2
      src/anki/importer/GltfImporterMesh.cpp
  99. 1 1
      src/anki/resource/MaterialResource2.cpp
  100. 32 0
      tools/gltf_importer/Main.cpp

BIN
samples/simple_scene/assets/simple_scene.blend


BIN
samples/sponza/assets/arc_2.ankimesh


+ 10 - 14
samples/sponza/assets/arch.001.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/sponza_arch_diff.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/sponza_arch_spec.ankitex"/>
-		<input shaderInput="metallic" value="0.000000"/>
-		<input shaderInput="normalTex" value="assets/sponza_arch_ddn.ankitex"/>
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.000000"/>
+		<input shaderVar="u_diffTex" value="assets/sponza_arch_diff.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/sponza_arch_spec.ankitex"/>
+		<input shaderVar="m_metallic" value="0.000000"/>
+		<input shaderVar="u_normalTex" value="assets/sponza_arch_ddn.ankitex"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.000000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

+ 10 - 14
samples/sponza/assets/arch.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/sponza_arch_diff_tga.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/sponza_arch_spec_tga.ankitex"/>
-		<input shaderInput="metallic" value="0.000000"/>
-		<input shaderInput="normalTex" value="assets/sponza_arch_ddn_tga.ankitex"/>
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.000000"/>
+		<input shaderVar="u_diffTex" value="assets/sponza_arch_diff_tga.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/sponza_arch_spec_tga.ankitex"/>
+		<input shaderVar="m_metallic" value="0.000000"/>
+		<input shaderVar="u_normalTex" value="assets/sponza_arch_ddn_tga.ankitex"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.000000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

BIN
samples/sponza/assets/arch_a.ankimesh


BIN
samples/sponza/assets/arch_support_big.ankimesh


BIN
samples/sponza/assets/arch_support_med.ankimesh


BIN
samples/sponza/assets/arch_support_tiny.ankimesh


+ 10 - 14
samples/sponza/assets/bricks.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/sponza_bricks_a_diff_tga.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/sponza_arch_spec_tga.ankitex"/>
-		<input shaderInput="metallic" value="0.000000"/>
-		<input shaderInput="normalTex" value="assets/sponza_bricks_a_ddn_tga.ankitex"/>
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.000000"/>
+		<input shaderVar="u_diffTex" value="assets/sponza_bricks_a_diff_tga.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/sponza_arch_spec_tga.ankitex"/>
+		<input shaderVar="m_metallic" value="0.000000"/>
+		<input shaderVar="u_normalTex" value="assets/sponza_bricks_a_ddn_tga.ankitex"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.000000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

BIN
samples/sponza/assets/carpet.ankimesh


BIN
samples/sponza/assets/ceiling.ankimesh


+ 9 - 13
samples/sponza/assets/ceiling.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="0"/>
 		<mutator name="NORMAL_TEX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/sponza_ceiling_a_diff_tga.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/Sponza_Ceiling_roughness_tga.ankitex"/>
-		<input shaderInput="metallic" value="0.000000"/>
+		<input shaderVar="u_diffTex" value="assets/sponza_ceiling_a_diff_tga.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/Sponza_Ceiling_roughness_tga.ankitex"/>
+		<input shaderVar="m_metallic" value="0.000000"/>
 		
 		
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.000000"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.000000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

+ 9 - 13
samples/sponza/assets/chain.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="0"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="0"/>
 		<mutator name="NORMAL_TEX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/chain_texture_tga.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughness" value="0.500000"/>
-		<input shaderInput="metallic" value="0.000000"/>
+		<input shaderVar="u_diffTex" value="assets/chain_texture_tga.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="m_roughness" value="0.500000"/>
+		<input shaderVar="m_metallic" value="0.000000"/>
 		
 		
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.000000"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.000000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

BIN
samples/sponza/assets/column_a.001.ankimesh


BIN
samples/sponza/assets/column_a.ankimesh


+ 10 - 14
samples/sponza/assets/column_a.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/sponza_column_a_diff_tga.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/sponza_column_a_spec_tga.ankitex"/>
-		<input shaderInput="metallic" value="0.000000"/>
-		<input shaderInput="normalTex" value="assets/sponza_column_a_ddn_tga.ankitex"/>
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.000000"/>
+		<input shaderVar="u_diffTex" value="assets/sponza_column_a_diff_tga.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/sponza_column_a_spec_tga.ankitex"/>
+		<input shaderVar="m_metallic" value="0.000000"/>
+		<input shaderVar="u_normalTex" value="assets/sponza_column_a_ddn_tga.ankitex"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.000000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

BIN
samples/sponza/assets/column_b.ankimesh


+ 10 - 14
samples/sponza/assets/column_b.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/sponza_column_b_diff_tga.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/Sponza_Column_b_roughness_tga.ankitex"/>
-		<input shaderInput="metallic" value="0.000000"/>
-		<input shaderInput="normalTex" value="assets/sponza_column_b_ddn_tga.ankitex"/>
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.000000"/>
+		<input shaderVar="u_diffTex" value="assets/sponza_column_b_diff_tga.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/Sponza_Column_b_roughness_tga.ankitex"/>
+		<input shaderVar="m_metallic" value="0.000000"/>
+		<input shaderVar="u_normalTex" value="assets/sponza_column_b_ddn_tga.ankitex"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.000000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

BIN
samples/sponza/assets/column_b_top.ankimesh


BIN
samples/sponza/assets/column_c.ankimesh


+ 10 - 14
samples/sponza/assets/column_c.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/sponza_column_c_diff_tga.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/Sponza_Column_c_roughness_tga.ankitex"/>
-		<input shaderInput="metallic" value="0.000000"/>
-		<input shaderInput="normalTex" value="assets/sponza_column_c_ddn_tga.ankitex"/>
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.000000"/>
+		<input shaderVar="u_diffTex" value="assets/sponza_column_c_diff_tga.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/Sponza_Column_c_roughness_tga.ankitex"/>
+		<input shaderVar="m_metallic" value="0.000000"/>
+		<input shaderVar="u_normalTex" value="assets/sponza_column_c_ddn_tga.ankitex"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.000000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

BIN
samples/sponza/assets/column_c_small.ankimesh


BIN
samples/sponza/assets/column_c_small_top.ankimesh


BIN
samples/sponza/assets/column_c_square.ankimesh


+ 10 - 14
samples/sponza/assets/details.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/sponza_details_diff.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/Sponza_Details_metallic-Sponza_Details_roughness.ankitex"/>
-		<input shaderInput="metallicTex" value="assets/Sponza_Details_metallic-Sponza_Details_roughness.ankitex"/>
-		<input shaderInput="normalTex" value="assets/Sponza_Details_normal.ankitex"/>
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.000000"/>
+		<input shaderVar="u_diffTex" value="assets/sponza_details_diff.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/Sponza_Details_metallic-Sponza_Details_roughness.ankitex"/>
+		<input shaderVar="u_metallicTex" value="assets/Sponza_Details_metallic-Sponza_Details_roughness.ankitex"/>
+		<input shaderVar="u_normalTex" value="assets/Sponza_Details_normal.ankitex"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.000000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

BIN
samples/sponza/assets/door_b.ankimesh


BIN
samples/sponza/assets/fabric_a.ankimesh


+ 10 - 14
samples/sponza/assets/fabric_a.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/sponza_fabric_blue_diff.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
-		<input shaderInput="metallicTex" value="assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
-		<input shaderInput="normalTex" value="assets/Sponza_Curtain_Red_normal.ankitex"/>
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.100000"/>
+		<input shaderVar="u_diffTex" value="assets/sponza_fabric_blue_diff.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
+		<input shaderVar="u_metallicTex" value="assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
+		<input shaderVar="u_normalTex" value="assets/Sponza_Curtain_Red_normal.ankitex"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.100000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

BIN
samples/sponza/assets/fabric_b.ankimesh


+ 10 - 14
samples/sponza/assets/fabric_c.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/sponza_fabric_green_diff.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
-		<input shaderInput="metallicTex" value="assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
-		<input shaderInput="normalTex" value="assets/Sponza_Curtain_Red_normal.ankitex"/>
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.250000"/>
+		<input shaderVar="u_diffTex" value="assets/sponza_fabric_green_diff.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
+		<input shaderVar="u_metallicTex" value="assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
+		<input shaderVar="u_normalTex" value="assets/Sponza_Curtain_Red_normal.ankitex"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.250000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

+ 10 - 14
samples/sponza/assets/fabric_d.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/sponza_fabric_diff.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
-		<input shaderInput="metallicTex" value="assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
-		<input shaderInput="normalTex" value="assets/Sponza_Curtain_Red_normal.ankitex"/>
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.100000"/>
+		<input shaderVar="u_diffTex" value="assets/sponza_fabric_diff.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
+		<input shaderVar="u_metallicTex" value="assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
+		<input shaderVar="u_normalTex" value="assets/Sponza_Curtain_Red_normal.ankitex"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.100000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

+ 10 - 14
samples/sponza/assets/fabric_e.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/sponza_fabric_green_diff.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
-		<input shaderInput="metallicTex" value="assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
-		<input shaderInput="normalTex" value="assets/Sponza_Curtain_Red_normal.ankitex"/>
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.100000"/>
+		<input shaderVar="u_diffTex" value="assets/sponza_fabric_green_diff.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
+		<input shaderVar="u_metallicTex" value="assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
+		<input shaderVar="u_normalTex" value="assets/Sponza_Curtain_Red_normal.ankitex"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.100000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

+ 10 - 14
samples/sponza/assets/fabric_f.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/sponza_curtain_green_diff_tga.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/Sponza_Curtain_roughness_tga_001.ankitex"/>
-		<input shaderInput="metallic" value="0.000000"/>
-		<input shaderInput="normalTex" value="assets/Sponza_Curtain_Red_normal_tga_001.ankitex"/>
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.250000"/>
+		<input shaderVar="u_diffTex" value="assets/sponza_curtain_green_diff_tga.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/Sponza_Curtain_roughness_tga_001.ankitex"/>
+		<input shaderVar="m_metallic" value="0.000000"/>
+		<input shaderVar="u_normalTex" value="assets/Sponza_Curtain_Red_normal_tga_001.ankitex"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.250000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

+ 6 - 10
samples/sponza/assets/fire.ankimtl

@@ -1,18 +1,14 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
-<material shaderProgram="shaders/ForwardShadingParticles.glslp" forwardShading="1" shadow="0">
-	<mutators>
+<material shaderProgram="shaders/ForwardShadingParticles.ankiprog" forwardShading="1" shadow="0">
+	<mutation>
 		<mutator name="ANIMATED_TEXTURE" value="0"/>
 		<mutator name="ANIMATED_TEXTURE" value="0"/>
 		<mutator name="LIGHT" value="0"/>
 		<mutator name="LIGHT" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="cameraRotMat" builtin="CAMERA_ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
-
-		<input shaderInput="diffuseMap" value="assets/ember_mid.ankitex"/>
-		<input shaderInput="colorScale" value="3 3 3 1.0"/>
-		<input shaderInput="colorBias" value="0 0 0 0"/>
+		<input shaderVar="u_diffuseMap" value="assets/ember_mid.ankitex"/>
+		<input shaderVar="m_colorScale" value="3 3 3 1.0"/>
+		<input shaderVar="m_colorBias" value="0 0 0 0"/>
 	</inputs>
 	</inputs>
 </material>
 </material>
 
 

BIN
samples/sponza/assets/flag_pole.ankimesh


+ 10 - 14
samples/sponza/assets/flagpole.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/sponza_flagpole_diff.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/Sponza_FlagPole_roughness.ankitex"/>
-		<input shaderInput="metallic" value="0.000000"/>
-		<input shaderInput="normalTex" value="assets/Sponza_FlagPole_normal.ankitex"/>
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.000000"/>
+		<input shaderVar="u_diffTex" value="assets/sponza_flagpole_diff.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/Sponza_FlagPole_roughness.ankitex"/>
+		<input shaderVar="m_metallic" value="0.000000"/>
+		<input shaderVar="u_normalTex" value="assets/Sponza_FlagPole_normal.ankitex"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.000000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

+ 10 - 14
samples/sponza/assets/floor.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/sponza_floor_a_diff.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/Sponza_Floor_roughness.ankitex"/>
-		<input shaderInput="metallic" value="0.000000"/>
-		<input shaderInput="normalTex" value="assets/Sponza_Floor_normal.ankitex"/>
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.000000"/>
+		<input shaderVar="u_diffTex" value="assets/sponza_floor_a_diff.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/Sponza_Floor_roughness.ankitex"/>
+		<input shaderVar="m_metallic" value="0.000000"/>
+		<input shaderVar="u_normalTex" value="assets/Sponza_Floor_normal.ankitex"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.000000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

BIN
samples/sponza/assets/hanging_vase.ankimesh


BIN
samples/sponza/assets/leaf.ankimesh


+ 10 - 14
samples/sponza/assets/leaf.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/sponza_thorn_diff.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/Sponza_Thorn_roughness.ankitex"/>
-		<input shaderInput="metallic" value="0.000000"/>
-		<input shaderInput="normalTex" value="assets/sponza_thorn_ddn.ankitex"/>
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.100000"/>
+		<input shaderVar="u_diffTex" value="assets/sponza_thorn_diff.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/Sponza_Thorn_roughness.ankitex"/>
+		<input shaderVar="m_metallic" value="0.000000"/>
+		<input shaderVar="u_normalTex" value="assets/sponza_thorn_ddn.ankitex"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.100000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

BIN
samples/sponza/assets/leaf_b.ankimesh


BIN
samples/sponza/assets/lion.ankimesh


+ 10 - 14
samples/sponza/assets/lion.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/lion.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/Lion_Roughness.ankitex"/>
-		<input shaderInput="metallic" value="0.000000"/>
-		<input shaderInput="normalTex" value="assets/lion_ddn.ankitex"/>
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.000000"/>
+		<input shaderVar="u_diffTex" value="assets/lion.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/Lion_Roughness.ankitex"/>
+		<input shaderVar="m_metallic" value="0.000000"/>
+		<input shaderVar="u_normalTex" value="assets/lion_ddn.ankitex"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.000000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

BIN
samples/sponza/assets/lion_frame.ankimesh


+ 10 - 14
samples/sponza/assets/lion_stand.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/background.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/Background_Roughness.ankitex"/>
-		<input shaderInput="metallic" value="0.000000"/>
-		<input shaderInput="normalTex" value="assets/background_ddn.ankitex"/>
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.000000"/>
+		<input shaderVar="u_diffTex" value="assets/background.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/Background_Roughness.ankitex"/>
+		<input shaderVar="m_metallic" value="0.000000"/>
+		<input shaderVar="u_normalTex" value="assets/background_ddn.ankitex"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.000000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

BIN
samples/sponza/assets/list.ankimesh


BIN
samples/sponza/assets/list_b.ankimesh


BIN
samples/sponza/assets/marble_list.ankimesh


BIN
samples/sponza/assets/metal_rod.ankimesh


BIN
samples/sponza/assets/rod_end.ankimesh


+ 10 - 14
samples/sponza/assets/roof.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/sponza_roof_diff.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/Sponza_Roof_roughness.ankitex"/>
-		<input shaderInput="metallic" value="0.000000"/>
-		<input shaderInput="normalTex" value="assets/Sponza_Roof_normal.ankitex"/>
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.000000"/>
+		<input shaderVar="u_diffTex" value="assets/sponza_roof_diff.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/Sponza_Roof_roughness.ankitex"/>
+		<input shaderVar="m_metallic" value="0.000000"/>
+		<input shaderVar="u_normalTex" value="assets/Sponza_Roof_normal.ankitex"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.000000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

BIN
samples/sponza/assets/round_window.ankimesh


+ 12 - 0
samples/sponza/assets/scene.lua

@@ -173,6 +173,9 @@ lcomp = node:getSceneNodeBase():getLightComponent()
 lcomp:setDiffuseColor(Vec4.new(20.007532, 8.208058, 5.410148, 1))
 lcomp:setDiffuseColor(Vec4.new(20.007532, 8.208058, 5.410148, 1))
 lcomp:setShadowEnabled(1)
 lcomp:setShadowEnabled(1)
 lcomp:setRadius(3.000000)
 lcomp:setRadius(3.000000)
+event = events:newLightEvent(0.0, -1.0, node:getSceneNodeBase())
+event:setIntensityMultiplier(Vec4.new(1.200000, 1.300000, 1.300000, 0.000000))
+event:setFrequency(2.000000, 0.020000)
 trf = Transform.new()
 trf = Transform.new()
 trf:setOrigin(Vec4.new(-10.783357, 2.494228, -3.841534, 0))
 trf:setOrigin(Vec4.new(-10.783357, 2.494228, -3.841534, 0))
 rot = Mat3x4.new()
 rot = Mat3x4.new()
@@ -186,6 +189,9 @@ lcomp = node:getSceneNodeBase():getLightComponent()
 lcomp:setDiffuseColor(Vec4.new(20.007532, 8.208058, 5.410148, 1))
 lcomp:setDiffuseColor(Vec4.new(20.007532, 8.208058, 5.410148, 1))
 lcomp:setShadowEnabled(1)
 lcomp:setShadowEnabled(1)
 lcomp:setRadius(3.000000)
 lcomp:setRadius(3.000000)
+event = events:newLightEvent(0.0, -1.0, node:getSceneNodeBase())
+event:setIntensityMultiplier(Vec4.new(1.200000, 1.300000, 1.300000, 0.000000))
+event:setFrequency(2.000000, 0.020000)
 trf = Transform.new()
 trf = Transform.new()
 trf:setOrigin(Vec4.new(-10.783357, 2.494228, 2.518101, 0))
 trf:setOrigin(Vec4.new(-10.783357, 2.494228, 2.518101, 0))
 rot = Mat3x4.new()
 rot = Mat3x4.new()
@@ -199,6 +205,9 @@ lcomp = node:getSceneNodeBase():getLightComponent()
 lcomp:setDiffuseColor(Vec4.new(20.007532, 8.208058, 5.410148, 1))
 lcomp:setDiffuseColor(Vec4.new(20.007532, 8.208058, 5.410148, 1))
 lcomp:setShadowEnabled(1)
 lcomp:setShadowEnabled(1)
 lcomp:setRadius(3.000000)
 lcomp:setRadius(3.000000)
+event = events:newLightEvent(0.0, -1.0, node:getSceneNodeBase())
+event:setIntensityMultiplier(Vec4.new(1.200000, 1.300000, 1.300000, 0.000000))
+event:setFrequency(2.000000, 0.020000)
 trf = Transform.new()
 trf = Transform.new()
 trf:setOrigin(Vec4.new(8.546165, 2.494228, 2.518101, 0))
 trf:setOrigin(Vec4.new(8.546165, 2.494228, 2.518101, 0))
 rot = Mat3x4.new()
 rot = Mat3x4.new()
@@ -212,6 +221,9 @@ lcomp = node:getSceneNodeBase():getLightComponent()
 lcomp:setDiffuseColor(Vec4.new(20.007532, 8.208058, 5.410148, 1))
 lcomp:setDiffuseColor(Vec4.new(20.007532, 8.208058, 5.410148, 1))
 lcomp:setShadowEnabled(1)
 lcomp:setShadowEnabled(1)
 lcomp:setRadius(3.000000)
 lcomp:setRadius(3.000000)
+event = events:newLightEvent(0.0, -1.0, node:getSceneNodeBase())
+event:setIntensityMultiplier(Vec4.new(1.200000, 1.300000, 1.300000, 0.000000))
+event:setFrequency(2.000000, 0.020000)
 trf = Transform.new()
 trf = Transform.new()
 trf:setOrigin(Vec4.new(8.546165, 2.494228, -3.830497, 0))
 trf:setOrigin(Vec4.new(8.546165, 2.494228, -3.830497, 0))
 rot = Mat3x4.new()
 rot = Mat3x4.new()

BIN
samples/sponza/assets/sky.ankimesh


+ 9 - 13
samples/sponza/assets/sky.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="0"/>
 		<mutator name="DIFFUSE_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="0"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="0"/>
 		<mutator name="NORMAL_TEX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffColor" value="0.352369 0.517735 0.800000"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughness" value="0.500000"/>
-		<input shaderInput="metallic" value="0.000000"/>
+		<input shaderVar="m_diffColor" value="0.352369 0.517735 0.800000"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="m_roughness" value="0.500000"/>
+		<input shaderVar="m_metallic" value="0.000000"/>
 		
 		
-		<input shaderInput="emission" value="10.000000 10.000000 10.000000"/>
-		<input shaderInput="subsurface" value="0.000000"/>
+		<input shaderVar="m_emission" value="1.000000 1.000000 1.000000"/>
+		<input shaderVar="m_subsurface" value="0.000000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

BIN
samples/sponza/assets/small_window_inner.ankimesh


BIN
samples/sponza/assets/small_window_outter.ankimesh


+ 6 - 10
samples/sponza/assets/smoke.ankimtl

@@ -1,18 +1,14 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
-<material shaderProgram="shaders/ForwardShadingParticles.glslp" forwardShading="1" shadow="0">
-	<mutators>
+<material shaderProgram="shaders/ForwardShadingParticles.ankiprog" forwardShading="1" shadow="0">
+	<mutation>
 		<mutator name="ANIMATED_TEXTURE" value="0"/>
 		<mutator name="ANIMATED_TEXTURE" value="0"/>
 		<mutator name="LIGHT" value="1"/>
 		<mutator name="LIGHT" value="1"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="cameraRotMat" builtin="CAMERA_ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
-
-		<input shaderInput="diffuseMap" value="assets/smoke.ankitex"/>
-		<input shaderInput="colorScale" value="1.0 1.0 1.0 1.0"/>
-		<input shaderInput="colorBias" value="0 0 0 0"/>
+		<input shaderVar="u_diffuseMap" value="assets/smoke.ankitex"/>
+		<input shaderVar="m_colorScale" value="1.0 1.0 1.0 1.0"/>
+		<input shaderVar="m_colorBias" value="0 0 0 0"/>
 	</inputs>
 	</inputs>
 </material>
 </material>
 
 

BIN
samples/sponza/assets/sponza_00.ankimesh


BIN
samples/sponza/assets/sponza_05.ankimesh


BIN
samples/sponza/assets/sponza_06.ankimesh


BIN
samples/sponza/assets/sponza_117.ankimesh


BIN
samples/sponza/assets/sponza_122.ankimesh


BIN
samples/sponza/assets/sponza_17.ankimesh


BIN
samples/sponza/assets/sponza_18.ankimesh


BIN
samples/sponza/assets/sponza_257.ankimesh


BIN
samples/sponza/assets/sponza_258.ankimesh


BIN
samples/sponza/assets/sponza_277.ankimesh


BIN
samples/sponza/assets/sponza_278.ankimesh


BIN
samples/sponza/assets/sponza_279.ankimesh


BIN
samples/sponza/assets/sponza_280.ankimesh


BIN
samples/sponza/assets/sponza_281.ankimesh


BIN
samples/sponza/assets/sponza_34.ankimesh


BIN
samples/sponza/assets/sponza_35.ankimesh


BIN
samples/sponza/assets/sponza_36.ankimesh


BIN
samples/sponza/assets/sponza_369.002.ankimesh


BIN
samples/sponza/assets/sponza_379.ankimesh


BIN
samples/sponza/assets/sponza_380.ankimesh


BIN
samples/sponza/assets/sponza_381.ankimesh


BIN
samples/sponza/assets/sponza_382.ankimesh


BIN
samples/sponza/assets/sponza_66.ankimesh


BIN
samples/sponza/assets/sponza_68.ankimesh


BIN
samples/sponza/assets/sponza_69.ankimesh


BIN
samples/sponza/assets/square_door.ankimesh


BIN
samples/sponza/assets/vase.ankimesh


+ 10 - 14
samples/sponza/assets/vase.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/vase_dif.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/Vase_roughness.ankitex"/>
-		<input shaderInput="metallic" value="0.000000"/>
-		<input shaderInput="normalTex" value="assets/vase_ddn.ankitex"/>
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.000000"/>
+		<input shaderVar="u_diffTex" value="assets/vase_dif.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/Vase_roughness.ankitex"/>
+		<input shaderVar="m_metallic" value="0.000000"/>
+		<input shaderVar="u_normalTex" value="assets/vase_ddn.ankitex"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.000000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

BIN
samples/sponza/assets/vase_chains.ankimesh


+ 10 - 14
samples/sponza/assets/vase_fl.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/vase_plant_tga.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/VaseRound_roughness.ankitex"/>
-		<input shaderInput="metallic" value="0.000000"/>
-		<input shaderInput="normalTex" value="assets/VasePlant_normal.ankitex"/>
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.250000"/>
+		<input shaderVar="u_diffTex" value="assets/vase_plant_tga.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/VaseRound_roughness.ankitex"/>
+		<input shaderVar="m_metallic" value="0.000000"/>
+		<input shaderVar="u_normalTex" value="assets/VasePlant_normal.ankitex"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.250000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

BIN
samples/sponza/assets/vase_flowers.ankimesh


BIN
samples/sponza/assets/vase_hanger.ankimesh


+ 10 - 14
samples/sponza/assets/vase_hanging.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/vase_hanging_tga.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/VaseHanging_roughness_tga.ankitex"/>
-		<input shaderInput="metallic" value="0.000000"/>
-		<input shaderInput="normalTex" value="assets/VaseHanging_normal_tga.ankitex"/>
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.000000"/>
+		<input shaderVar="u_diffTex" value="assets/vase_hanging_tga.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/VaseHanging_roughness_tga.ankitex"/>
+		<input shaderVar="m_metallic" value="0.000000"/>
+		<input shaderVar="u_normalTex" value="assets/VaseHanging_normal_tga.ankitex"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.000000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

+ 10 - 14
samples/sponza/assets/vase_round.ankimtl

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ImporterMaterial.cpp -->
 <!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="shaders/GBufferGeneric.glslp">
-	<mutators>
+<material shaderProgram="shaders/GBufferGeneric.ankiprog">
+	<mutation>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="DIFFUSE_TEX" value="1"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="SPECULAR_TEX" value="0"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
 		<mutator name="ROUGHNESS_TEX" value="1"/>
@@ -9,22 +9,18 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
-	</mutators>
+	</mutation>
 
 
 	<inputs>
 	<inputs>
-		<input shaderInput="mvp" builtin="MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="prevMvp" builtin="PREVIOUS_MODEL_VIEW_PROJECTION_MATRIX"/>
-		<input shaderInput="rotationMat" builtin="ROTATION_MATRIX"/>
-		<input shaderInput="globalSampler" builtin="GLOBAL_SAMPLER"/>
 		
 		
 
 
-		<input shaderInput="diffTex" value="assets/vase_round_tga.ankitex"/>
-		<input shaderInput="specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderInput="roughnessTex" value="assets/VaseRound_roughness.ankitex"/>
-		<input shaderInput="metallic" value="0.000000"/>
-		<input shaderInput="normalTex" value="assets/VaseRound_normal.ankitex"/>
-		<input shaderInput="emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderInput="subsurface" value="0.000000"/>
+		<input shaderVar="u_diffTex" value="assets/vase_round_tga.ankitex"/>
+		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input shaderVar="u_roughnessTex" value="assets/VaseRound_roughness.ankitex"/>
+		<input shaderVar="m_metallic" value="0.000000"/>
+		<input shaderVar="u_normalTex" value="assets/VaseRound_normal.ankitex"/>
+		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input shaderVar="m_subsurface" value="0.000000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>

BIN
samples/sponza/assets/window.ankimesh


+ 1 - 1
shaders/ForwardShadingFog.ankiprog

@@ -12,7 +12,7 @@ struct PerDraw
 	F32 m_fogDistanceOfMaxThikness;
 	F32 m_fogDistanceOfMaxThikness;
 };
 };
 
 
-layout(set = 1, binding = 0) uniform b_ankiMaterial
+layout(set = 1, binding = 0, row_major) uniform b_ankiMaterial
 {
 {
 	PerDraw u_ankiPerDraw;
 	PerDraw u_ankiPerDraw;
 };
 };

+ 1 - 1
shaders/ForwardShadingParticles.ankiprog

@@ -17,7 +17,7 @@ struct PerDraw
 	Vec4 m_colorBias;
 	Vec4 m_colorBias;
 };
 };
 
 
-layout(set = 1, binding = 0) uniform b_ankiMaterial
+layout(set = 1, binding = 0, row_major) uniform b_ankiMaterial
 {
 {
 	PerDraw u_ankiPerDraw;
 	PerDraw u_ankiPerDraw;
 };
 };

+ 37 - 8
src/anki/importer/GltfImporter.cpp

@@ -154,8 +154,14 @@ GltfImporter::~GltfImporter()
 	m_alloc.deleteInstance(m_hive);
 	m_alloc.deleteInstance(m_hive);
 }
 }
 
 
-Error GltfImporter::init(
-	CString inputFname, CString outDir, CString rpath, CString texrpath, Bool optimizeMeshes, U32 threadCount)
+Error GltfImporter::init(CString inputFname,
+	CString outDir,
+	CString rpath,
+	CString texrpath,
+	Bool optimizeMeshes,
+	F32 lodFactor,
+	U32 lodCount,
+	U32 threadCount)
 {
 {
 	m_inputFname.create(inputFname);
 	m_inputFname.create(inputFname);
 	m_outDir.create(outDir);
 	m_outDir.create(outDir);
@@ -163,18 +169,34 @@ Error GltfImporter::init(
 	m_texrpath.create(texrpath);
 	m_texrpath.create(texrpath);
 	m_optimizeMeshes = optimizeMeshes;
 	m_optimizeMeshes = optimizeMeshes;
 
 
+	m_lodCount = clamp(lodCount, 1u, 3u);
+	m_lodFactor = clamp(lodFactor, 0.0f, 1.0f);
+	if(m_lodFactor * F32(m_lodCount - 1) > 0.7f)
+	{
+		ANKI_GLTF_LOGE("LOD factor is too high %f", m_lodFactor);
+		return Error::USER_DATA;
+	}
+
+	if(m_lodFactor < EPSILON || lodCount == 1)
+	{
+		m_lodCount = 1;
+		m_lodFactor = 0.0f;
+	}
+
+	ANKI_GLTF_LOGI("Having %u LODs with LOD factor %f", m_lodCount, m_lodFactor);
+
 	cgltf_options options = {};
 	cgltf_options options = {};
 	cgltf_result res = cgltf_parse_file(&options, inputFname.cstr(), &m_gltf);
 	cgltf_result res = cgltf_parse_file(&options, inputFname.cstr(), &m_gltf);
 	if(res != cgltf_result_success)
 	if(res != cgltf_result_success)
 	{
 	{
-		ANKI_LOGE("Failed to open the GLTF file. Code: %d", res);
+		ANKI_GLTF_LOGE("Failed to open the GLTF file. Code: %d", res);
 		return Error::FUNCTION_FAILED;
 		return Error::FUNCTION_FAILED;
 	}
 	}
 
 
 	res = cgltf_load_buffers(&options, m_gltf, inputFname.cstr());
 	res = cgltf_load_buffers(&options, m_gltf, inputFname.cstr());
 	if(res != cgltf_result_success)
 	if(res != cgltf_result_success)
 	{
 	{
-		ANKI_LOGE("Failed to load GLTF data. Code: %d", res);
+		ANKI_GLTF_LOGE("Failed to load GLTF data. Code: %d", res);
 		return Error::FUNCTION_FAILED;
 		return Error::FUNCTION_FAILED;
 	}
 	}
 
 
@@ -603,12 +625,16 @@ Error GltfImporter::visitNode(
 				cgltf_material* m_mtl;
 				cgltf_material* m_mtl;
 				cgltf_skin* m_skin;
 				cgltf_skin* m_skin;
 				Bool m_selfCollision;
 				Bool m_selfCollision;
+				U32 m_lodCount;
+				F32 m_lodFactor;
 			};
 			};
 			Ctx* ctx = m_alloc.newInstance<Ctx>();
 			Ctx* ctx = m_alloc.newInstance<Ctx>();
 			ctx->m_importer = this;
 			ctx->m_importer = this;
 			ctx->m_mesh = node.mesh;
 			ctx->m_mesh = node.mesh;
 			ctx->m_mtl = node.mesh->primitives[0].material;
 			ctx->m_mtl = node.mesh->primitives[0].material;
 			ctx->m_skin = node.skin;
 			ctx->m_skin = node.skin;
+			ctx->m_lodCount = m_lodCount;
+			ctx->m_lodFactor = m_lodFactor;
 
 
 			HashMapAuto<CString, StringAuto>::Iterator it2;
 			HashMapAuto<CString, StringAuto>::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";
@@ -618,22 +644,23 @@ Error GltfImporter::visitNode(
 			auto callback = [](void* userData, U32 threadId, ThreadHive& hive, ThreadHiveSemaphore* signalSemaphore) {
 			auto callback = [](void* userData, U32 threadId, ThreadHive& hive, ThreadHiveSemaphore* signalSemaphore) {
 				Ctx& self = *static_cast<Ctx*>(userData);
 				Ctx& self = *static_cast<Ctx*>(userData);
 
 
+				// LOD 0
 				Error err = self.m_importer->writeMesh(*self.m_mesh, CString(), 1.0f);
 				Error err = self.m_importer->writeMesh(*self.m_mesh, CString(), 1.0f);
 
 
 				// LOD 1
 				// LOD 1
-				if(!err)
+				if(!err && self.m_lodCount > 1)
 				{
 				{
 					StringAuto name(self.m_importer->m_alloc);
 					StringAuto name(self.m_importer->m_alloc);
 					name.sprintf("%s_lod1", self.m_mesh->name);
 					name.sprintf("%s_lod1", self.m_mesh->name);
-					err = self.m_importer->writeMesh(*self.m_mesh, name, 0.66f);
+					err = self.m_importer->writeMesh(*self.m_mesh, name, 1.0f - self.m_lodFactor);
 				}
 				}
 
 
 				// LOD 2
 				// LOD 2
-				if(!err)
+				if(!err && self.m_lodCount > 2)
 				{
 				{
 					StringAuto name(self.m_importer->m_alloc);
 					StringAuto name(self.m_importer->m_alloc);
 					name.sprintf("%s_lod2", self.m_mesh->name);
 					name.sprintf("%s_lod2", self.m_mesh->name);
-					err = self.m_importer->writeMesh(*self.m_mesh, name, 0.33f);
+					err = self.m_importer->writeMesh(*self.m_mesh, name, 1.0f - self.m_lodFactor * 2.0f);
 				}
 				}
 
 
 				if(!err)
 				if(!err)
@@ -758,12 +785,14 @@ Error GltfImporter::writeModel(const cgltf_mesh& mesh, CString skinName)
 
 
 	ANKI_CHECK(file.writeText("\t\t\t<mesh>%s%s.ankimesh</mesh>\n", m_rpath.cstr(), mesh.name));
 	ANKI_CHECK(file.writeText("\t\t\t<mesh>%s%s.ankimesh</mesh>\n", m_rpath.cstr(), mesh.name));
 
 
+	if(m_lodCount > 1)
 	{
 	{
 		StringAuto name(m_alloc);
 		StringAuto name(m_alloc);
 		name.sprintf("%s_lod1", mesh.name);
 		name.sprintf("%s_lod1", mesh.name);
 		ANKI_CHECK(file.writeText("\t\t\t<mesh1>%s%s.ankimesh</mesh1>\n", m_rpath.cstr(), name.cstr()));
 		ANKI_CHECK(file.writeText("\t\t\t<mesh1>%s%s.ankimesh</mesh1>\n", m_rpath.cstr(), name.cstr()));
 	}
 	}
 
 
+	if(m_lodCount > 2)
 	{
 	{
 		StringAuto name(m_alloc);
 		StringAuto name(m_alloc);
 		name.sprintf("%s_lod2", mesh.name);
 		name.sprintf("%s_lod2", mesh.name);

+ 4 - 0
src/anki/importer/GltfImporter.h

@@ -35,6 +35,8 @@ public:
 		CString rpath,
 		CString rpath,
 		CString texrpath,
 		CString texrpath,
 		Bool optimizeMeshes,
 		Bool optimizeMeshes,
+		F32 lodFactor,
+		U32 lodCount,
 		U32 threadCount = MAX_U32);
 		U32 threadCount = MAX_U32);
 
 
 	ANKI_USE_RESULT Error writeAll();
 	ANKI_USE_RESULT Error writeAll();
@@ -71,6 +73,8 @@ private:
 
 
 	HashMapAuto<const void*, U32, PtrHasher> m_nodePtrToIdx{m_alloc}; ///< Need an index for the unnamed nodes.
 	HashMapAuto<const void*, U32, PtrHasher> m_nodePtrToIdx{m_alloc}; ///< Need an index for the unnamed nodes.
 
 
+	F32 m_lodFactor = 1.0f;
+	U32 m_lodCount = 1;
 	Bool m_optimizeMeshes = false;
 	Bool m_optimizeMeshes = false;
 
 
 	// Misc
 	// Misc

+ 12 - 2
src/anki/importer/GltfImporterMesh.cpp

@@ -269,7 +269,10 @@ Error GltfImporter::writeMesh(const cgltf_mesh& mesh, CString nameOverride, F32
 {
 {
 	StringAuto fname(m_alloc);
 	StringAuto fname(m_alloc);
 	fname.sprintf("%s%s.ankimesh", m_outDir.cstr(), (nameOverride.isEmpty()) ? mesh.name : nameOverride.cstr());
 	fname.sprintf("%s%s.ankimesh", m_outDir.cstr(), (nameOverride.isEmpty()) ? mesh.name : nameOverride.cstr());
-	ANKI_GLTF_LOGI("Importing mesh%s%s", (m_optimizeMeshes) ? " (will also optimize) " : " ", fname.cstr());
+	ANKI_GLTF_LOGI("Importing mesh (%s, decimate factor %f): %s",
+		(m_optimizeMeshes) ? "optimze" : "WON'T optimize",
+		decimateFactor,
+		fname.cstr());
 
 
 	ListAuto<SubMesh> submeshes(m_alloc);
 	ListAuto<SubMesh> submeshes(m_alloc);
 	U32 totalIndexCount = 0;
 	U32 totalIndexCount = 0;
@@ -509,7 +512,14 @@ Error GltfImporter::writeMesh(const cgltf_mesh& mesh, CString nameOverride, F32
 				const Vec3& n = submesh.m_verts[i].m_normal;
 				const Vec3& n = submesh.m_verts[i].m_normal;
 				Vec3& b = bitangents[i];
 				Vec3& b = bitangents[i];
 
 
-				t.normalize();
+				if(t.getLengthSquared() < EPSILON)
+				{
+					t = Vec3(1.0f, 0.0f, 0.0f); // Something random
+				}
+				else
+				{
+					t.normalize();
+				}
 
 
 				if(b.getLengthSquared() < EPSILON)
 				if(b.getLengthSquared() < EPSILON)
 				{
 				{

+ 1 - 1
src/anki/resource/MaterialResource2.cpp

@@ -59,7 +59,7 @@ static ANKI_USE_RESULT Error checkBuiltin(
 				return Error::USER_DATA;
 				return Error::USER_DATA;
 			}
 			}
 
 
-			if(BUILTIN_INFOS[id].m_instanced != instanced)
+			if(instanced && !BUILTIN_INFOS[id].m_instanced)
 			{
 			{
 				ANKI_RESOURCE_LOGE("Variable %s be instanced: %s",
 				ANKI_RESOURCE_LOGE("Variable %s be instanced: %s",
 					(BUILTIN_INFOS[id].m_instanced) ? "should" : "shouldn't",
 					(BUILTIN_INFOS[id].m_instanced) ? "should" : "shouldn't",

+ 32 - 0
tools/gltf_importer/Main.cpp

@@ -13,6 +13,8 @@ Options:
 -texrpath <string>     : Same as rpath but for textures
 -texrpath <string>     : Same as rpath but for textures
 -optimize-meshes <0|1> : Optimize meshes. Default is 1
 -optimize-meshes <0|1> : Optimize meshes. Default is 1
 -j <thread_count>      : Number of threads. Defaults to system's max
 -j <thread_count>      : Number of threads. Defaults to system's max
+-lod-count <1|2|3>     : The number of geometry LODs to generate. Default: 1
+-lod-factor            : The decimate factor for each LOD. Default 0.25
 )";
 )";
 
 
 class CmdLineArgs
 class CmdLineArgs
@@ -25,6 +27,8 @@ public:
 	StringAuto m_texRpath = {m_alloc};
 	StringAuto m_texRpath = {m_alloc};
 	Bool m_optimizeMeshes = true;
 	Bool m_optimizeMeshes = true;
 	U32 m_threadCount = MAX_U32;
 	U32 m_threadCount = MAX_U32;
+	U32 m_lodCount = 1;
+	F32 m_lodFactor = 0.25f;
 };
 };
 
 
 static Error parseCommandLineArgs(int argc, char** argv, CmdLineArgs& info)
 static Error parseCommandLineArgs(int argc, char** argv, CmdLineArgs& info)
@@ -115,6 +119,32 @@ static Error parseCommandLineArgs(int argc, char** argv, CmdLineArgs& info)
 				return Error::USER_DATA;
 				return Error::USER_DATA;
 			}
 			}
 		}
 		}
+		else if(strcmp(argv[i], "-lod-count") == 0)
+		{
+			++i;
+
+			if(i < argc)
+			{
+				ANKI_CHECK(CString(argv[i]).toNumber(info.m_lodCount));
+			}
+			else
+			{
+				return Error::USER_DATA;
+			}
+		}
+		else if(strcmp(argv[i], "-lod-factor") == 0)
+		{
+			++i;
+
+			if(i < argc)
+			{
+				ANKI_CHECK(CString(argv[i]).toNumber(info.m_lodFactor));
+			}
+			else
+			{
+				return Error::USER_DATA;
+			}
+		}
 		else
 		else
 		{
 		{
 			return Error::USER_DATA;
 			return Error::USER_DATA;
@@ -150,6 +180,8 @@ int main(int argc, char** argv)
 		   info.m_rpath.toCString(),
 		   info.m_rpath.toCString(),
 		   info.m_texRpath.toCString(),
 		   info.m_texRpath.toCString(),
 		   info.m_optimizeMeshes,
 		   info.m_optimizeMeshes,
+		   info.m_lodFactor,
+		   info.m_lodCount,
 		   info.m_threadCount))
 		   info.m_threadCount))
 	{
 	{
 		return 1;
 		return 1;