瀏覽代碼

Port Sponza and fix bugs

Panagiotis Christopoulos Charitos 3 年之前
父節點
當前提交
71ecafbe2e
共有 35 個文件被更改,包括 1490 次插入697 次删除
  1. 3 0
      AnKi/Resource/MaterialResource.cpp
  2. 1 0
      AnKi/Resource/MaterialResource.h
  3. 6 0
      AnKi/Resource/ModelResource.cpp
  4. 6 4
      AnKi/Scene/Components/RenderComponent.cpp
  5. 5 4
      AnKi/Shaders/ForwardShadingCommon.glsl
  6. 17 15
      AnKi/Shaders/ForwardShadingParticles.ankiprog
  7. 8 8
      AnKi/Shaders/GBufferGeneric.ankiprog
  8. 3 3
      AnKi/Shaders/Include/GpuSceneTypes.h
  9. 14 8
      Samples/Sponza/Assets/Fire.ankimtl
  10. 1 1
      Samples/Sponza/Assets/Scene.lua
  11. 12 8
      Samples/Sponza/Assets/Smoke.ankimtl
  12. 59 27
      Samples/Sponza/Assets/arch.001_efebbb2a6f84fff0.ankimtl
  13. 59 27
      Samples/Sponza/Assets/arch_e0c8c7e29c806284.ankimtl
  14. 59 27
      Samples/Sponza/Assets/bricks_8bd6f24aa0ad3654.ankimtl
  15. 58 26
      Samples/Sponza/Assets/ceiling_3fd94cde277a48e1.ankimtl
  16. 58 26
      Samples/Sponza/Assets/chain_33ef478b87fe7c15.ankimtl
  17. 59 27
      Samples/Sponza/Assets/column_a_1e1bacae3460b88.ankimtl
  18. 59 27
      Samples/Sponza/Assets/column_b_c9391d56bff59fc3.ankimtl
  19. 59 27
      Samples/Sponza/Assets/column_c_43f866fc7b9f0169.ankimtl
  20. 59 27
      Samples/Sponza/Assets/details_4242afc5fc479920.ankimtl
  21. 59 27
      Samples/Sponza/Assets/fabric_a_945c29fc221550fb.ankimtl
  22. 59 27
      Samples/Sponza/Assets/fabric_c_c8bf70dee411d1bd.ankimtl
  23. 59 27
      Samples/Sponza/Assets/fabric_d_8ff4aebb25bf20b0.ankimtl
  24. 59 27
      Samples/Sponza/Assets/fabric_e_d1c5a44841c48230.ankimtl
  25. 59 27
      Samples/Sponza/Assets/fabric_f_d54bbaca38ed4391.ankimtl
  26. 59 27
      Samples/Sponza/Assets/flagpole_6c7e0eb8dd33b39e.ankimtl
  27. 59 27
      Samples/Sponza/Assets/floor_71cbd2644e53ab8c.ankimtl
  28. 59 27
      Samples/Sponza/Assets/leaf_3a245efd17475037.ankimtl
  29. 59 27
      Samples/Sponza/Assets/lion_c45d3035db3bc17b.ankimtl
  30. 59 27
      Samples/Sponza/Assets/lion_stand_ab5e3642131ad971.ankimtl
  31. 59 27
      Samples/Sponza/Assets/roof_4359bd4e3b26845.ankimtl
  32. 59 27
      Samples/Sponza/Assets/vase_45c3983f6cc9c489.ankimtl
  33. 59 27
      Samples/Sponza/Assets/vase_fl_580cea687de3d758.ankimtl
  34. 59 27
      Samples/Sponza/Assets/vase_hanging_c2d2b40b27cacd7d.ankimtl
  35. 59 27
      Samples/Sponza/Assets/vase_round_71af81a1ac0a7c3e.ankimtl

+ 3 - 0
AnKi/Resource/MaterialResource.cpp

@@ -123,6 +123,8 @@ Error MaterialResource::load(const ResourceFilename& filename, Bool async)
 		ANKI_CHECK(techniqueEl.getNextSiblingElement("technique", techniqueEl));
 		ANKI_CHECK(techniqueEl.getNextSiblingElement("technique", techniqueEl));
 	} while(techniqueEl);
 	} while(techniqueEl);
 
 
+	ANKI_ASSERT(!!m_techniquesMask);
+
 	// <inputs>
 	// <inputs>
 	BitSet<128> varsSet(false);
 	BitSet<128> varsSet(false);
 	ANKI_CHECK(rootEl.getChildElementOptional("inputs", el));
 	ANKI_CHECK(rootEl.getChildElementOptional("inputs", el));
@@ -204,6 +206,7 @@ Error MaterialResource::parseTechnique(XmlElement techniqueEl, Bool async)
 	// Create the vars
 	// Create the vars
 	ANKI_CHECK(createVars(technique));
 	ANKI_CHECK(createVars(technique));
 
 
+	m_techniquesMask |= mask;
 	return Error::NONE;
 	return Error::NONE;
 }
 }
 
 

+ 1 - 0
AnKi/Resource/MaterialResource.h

@@ -222,6 +222,7 @@ public:
 
 
 	RenderingTechniqueBit getRenderingTechniques() const
 	RenderingTechniqueBit getRenderingTechniques() const
 	{
 	{
+		ANKI_ASSERT(!!m_techniquesMask);
 		return m_techniquesMask;
 		return m_techniquesMask;
 	}
 	}
 
 

+ 6 - 0
AnKi/Resource/ModelResource.cpp

@@ -244,6 +244,12 @@ ModelResource::ModelResource(ResourceManager* manager)
 ModelResource::~ModelResource()
 ModelResource::~ModelResource()
 {
 {
 	auto alloc = getAllocator();
 	auto alloc = getAllocator();
+
+	for(ModelPatch& patch : m_modelPatches)
+	{
+		patch.m_grObjectRefs.destroy(alloc);
+	}
+
 	m_modelPatches.destroy(alloc);
 	m_modelPatches.destroy(alloc);
 }
 }
 
 

+ 6 - 4
AnKi/Scene/Components/RenderComponent.cpp

@@ -44,10 +44,12 @@ void RenderComponent::allocateAndSetupUniforms(const MaterialResourcePtr& mtl, c
 
 
 		for(U32 i = 0; i < transforms.getSize(); ++i)
 		for(U32 i = 0; i < transforms.getSize(); ++i)
 		{
 		{
-			memcpy(&renderableGpuViews->m_transform, &transforms[i], sizeof(renderableGpuViews->m_transform));
-			memcpy(&renderableGpuViews->m_previousTransform, &prevTransforms[i],
-				   sizeof(renderableGpuViews->m_previousTransform));
-			renderableGpuViews->m_rotation = transforms[i].getRotationPart();
+			memcpy(&renderableGpuViews->m_worldTransform, &transforms[i], sizeof(renderableGpuViews->m_worldTransform));
+			memcpy(&renderableGpuViews->m_previousWorldTransform, &prevTransforms[i],
+				   sizeof(renderableGpuViews->m_previousWorldTransform));
+			renderableGpuViews->m_worldRotation = transforms[i].getRotationPart();
+
+			++renderableGpuViews;
 		}
 		}
 	}
 	}
 
 

+ 5 - 4
AnKi/Shaders/ForwardShadingCommon.glsl

@@ -9,6 +9,7 @@
 #include <AnKi/Shaders/Functions.glsl>
 #include <AnKi/Shaders/Functions.glsl>
 #include <AnKi/Shaders/Include/ModelTypes.h>
 #include <AnKi/Shaders/Include/ModelTypes.h>
 #include <AnKi/Shaders/Include/MaterialTypes.h>
 #include <AnKi/Shaders/Include/MaterialTypes.h>
+#include <AnKi/Shaders/Include/GpuSceneTypes.h>
 
 
 //
 //
 // Vert
 // Vert
@@ -22,10 +23,10 @@ layout(location = VERTEX_ATTRIBUTE_ID_POSITION) in Vec3 in_position;
 //
 //
 #if defined(ANKI_FRAGMENT_SHADER)
 #if defined(ANKI_FRAGMENT_SHADER)
 // Global resources
 // Global resources
-layout(set = 0, binding = 0) uniform sampler u_linearAnyClampSampler;
-layout(set = 0, binding = 1) uniform texture2D u_gbufferDepthRt;
-layout(set = 0, binding = 2) uniform ANKI_RP texture3D u_lightVol;
-#	define CLUSTERED_SHADING_SET 0
+layout(set = MATERIAL_SET_INTERNAL, binding = 0) uniform sampler u_linearAnyClampSampler;
+layout(set = MATERIAL_SET_INTERNAL, binding = 1) uniform texture2D u_gbufferDepthRt;
+layout(set = MATERIAL_SET_INTERNAL, binding = 2) uniform ANKI_RP texture3D u_lightVol;
+#	define CLUSTERED_SHADING_SET MATERIAL_SET_INTERNAL
 #	define CLUSTERED_SHADING_UNIFORMS_BINDING 3
 #	define CLUSTERED_SHADING_UNIFORMS_BINDING 3
 #	define CLUSTERED_SHADING_LIGHTS_BINDING 4
 #	define CLUSTERED_SHADING_LIGHTS_BINDING 4
 #	define CLUSTERED_SHADING_CLUSTERS_BINDING 7
 #	define CLUSTERED_SHADING_CLUSTERS_BINDING 7

+ 17 - 15
AnKi/Shaders/ForwardShadingParticles.ankiprog

@@ -8,9 +8,9 @@
 
 
 #include <AnKi/Shaders/ForwardShadingCommon.glsl>
 #include <AnKi/Shaders/ForwardShadingCommon.glsl>
 
 
-struct PerDraw
+#pragma anki reflect AnKiLocalUniforms
+struct AnKiLocalUniforms
 {
 {
-	Mat3x4 m_ankiTransform;
 #if ANIMATED_TEXTURE == 1
 #if ANIMATED_TEXTURE == 1
 	F32 m_animationPeriod;
 	F32 m_animationPeriod;
 #endif
 #endif
@@ -18,27 +18,29 @@ struct PerDraw
 	ANKI_RP Vec4 m_colorBias;
 	ANKI_RP Vec4 m_colorBias;
 };
 };
 
 
-#pragma anki reflect b_ankiPerDraw
-layout(set = 1, binding = 0, row_major, scalar) uniform b_ankiPerDraw
+layout(set = MATERIAL_SET_EXTERNAL, binding = MATERIAL_BINDING_RENDERABLE_GPU_VIEW, row_major, scalar) uniform b_renderableGpuViews
 {
 {
-	PerDraw u_ankiPerDraw;
+	RenderableGpuView u_renderableGpuViews[1];
 };
 };
 
 
-#pragma anki reflect b_ankiGlobalUniforms
-layout(set = 1, binding = 1, row_major, scalar) uniform b_ankiGlobalUniforms
+layout(set = MATERIAL_SET_EXTERNAL, binding = MATERIAL_BINDING_LOCAL_UNIFORMS, row_major, scalar) uniform b_localUniforms
+{
+	AnKiLocalUniforms u_localUniforms;
+};
+
+layout(set = MATERIAL_SET_EXTERNAL, binding = MATERIAL_BINDING_GLOBAL_UNIFORMS, row_major, scalar) uniform b_ankiGlobalUniforms
 {
 {
 	MaterialGlobalUniforms u_ankiGlobals;
 	MaterialGlobalUniforms u_ankiGlobals;
 };
 };
 
 
-#pragma anki reflect u_ankiGlobalSampler
-layout(set = 1, binding = 2) uniform sampler u_ankiGlobalSampler;
+layout(set = MATERIAL_SET_EXTERNAL, binding = MATERIAL_BINDING_GLOBAL_SAMPLER) uniform sampler u_ankiGlobalSampler;
 #if ANIMATED_TEXTURE == 0
 #if ANIMATED_TEXTURE == 0
 #	pragma anki reflect u_diffuseMap
 #	pragma anki reflect u_diffuseMap
-layout(set = 1, binding = 3) uniform ANKI_RP texture2D u_diffuseMap;
+layout(set = MATERIAL_SET_EXTERNAL, binding = MATERIAL_BINDING_FIRST_NON_STANDARD) uniform ANKI_RP texture2D u_diffuseMap;
 #endif
 #endif
 #if ANIMATED_TEXTURE == 1
 #if ANIMATED_TEXTURE == 1
 #	pragma anki reflect u_diffuseMapArr
 #	pragma anki reflect u_diffuseMapArr
-layout(set = 1, binding = 3) uniform ANKI_RP texture2DArray u_diffuseMapArr;
+layout(set = MATERIAL_SET_EXTERNAL, binding = MATERIAL_BINDING_FIRST_NON_STANDARD) uniform ANKI_RP texture2DArray u_diffuseMapArr;
 #endif
 #endif
 
 
 #pragma anki start vert
 #pragma anki start vert
@@ -56,7 +58,7 @@ void main()
 
 
 	out_worldPos = u_ankiGlobals.m_cameraRotationMatrix * Vec3((out_uv - 0.5) * in_scale, 0.0) + in_position;
 	out_worldPos = u_ankiGlobals.m_cameraRotationMatrix * Vec3((out_uv - 0.5) * in_scale, 0.0) + in_position;
 	gl_Position =
 	gl_Position =
-		u_ankiGlobals.m_viewProjectionMatrix * Vec4(u_ankiPerDraw.m_ankiTransform * Vec4(out_worldPos, 1.0), 1.0);
+		u_ankiGlobals.m_viewProjectionMatrix * Vec4(u_renderableGpuViews[0].m_worldTransform * Vec4(out_worldPos, 1.0), 1.0);
 
 
 	out_alpha = in_alpha;
 	out_alpha = in_alpha;
 }
 }
@@ -71,7 +73,7 @@ layout(location = 2) in Vec3 in_worldPos;
 void main()
 void main()
 {
 {
 #if ANIMATED_TEXTURE == 1
 #if ANIMATED_TEXTURE == 1
-	ANKI_RP Vec4 texCol = readAnimatedTextureRgba(u_diffuseMapArr, u_ankiGlobalSampler, u_ankiPerDraw.m_animationPeriod,
+	ANKI_RP Vec4 texCol = readAnimatedTextureRgba(u_diffuseMapArr, u_ankiGlobalSampler, u_localUniforms.m_animationPeriod,
 												  in_uv, u_clusteredShading.m_time);
 												  in_uv, u_clusteredShading.m_time);
 #else
 #else
 	ANKI_RP Vec4 texCol = texture(u_diffuseMap, u_ankiGlobalSampler, in_uv);
 	ANKI_RP Vec4 texCol = texture(u_diffuseMap, u_ankiGlobalSampler, in_uv);
@@ -81,8 +83,8 @@ void main()
 	texCol.rgb = computeLightColorLow(texCol.rgb, in_worldPos);
 	texCol.rgb = computeLightColorLow(texCol.rgb, in_worldPos);
 #endif
 #endif
 
 
-	ANKI_RP Vec4 colScale = u_ankiPerDraw.m_colorScale;
+	ANKI_RP Vec4 colScale = u_localUniforms.m_colorScale;
 	colScale.a *= in_alpha;
 	colScale.a *= in_alpha;
-	particleAlpha(texCol, colScale, u_ankiPerDraw.m_colorBias);
+	particleAlpha(texCol, colScale, u_localUniforms.m_colorBias);
 }
 }
 #pragma anki end
 #pragma anki end

+ 8 - 8
AnKi/Shaders/GBufferGeneric.ankiprog

@@ -185,9 +185,9 @@ void skinning()
 void positionUvNormalTangent()
 void positionUvNormalTangent()
 {
 {
 	gl_Position = u_globalUniforms.m_viewProjectionMatrix
 	gl_Position = u_globalUniforms.m_viewProjectionMatrix
-				  * Vec4(u_renderableGpuViews[gl_InstanceIndex].m_transform * Vec4(g_position, 1.0), 1.0);
-	out_normal = u_renderableGpuViews[gl_InstanceIndex].m_rotation * g_normal;
-	out_tangent = u_renderableGpuViews[gl_InstanceIndex].m_rotation * g_tangent.xyz;
+				  * Vec4(u_renderableGpuViews[gl_InstanceIndex].m_worldTransform * Vec4(g_position, 1.0), 1.0);
+	out_normal = u_renderableGpuViews[gl_InstanceIndex].m_worldRotation * g_normal;
+	out_tangent = u_renderableGpuViews[gl_InstanceIndex].m_worldRotation * g_tangent.xyz;
 	out_bitangent = cross(out_normal, out_tangent) * g_tangent.w;
 	out_bitangent = cross(out_normal, out_tangent) * g_tangent.w;
 	out_uv = g_uv;
 	out_uv = g_uv;
 }
 }
@@ -202,10 +202,10 @@ void parallax()
 	const Vec3 b = cross(n, t) * in_tangent.w;
 	const Vec3 b = cross(n, t) * in_tangent.w;
 
 
 	const Mat3 invTbn = transpose(u_globalUniforms.m_viewRotationMatrix
 	const Mat3 invTbn = transpose(u_globalUniforms.m_viewRotationMatrix
-								  * u_renderableGpuViews[gl_InstanceIndex].m_rotation * Mat3(t, b, n));
+								  * u_renderableGpuViews[gl_InstanceIndex].m_worldRotation * Mat3(t, b, n));
 
 
 	const Vec3 viewPos = (u_globalUniforms.m_viewMatrix
 	const Vec3 viewPos = (u_globalUniforms.m_viewMatrix
-						  * Vec4(u_renderableGpuViews[gl_InstanceIndex].m_transform * Vec4(g_position, 1.0), 1.0))
+						  * Vec4(u_renderableGpuViews[gl_InstanceIndex].m_worldTransform * Vec4(g_position, 1.0), 1.0))
 							 .xyz;
 							 .xyz;
 	out_distFromTheCamera = viewPos.z;
 	out_distFromTheCamera = viewPos.z;
 
 
@@ -220,9 +220,9 @@ void velocity()
 	const Vec3 prevLocalPos = g_prevPosition;
 	const Vec3 prevLocalPos = g_prevPosition;
 
 
 #	if ANKI_VELOCITY
 #	if ANKI_VELOCITY
-	const Mat3x4 trf = u_renderableGpuViews[gl_InstanceIndex].m_previousTransform;
+	const Mat3x4 trf = u_renderableGpuViews[gl_InstanceIndex].m_previousWorldTransform;
 #	else
 #	else
-	const Mat3x4 trf = u_renderableGpuViews[gl_InstanceIndex].m_transform;
+	const Mat3x4 trf = u_renderableGpuViews[gl_InstanceIndex].m_worldTransform;
 #	endif
 #	endif
 
 
 	const Vec4 v4 = u_globalUniforms.m_viewProjectionMatrix * Vec4(trf * Vec4(prevLocalPos, 1.0), 1.0);
 	const Vec4 v4 = u_globalUniforms.m_viewProjectionMatrix * Vec4(trf * Vec4(prevLocalPos, 1.0), 1.0);
@@ -254,7 +254,7 @@ void main()
 #	endif
 #	endif
 #else
 #else
 	gl_Position = u_globalUniforms.m_viewProjectionMatrix
 	gl_Position = u_globalUniforms.m_viewProjectionMatrix
-				  * Vec4(u_renderableGpuViews[gl_InstanceIndex].m_transform * Vec4(g_position, 1.0), 1.0);
+				  * Vec4(u_renderableGpuViews[gl_InstanceIndex].m_worldTransform * Vec4(g_position, 1.0), 1.0);
 
 
 #	if ALPHA_TEST
 #	if ALPHA_TEST
 	out_uv = g_uv;
 	out_uv = g_uv;

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

@@ -11,9 +11,9 @@ ANKI_BEGIN_NAMESPACE
 
 
 struct RenderableGpuView
 struct RenderableGpuView
 {
 {
-	ScalarMat3x4 m_transform;
-	ScalarMat3x4 m_previousTransform;
-	Mat3 m_rotation;
+	ScalarMat3x4 m_worldTransform;
+	ScalarMat3x4 m_previousWorldTransform;
+	Mat3 m_worldRotation; ///< The roration part of m_worldTransform.
 };
 };
 
 
 struct SkinGpuView
 struct SkinGpuView

+ 14 - 8
Samples/Sponza/Assets/Fire.ankimtl

@@ -1,14 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
-<material shaderProgram="Anki/Shaders/ForwardShadingParticles.ankiprog" forwardShading="1" shadow="0">
-	<mutation>
-		<mutator name="ANIMATED_TEXTURE" value="0"/>
-		<mutator name="LIGHT" value="0"/>
-	</mutation>
+<material shadow="0">
+	<techniques>
+		<technique name="Forward" shaderProgram="Anki/Shaders/ForwardShadingParticles.ankiprog">
+			<mutation>
+				<mutator name="ANIMATED_TEXTURE" value="0"/>
+				<mutator name="LIGHT" value="0"/>
+			</mutation>
+		</technique>
+	</techniques>
 
 
 	<inputs>
 	<inputs>
-		<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"/>
+		<input name="u_diffuseMap" value="Assets/ember_mid.ankitex"/>
+		<input name="m_colorScale" value="3 3 3 1.0"/>
+		<input name="m_colorBias" value="0 0 0 0"/>
 	</inputs>
 	</inputs>
 </material>
 </material>
 
 
+
+

+ 1 - 1
Samples/Sponza/Assets/Scene.lua

@@ -1,4 +1,4 @@
--- Generated by: /home/godlike/src/anki2/buildr/Bin/GltfImporter sponza_crytek_7_pbr_3.0.gltf /home/godlike/src/anki2/Samples/Sponza/Assets/ -rpath Assets -texrpath Assets -lod-count 2 -light-scale 0.01
+-- Generated by: /home/godlike/src/anki/buildd/Bin/GltfImporter sponza_crytek_7_pbr_3.0.gltf /home/godlike/src/anki/Samples/Sponza/Assets/ -rpath Assets -texrpath Assets -lod-count 2 -light-scale 0.01
 local scene = getSceneGraph()
 local scene = getSceneGraph()
 local events = getEventManager()
 local events = getEventManager()
 
 

+ 12 - 8
Samples/Sponza/Assets/Smoke.ankimtl

@@ -1,14 +1,18 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
-<material shaderProgram="Anki/Shaders/ForwardShadingParticles.ankiprog" forwardShading="1" shadow="0">
-	<mutation>
-		<mutator name="ANIMATED_TEXTURE" value="0"/>
-		<mutator name="LIGHT" value="1"/>
-	</mutation>
+<material shadow="0">
+	<techniques>
+		<technique name="Forward" shaderProgram="Anki/Shaders/ForwardShadingParticles.ankiprog">
+			<mutation>
+				<mutator name="ANIMATED_TEXTURE" value="0"/>
+				<mutator name="LIGHT" value="1"/>
+			</mutation>
+		</technique>
+	</techniques>
 
 
 	<inputs>
 	<inputs>
-		<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"/>
+		<input name="u_diffuseMap" value="Assets/Smoke.ankitex"/>
+		<input name="m_colorScale" value="1.0 1.0 1.0 1.0"/>
+		<input name="m_colorBias" value="0 0 0 0"/>
 	</inputs>
 	</inputs>
 </material>
 </material>
 
 

+ 59 - 27
Samples/Sponza/Assets/arch.001_efebbb2a6f84fff0.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_TEX" value="0"/>
-		<mutator name="NORMAL_TEX" value="1"/>
-		<mutator name="PARALLAX" value="0"/>
-		<mutator name="EMISSIVE_TEX" value="0"/>
-		<mutator name="ALPHA_TEST" value="0"/>
-	</mutation>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-	<inputs>
-		
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-		<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>
-</material>
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
 		</mutation>
-	</rayType>
-</rtMaterial>
+	</technique>
+
+	</techniques>
+
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/sponza_arch_diff.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/sponza_arch_spec.ankitex"/>
+		<input name="m_metallic" value="0.000000"/>
+		<input name="u_normalTex" value="Assets/sponza_arch_ddn.ankitex"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.000000"/>
+		
+	</inputs>
+</material>

+ 59 - 27
Samples/Sponza/Assets/arch_e0c8c7e29c806284.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_TEX" value="0"/>
-		<mutator name="NORMAL_TEX" value="1"/>
-		<mutator name="PARALLAX" value="0"/>
-		<mutator name="EMISSIVE_TEX" value="0"/>
-		<mutator name="ALPHA_TEST" value="0"/>
-	</mutation>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-	<inputs>
-		
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-		<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>
-</material>
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
 		</mutation>
-	</rayType>
-</rtMaterial>
+	</technique>
+
+	</techniques>
+
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/sponza_arch_diff_tga.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/sponza_arch_spec_tga.ankitex"/>
+		<input name="m_metallic" value="0.000000"/>
+		<input name="u_normalTex" value="Assets/sponza_arch_ddn_tga.ankitex"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.000000"/>
+		
+	</inputs>
+</material>

+ 59 - 27
Samples/Sponza/Assets/bricks_8bd6f24aa0ad3654.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_TEX" value="0"/>
-		<mutator name="NORMAL_TEX" value="1"/>
-		<mutator name="PARALLAX" value="0"/>
-		<mutator name="EMISSIVE_TEX" value="0"/>
-		<mutator name="ALPHA_TEST" value="0"/>
-	</mutation>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-	<inputs>
-		
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-		<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>
-</material>
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
 		</mutation>
-	</rayType>
-</rtMaterial>
+	</technique>
+
+	</techniques>
+
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/sponza_bricks_a_diff_tga.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/sponza_arch_spec_tga.ankitex"/>
+		<input name="m_metallic" value="0.000000"/>
+		<input name="u_normalTex" value="Assets/sponza_bricks_a_ddn_tga.ankitex"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.000000"/>
+		
+	</inputs>
+</material>

+ 58 - 26
Samples/Sponza/Assets/ceiling_3fd94cde277a48e1.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_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>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_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>
+		</technique>
+
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_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>
+		</technique>
+
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_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>
+		</technique>
 
 
-	<inputs>
 		
 		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		<mutation>
+			<mutator name="ALPHA_TEXTURE" value="0"/>
+		</mutation>
+	</technique>
+
+	</techniques>
 
 
-		<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"/>
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/sponza_ceiling_a_diff_tga.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/Sponza_Ceiling_roughness_tga.ankitex"/>
+		<input name="m_metallic" value="0.000000"/>
 		
 		
-		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderVar="m_subsurface" value="0.000000"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.000000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>
-
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
-		<mutation>
-			<mutator name="ALPHA_TEXTURE" value="0"/>
-		</mutation>
-	</rayType>
-</rtMaterial>

+ 58 - 26
Samples/Sponza/Assets/chain_33ef478b87fe7c15.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="0"/>
-		<mutator name="METAL_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>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="0"/>
+				<mutator name="METAL_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>
+		</technique>
+
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="0"/>
+				<mutator name="METAL_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>
+		</technique>
+
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="0"/>
+				<mutator name="METAL_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>
+		</technique>
 
 
-	<inputs>
 		
 		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		<mutation>
+			<mutator name="ALPHA_TEXTURE" value="0"/>
+		</mutation>
+	</technique>
+
+	</techniques>
 
 
-		<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"/>
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/chain_texture_tga.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="m_roughness" value="0.500000"/>
+		<input name="m_metallic" value="0.000000"/>
 		
 		
-		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderVar="m_subsurface" value="0.000000"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.000000"/>
 		
 		
 	</inputs>
 	</inputs>
 </material>
 </material>
-
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
-		<mutation>
-			<mutator name="ALPHA_TEXTURE" value="0"/>
-		</mutation>
-	</rayType>
-</rtMaterial>

+ 59 - 27
Samples/Sponza/Assets/column_a_1e1bacae3460b88.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_TEX" value="0"/>
-		<mutator name="NORMAL_TEX" value="1"/>
-		<mutator name="PARALLAX" value="0"/>
-		<mutator name="EMISSIVE_TEX" value="0"/>
-		<mutator name="ALPHA_TEST" value="0"/>
-	</mutation>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-	<inputs>
-		
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-		<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>
-</material>
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
 		</mutation>
-	</rayType>
-</rtMaterial>
+	</technique>
+
+	</techniques>
+
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/sponza_column_a_diff_tga.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/sponza_column_a_spec_tga.ankitex"/>
+		<input name="m_metallic" value="0.000000"/>
+		<input name="u_normalTex" value="Assets/sponza_column_a_ddn_tga.ankitex"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.000000"/>
+		
+	</inputs>
+</material>

+ 59 - 27
Samples/Sponza/Assets/column_b_c9391d56bff59fc3.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_TEX" value="0"/>
-		<mutator name="NORMAL_TEX" value="1"/>
-		<mutator name="PARALLAX" value="0"/>
-		<mutator name="EMISSIVE_TEX" value="0"/>
-		<mutator name="ALPHA_TEST" value="0"/>
-	</mutation>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-	<inputs>
-		
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-		<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>
-</material>
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
 		</mutation>
-	</rayType>
-</rtMaterial>
+	</technique>
+
+	</techniques>
+
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/sponza_column_b_diff_tga.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/Sponza_Column_b_roughness_tga.ankitex"/>
+		<input name="m_metallic" value="0.000000"/>
+		<input name="u_normalTex" value="Assets/sponza_column_b_ddn_tga.ankitex"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.000000"/>
+		
+	</inputs>
+</material>

+ 59 - 27
Samples/Sponza/Assets/column_c_43f866fc7b9f0169.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_TEX" value="0"/>
-		<mutator name="NORMAL_TEX" value="1"/>
-		<mutator name="PARALLAX" value="0"/>
-		<mutator name="EMISSIVE_TEX" value="0"/>
-		<mutator name="ALPHA_TEST" value="0"/>
-	</mutation>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-	<inputs>
-		
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-		<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>
-</material>
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
 		</mutation>
-	</rayType>
-</rtMaterial>
+	</technique>
+
+	</techniques>
+
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/sponza_column_c_diff_tga.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/Sponza_Column_c_roughness_tga.ankitex"/>
+		<input name="m_metallic" value="0.000000"/>
+		<input name="u_normalTex" value="Assets/sponza_column_c_ddn_tga.ankitex"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.000000"/>
+		
+	</inputs>
+</material>

+ 59 - 27
Samples/Sponza/Assets/details_4242afc5fc479920.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_TEX" value="1"/>
-		<mutator name="NORMAL_TEX" value="1"/>
-		<mutator name="PARALLAX" value="0"/>
-		<mutator name="EMISSIVE_TEX" value="0"/>
-		<mutator name="ALPHA_TEST" value="0"/>
-	</mutation>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="1"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-	<inputs>
-		
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="1"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-		<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>
-</material>
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="1"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
 		</mutation>
-	</rayType>
-</rtMaterial>
+	</technique>
+
+	</techniques>
+
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/sponza_details_diff.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/Sponza_Details_metallic-Sponza_Details_roughness.ankitex"/>
+		<input name="u_metallicTex" value="Assets/Sponza_Details_metallic-Sponza_Details_roughness.ankitex"/>
+		<input name="u_normalTex" value="Assets/Sponza_Details_normal.ankitex"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.000000"/>
+		
+	</inputs>
+</material>

+ 59 - 27
Samples/Sponza/Assets/fabric_a_945c29fc221550fb.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_TEX" value="1"/>
-		<mutator name="NORMAL_TEX" value="1"/>
-		<mutator name="PARALLAX" value="0"/>
-		<mutator name="EMISSIVE_TEX" value="0"/>
-		<mutator name="ALPHA_TEST" value="0"/>
-	</mutation>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="1"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-	<inputs>
-		
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="1"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-		<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>
-</material>
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="1"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
 		</mutation>
-	</rayType>
-</rtMaterial>
+	</technique>
+
+	</techniques>
+
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/sponza_fabric_blue_diff.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
+		<input name="u_metallicTex" value="Assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
+		<input name="u_normalTex" value="Assets/Sponza_Curtain_Red_normal.ankitex"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.100000"/>
+		
+	</inputs>
+</material>

+ 59 - 27
Samples/Sponza/Assets/fabric_c_c8bf70dee411d1bd.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_TEX" value="1"/>
-		<mutator name="NORMAL_TEX" value="1"/>
-		<mutator name="PARALLAX" value="0"/>
-		<mutator name="EMISSIVE_TEX" value="0"/>
-		<mutator name="ALPHA_TEST" value="0"/>
-	</mutation>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="1"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-	<inputs>
-		
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="1"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-		<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>
-</material>
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="1"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
 		</mutation>
-	</rayType>
-</rtMaterial>
+	</technique>
+
+	</techniques>
+
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/sponza_fabric_green_diff.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
+		<input name="u_metallicTex" value="Assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
+		<input name="u_normalTex" value="Assets/Sponza_Curtain_Red_normal.ankitex"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.250000"/>
+		
+	</inputs>
+</material>

+ 59 - 27
Samples/Sponza/Assets/fabric_d_8ff4aebb25bf20b0.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_TEX" value="1"/>
-		<mutator name="NORMAL_TEX" value="1"/>
-		<mutator name="PARALLAX" value="0"/>
-		<mutator name="EMISSIVE_TEX" value="0"/>
-		<mutator name="ALPHA_TEST" value="0"/>
-	</mutation>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="1"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-	<inputs>
-		
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="1"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-		<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>
-</material>
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="1"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
 		</mutation>
-	</rayType>
-</rtMaterial>
+	</technique>
+
+	</techniques>
+
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/sponza_fabric_diff.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
+		<input name="u_metallicTex" value="Assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
+		<input name="u_normalTex" value="Assets/Sponza_Curtain_Red_normal.ankitex"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.100000"/>
+		
+	</inputs>
+</material>

+ 59 - 27
Samples/Sponza/Assets/fabric_e_d1c5a44841c48230.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_TEX" value="1"/>
-		<mutator name="NORMAL_TEX" value="1"/>
-		<mutator name="PARALLAX" value="0"/>
-		<mutator name="EMISSIVE_TEX" value="0"/>
-		<mutator name="ALPHA_TEST" value="0"/>
-	</mutation>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="1"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-	<inputs>
-		
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="1"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-		<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>
-</material>
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="1"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
 		</mutation>
-	</rayType>
-</rtMaterial>
+	</technique>
+
+	</techniques>
+
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/sponza_fabric_green_diff.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
+		<input name="u_metallicTex" value="Assets/Sponza_Fabric_metallic-Sponza_Curtain_roughness.ankitex"/>
+		<input name="u_normalTex" value="Assets/Sponza_Curtain_Red_normal.ankitex"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.100000"/>
+		
+	</inputs>
+</material>

+ 59 - 27
Samples/Sponza/Assets/fabric_f_d54bbaca38ed4391.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_TEX" value="0"/>
-		<mutator name="NORMAL_TEX" value="1"/>
-		<mutator name="PARALLAX" value="0"/>
-		<mutator name="EMISSIVE_TEX" value="0"/>
-		<mutator name="ALPHA_TEST" value="0"/>
-	</mutation>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-	<inputs>
-		
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-		<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>
-</material>
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
 		</mutation>
-	</rayType>
-</rtMaterial>
+	</technique>
+
+	</techniques>
+
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/sponza_curtain_green_diff_tga.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/Sponza_Curtain_roughness_tga_001.ankitex"/>
+		<input name="m_metallic" value="0.000000"/>
+		<input name="u_normalTex" value="Assets/Sponza_Curtain_Red_normal_tga_001.ankitex"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.250000"/>
+		
+	</inputs>
+</material>

+ 59 - 27
Samples/Sponza/Assets/flagpole_6c7e0eb8dd33b39e.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_TEX" value="0"/>
-		<mutator name="NORMAL_TEX" value="1"/>
-		<mutator name="PARALLAX" value="0"/>
-		<mutator name="EMISSIVE_TEX" value="0"/>
-		<mutator name="ALPHA_TEST" value="0"/>
-	</mutation>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-	<inputs>
-		
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-		<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>
-</material>
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
 		</mutation>
-	</rayType>
-</rtMaterial>
+	</technique>
+
+	</techniques>
+
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/sponza_flagpole_diff.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/Sponza_FlagPole_roughness.ankitex"/>
+		<input name="m_metallic" value="0.000000"/>
+		<input name="u_normalTex" value="Assets/Sponza_FlagPole_normal.ankitex"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.000000"/>
+		
+	</inputs>
+</material>

+ 59 - 27
Samples/Sponza/Assets/floor_71cbd2644e53ab8c.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_TEX" value="0"/>
-		<mutator name="NORMAL_TEX" value="1"/>
-		<mutator name="PARALLAX" value="0"/>
-		<mutator name="EMISSIVE_TEX" value="0"/>
-		<mutator name="ALPHA_TEST" value="0"/>
-	</mutation>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-	<inputs>
-		
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-		<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>
-</material>
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
 		</mutation>
-	</rayType>
-</rtMaterial>
+	</technique>
+
+	</techniques>
+
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/sponza_floor_a_diff.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/Sponza_Floor_roughness.ankitex"/>
+		<input name="m_metallic" value="0.000000"/>
+		<input name="u_normalTex" value="Assets/Sponza_Floor_normal.ankitex"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.000000"/>
+		
+	</inputs>
+</material>

+ 59 - 27
Samples/Sponza/Assets/leaf_3a245efd17475037.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_TEX" value="0"/>
-		<mutator name="NORMAL_TEX" value="1"/>
-		<mutator name="PARALLAX" value="0"/>
-		<mutator name="EMISSIVE_TEX" value="0"/>
-		<mutator name="ALPHA_TEST" value="1"/>
-	</mutation>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="1"/>
+			</mutation>
+		</technique>
 
 
-	<inputs>
-		
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="1"/>
+			</mutation>
+		</technique>
 
 
-		<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>
-</material>
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="1"/>
+			</mutation>
+		</technique>
 
 
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
 		</mutation>
-	</rayType>
-</rtMaterial>
+	</technique>
+
+	</techniques>
+
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/sponza_thorn_diff.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/Sponza_Thorn_roughness.ankitex"/>
+		<input name="m_metallic" value="0.000000"/>
+		<input name="u_normalTex" value="Assets/sponza_thorn_ddn.ankitex"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.100000"/>
+		
+	</inputs>
+</material>

+ 59 - 27
Samples/Sponza/Assets/lion_c45d3035db3bc17b.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_TEX" value="0"/>
-		<mutator name="NORMAL_TEX" value="1"/>
-		<mutator name="PARALLAX" value="0"/>
-		<mutator name="EMISSIVE_TEX" value="0"/>
-		<mutator name="ALPHA_TEST" value="0"/>
-	</mutation>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-	<inputs>
-		
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-		<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>
-</material>
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
 		</mutation>
-	</rayType>
-</rtMaterial>
+	</technique>
+
+	</techniques>
+
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/lion.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/Lion_Roughness.ankitex"/>
+		<input name="m_metallic" value="0.000000"/>
+		<input name="u_normalTex" value="Assets/lion_ddn.ankitex"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.000000"/>
+		
+	</inputs>
+</material>

+ 59 - 27
Samples/Sponza/Assets/lion_stand_ab5e3642131ad971.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_TEX" value="0"/>
-		<mutator name="NORMAL_TEX" value="1"/>
-		<mutator name="PARALLAX" value="0"/>
-		<mutator name="EMISSIVE_TEX" value="0"/>
-		<mutator name="ALPHA_TEST" value="0"/>
-	</mutation>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-	<inputs>
-		
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-		<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>
-</material>
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
 		</mutation>
-	</rayType>
-</rtMaterial>
+	</technique>
+
+	</techniques>
+
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/background.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/Background_Roughness.ankitex"/>
+		<input name="m_metallic" value="0.000000"/>
+		<input name="u_normalTex" value="Assets/background_ddn.ankitex"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.000000"/>
+		
+	</inputs>
+</material>

+ 59 - 27
Samples/Sponza/Assets/roof_4359bd4e3b26845.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_TEX" value="0"/>
-		<mutator name="NORMAL_TEX" value="1"/>
-		<mutator name="PARALLAX" value="0"/>
-		<mutator name="EMISSIVE_TEX" value="0"/>
-		<mutator name="ALPHA_TEST" value="0"/>
-	</mutation>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-	<inputs>
-		
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-		<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>
-</material>
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
 		</mutation>
-	</rayType>
-</rtMaterial>
+	</technique>
+
+	</techniques>
+
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/sponza_roof_diff.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/Sponza_Roof_roughness.ankitex"/>
+		<input name="m_metallic" value="0.000000"/>
+		<input name="u_normalTex" value="Assets/Sponza_Roof_normal.ankitex"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.000000"/>
+		
+	</inputs>
+</material>

+ 59 - 27
Samples/Sponza/Assets/vase_45c3983f6cc9c489.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_TEX" value="0"/>
-		<mutator name="NORMAL_TEX" value="1"/>
-		<mutator name="PARALLAX" value="0"/>
-		<mutator name="EMISSIVE_TEX" value="0"/>
-		<mutator name="ALPHA_TEST" value="0"/>
-	</mutation>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-	<inputs>
-		
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-		<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>
-</material>
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
 		</mutation>
-	</rayType>
-</rtMaterial>
+	</technique>
+
+	</techniques>
+
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/vase_dif.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/Vase_roughness.ankitex"/>
+		<input name="m_metallic" value="0.000000"/>
+		<input name="u_normalTex" value="Assets/vase_ddn.ankitex"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.000000"/>
+		
+	</inputs>
+</material>

+ 59 - 27
Samples/Sponza/Assets/vase_fl_580cea687de3d758.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_TEX" value="0"/>
-		<mutator name="NORMAL_TEX" value="1"/>
-		<mutator name="PARALLAX" value="0"/>
-		<mutator name="EMISSIVE_TEX" value="0"/>
-		<mutator name="ALPHA_TEST" value="1"/>
-	</mutation>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="1"/>
+			</mutation>
+		</technique>
 
 
-	<inputs>
-		
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="1"/>
+			</mutation>
+		</technique>
 
 
-		<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>
-</material>
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="1"/>
+			</mutation>
+		</technique>
 
 
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
 		</mutation>
-	</rayType>
-</rtMaterial>
+	</technique>
+
+	</techniques>
+
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/vase_plant_tga.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/VaseRound_roughness.ankitex"/>
+		<input name="m_metallic" value="0.000000"/>
+		<input name="u_normalTex" value="Assets/VasePlant_normal.ankitex"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.250000"/>
+		
+	</inputs>
+</material>

+ 59 - 27
Samples/Sponza/Assets/vase_hanging_c2d2b40b27cacd7d.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_TEX" value="0"/>
-		<mutator name="NORMAL_TEX" value="1"/>
-		<mutator name="PARALLAX" value="0"/>
-		<mutator name="EMISSIVE_TEX" value="0"/>
-		<mutator name="ALPHA_TEST" value="0"/>
-	</mutation>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-	<inputs>
-		
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-		<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>
-</material>
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
 		</mutation>
-	</rayType>
-</rtMaterial>
+	</technique>
+
+	</techniques>
+
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/vase_hanging_tga.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/VaseHanging_roughness_tga.ankitex"/>
+		<input name="m_metallic" value="0.000000"/>
+		<input name="u_normalTex" value="Assets/VaseHanging_normal_tga.ankitex"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.000000"/>
+		
+	</inputs>
+</material>

+ 59 - 27
Samples/Sponza/Assets/vase_round_71af81a1ac0a7c3e.ankimtl

@@ -1,35 +1,67 @@
 <?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="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="1"/>
-		<mutator name="SPECULAR_TEX" value="0"/>
-		<mutator name="ROUGHNESS_TEX" value="1"/>
-		<mutator name="METAL_TEX" value="0"/>
-		<mutator name="NORMAL_TEX" value="1"/>
-		<mutator name="PARALLAX" value="0"/>
-		<mutator name="EMISSIVE_TEX" value="0"/>
-		<mutator name="ALPHA_TEST" value="0"/>
-	</mutation>
+<material shadows="1">
+	<techniques>
+		<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="0"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-	<inputs>
-		
+		<technique name="GBufferEarlyZ" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="1"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-		<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>
-</material>
+		<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+			<mutation>
+				<mutator name="TECHNIQUE" value="2"/>
+				<mutator name="DIFFUSE_TEX" value="1"/>
+				<mutator name="SPECULAR_TEX" value="0"/>
+				<mutator name="ROUGHNESS_TEX" value="1"/>
+				<mutator name="METAL_TEX" value="0"/>
+				<mutator name="NORMAL_TEX" value="1"/>
+				<mutator name="PARALLAX" value="0"/>
+				<mutator name="EMISSIVE_TEX" value="0"/>
+				<mutator name="ALPHA_TEST" value="0"/>
+			</mutation>
+		</technique>
 
 
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+		
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
 		</mutation>
-	</rayType>
-</rtMaterial>
+	</technique>
+
+	</techniques>
+
+	<inputs>
+		
+		<input name="u_diffTex" value="Assets/vase_round_tga.ankitex"/>
+		<input name="m_specColor" value="0.040000 0.040000 0.040000"/>
+		<input name="u_roughnessTex" value="Assets/VaseRound_roughness.ankitex"/>
+		<input name="m_metallic" value="0.000000"/>
+		<input name="u_normalTex" value="Assets/VaseRound_normal.ankitex"/>
+		<input name="m_emission" value="0.000000 0.000000 0.000000"/>
+		<input name="m_subsurface" value="0.000000"/>
+		
+	</inputs>
+</material>