Browse Source

Add alpha testing to the main GBuffer shader. Change the GBuffer layout by adding a smarter way to store emission

Panagiotis Christopoulos Charitos 3 years ago
parent
commit
d2721cf6c3
60 changed files with 145 additions and 94 deletions
  1. 16 4
      AnKi/Importer/GltfImporterMaterial.cpp
  2. 2 2
      AnKi/Resource/ModelResource.cpp
  3. 27 14
      AnKi/Shaders/GBufferCommon.glsl
  4. 33 5
      AnKi/Shaders/GBufferGeneric.ankiprog
  5. 1 2
      AnKi/Shaders/GBufferGpuParticles.ankiprog
  6. 1 1
      AnKi/Shaders/LightShading.ankiprog
  7. 15 15
      AnKi/Shaders/PackFunctions.glsl
  8. 1 1
      AnKi/Shaders/TraditionalDeferredShading.ankiprog
  9. 4 4
      Samples/PhysicsPlayground/Assets/GpuSparks.ankimtl
  10. 1 1
      Samples/PhysicsPlayground/Assets/Scene.lua
  11. 1 0
      Samples/PhysicsPlayground/Assets/dynamic.ankimtl
  12. 1 0
      Samples/PhysicsPlayground/Assets/sky.ankimtl
  13. 1 0
      Samples/PhysicsPlayground/Assets/walls.001.ankimtl
  14. 1 0
      Samples/PhysicsPlayground/Assets/walls.ankimtl
  15. 1 1
      Samples/SimpleScene/Assets/Scene.lua
  16. 1 0
      Samples/SimpleScene/Assets/backWall.ankimtl
  17. 1 0
      Samples/SimpleScene/Assets/ceiling.ankimtl
  18. 1 0
      Samples/SimpleScene/Assets/floor.ankimtl
  19. 1 0
      Samples/SimpleScene/Assets/leftWall.ankimtl
  20. 1 0
      Samples/SimpleScene/Assets/light.ankimtl
  21. 1 0
      Samples/SimpleScene/Assets/rightWall.ankimtl
  22. 1 0
      Samples/SimpleScene/Assets/shortBox.ankimtl
  23. 1 0
      Samples/SimpleScene/Assets/tallBox.ankimtl
  24. 1 0
      Samples/SkeletalAnimation/Assets/Robot.001.ankimtl
  25. 1 1
      Samples/SkeletalAnimation/Assets/Scene.lua
  26. 1 0
      Samples/SkeletalAnimation/Assets/room.ankimtl
  27. 1 0
      Samples/SkeletalAnimation/Assets/room.blue.ankimtl
  28. 1 0
      Samples/SkeletalAnimation/Assets/room.green.ankimtl
  29. 1 0
      Samples/SkeletalAnimation/Assets/room.red.ankimtl
  30. 0 34
      Samples/Sponza/Assets/16___Default.ankimtl
  31. BIN
      Samples/Sponza/Assets/Cube.003.ankimesh
  32. 1 1
      Samples/Sponza/Assets/Scene.lua
  33. 1 0
      Samples/Sponza/Assets/arch.001.ankimtl
  34. 1 0
      Samples/Sponza/Assets/arch.ankimtl
  35. 1 0
      Samples/Sponza/Assets/bricks.ankimtl
  36. BIN
      Samples/Sponza/Assets/carpet.ankimesh
  37. BIN
      Samples/Sponza/Assets/carpet_lod1.ankimesh
  38. 1 0
      Samples/Sponza/Assets/ceiling.ankimtl
  39. 1 0
      Samples/Sponza/Assets/chain.ankimtl
  40. 1 0
      Samples/Sponza/Assets/column_a.ankimtl
  41. 1 0
      Samples/Sponza/Assets/column_b.ankimtl
  42. 1 0
      Samples/Sponza/Assets/column_c.ankimtl
  43. 1 0
      Samples/Sponza/Assets/details.ankimtl
  44. 1 0
      Samples/Sponza/Assets/fabric_a.ankimtl
  45. 1 0
      Samples/Sponza/Assets/fabric_c.ankimtl
  46. 1 0
      Samples/Sponza/Assets/fabric_d.ankimtl
  47. 1 0
      Samples/Sponza/Assets/fabric_e.ankimtl
  48. 1 0
      Samples/Sponza/Assets/fabric_f.ankimtl
  49. 1 0
      Samples/Sponza/Assets/flagpole.ankimtl
  50. 1 0
      Samples/Sponza/Assets/floor.ankimtl
  51. 1 0
      Samples/Sponza/Assets/leaf.ankimtl
  52. 1 0
      Samples/Sponza/Assets/lion.ankimtl
  53. 1 0
      Samples/Sponza/Assets/lion_stand.ankimtl
  54. 1 0
      Samples/Sponza/Assets/roof.ankimtl
  55. BIN
      Samples/Sponza/Assets/skybox.ankimesh
  56. 0 8
      Samples/Sponza/Assets/skybox_16___Default.ankimdl
  57. 1 0
      Samples/Sponza/Assets/vase.ankimtl
  58. 1 0
      Samples/Sponza/Assets/vase_fl.ankimtl
  59. 1 0
      Samples/Sponza/Assets/vase_hanging.ankimtl
  60. 1 0
      Samples/Sponza/Assets/vase_round.ankimtl

+ 16 - 4
AnKi/Importer/GltfImporterMaterial.cpp

@@ -5,6 +5,7 @@
 
 #include <AnKi/Importer/GltfImporter.h>
 #include <AnKi/Resource/ImageLoader.h>
+#include <AnKi/Util/WeakArray.h>
 
 namespace anki {
 
@@ -18,6 +19,7 @@ const char* MATERIAL_TEMPLATE = R"(<!-- This file is auto generated by ImporterM
 		<mutator name="NORMAL_TEX" value="%normalTexMutator%"/>
 		<mutator name="PARALLAX" value="%parallaxMutator%"/>
 		<mutator name="EMISSIVE_TEX" value="%emissiveTexMutator%"/>
+		<mutator name="ALPHA_TEST" value="%alphaTestMutator%"/>
 	</mutation>
 
 	<inputs>
@@ -61,13 +63,14 @@ static Error findConstantColorsInImage(CString fname, Vec4& constantColor, Gener
 	ANKI_ASSERT(iloader.getCompression() == ImageBinaryDataCompression::RAW);
 
 	const U8Vec4* data = reinterpret_cast<const U8Vec4*>(&iloader.getSurface(0, 0, 0).m_data[0]);
+	ConstWeakArray<U8Vec4> pixels(data, iloader.getWidth() * iloader.getHeight());
 
 	const F32 epsilon = 1.0f / 255.0f;
-	for(U32 y = 0; y < iloader.getWidth(); ++y)
+	for(U32 y = 0; y < iloader.getHeight(); ++y)
 	{
-		for(U32 x = 0; x < iloader.getHeight(); ++x)
+		for(U32 x = 0; x < iloader.getWidth(); ++x)
 		{
-			const U8Vec4& pixel = *(data + y * iloader.getWidth() + x);
+			const U8Vec4& pixel = pixels[y * iloader.getWidth() + x];
 			const Vec4 pixelf = Vec4(pixel) / 255.0f;
 
 			if(x == 0 && y == 0)
@@ -119,12 +122,20 @@ Error GltfImporter::writeMaterial(const cgltf_material& mtl, RayTypeBit usedRayT
 	// Diffuse
 	if(mtl.pbr_metallic_roughness.base_color_texture.texture)
 	{
+		const CString fname = getTextureUri(mtl.pbr_metallic_roughness.base_color_texture);
+
 		StringAuto uri(m_alloc);
-		uri.sprintf("%s%s", m_texrpath.cstr(), getTextureUri(mtl.pbr_metallic_roughness.base_color_texture).cstr());
+		uri.sprintf("%s%s", m_texrpath.cstr(), fname.cstr());
 
 		xml.replaceAll("%diff%",
 					   StringAuto(m_alloc).sprintf("<input shaderVar=\"u_diffTex\" value=\"%s\"/>", uri.cstr()));
 		xml.replaceAll("%diffTexMutator%", "1");
+
+		Vec4 constantColor;
+		ANKI_CHECK(findConstantColorsInImage(fname, constantColor, m_alloc));
+
+		const Bool constantAlpha = constantColor.w() >= 0.0f;
+		xml.replaceAll("%alphaTestMutator%", (constantAlpha) ? "0" : "1");
 	}
 	else
 	{
@@ -134,6 +145,7 @@ Error GltfImporter::writeMaterial(const cgltf_material& mtl, RayTypeBit usedRayT
 															 diffCol[0], diffCol[1], diffCol[2]));
 
 		xml.replaceAll("%diffTexMutator%", "0");
+		xml.replaceAll("%alphaTestMutator%", "0");
 	}
 
 	// Specular color (freshnel)

+ 2 - 2
AnKi/Resource/ModelResource.cpp

@@ -19,12 +19,12 @@ static Bool attributeIsRequired(VertexAttributeId loc, Pass pass, Bool hasSkin)
 	}
 	else if(!hasSkin)
 	{
-		return loc == VertexAttributeId::POSITION;
+		return loc == VertexAttributeId::POSITION || loc == VertexAttributeId::UV0;
 	}
 	else
 	{
 		return loc == VertexAttributeId::POSITION || loc == VertexAttributeId::BONE_INDICES
-			   || loc == VertexAttributeId::BONE_WEIGHTS;
+			   || loc == VertexAttributeId::BONE_WEIGHTS || loc == VertexAttributeId::UV0;
 	}
 }
 

+ 27 - 14
AnKi/Shaders/GBufferCommon.glsl

@@ -14,30 +14,35 @@
 // Vert input
 //
 #if defined(ANKI_VERTEX_SHADER)
+
 layout(location = VERTEX_ATTRIBUTE_ID_POSITION) in Vec3 in_position;
+
 #	if ANKI_PASS == PASS_GB
-layout(location = VERTEX_ATTRIBUTE_ID_UV0) in Vec2 in_uv;
 layout(location = VERTEX_ATTRIBUTE_ID_NORMAL) in Vec3 in_normal;
 layout(location = VERTEX_ATTRIBUTE_ID_TANGENT) in Vec4 in_tangent;
 #	endif
 
+#	if ANKI_PASS == PASS_GB || ALPHA_TEST
+layout(location = VERTEX_ATTRIBUTE_ID_UV0) in Vec2 in_uv;
+#	endif
+
 #	if ANKI_BONES
 layout(location = VERTEX_ATTRIBUTE_ID_BONE_WEIGHTS) in Vec4 in_boneWeights;
 layout(location = VERTEX_ATTRIBUTE_ID_BONE_INDICES) in UVec4 in_boneIndices;
 #	endif
-#endif
+
+#endif // defined(ANKI_VERTEX_SHADER)
 
 //
 // Vert out
 //
 #if defined(ANKI_VERTEX_SHADER)
-out gl_PerVertex
-{
-	Vec4 gl_Position;
-};
 
-#	if ANKI_PASS == PASS_GB
+#	if ANKI_PASS == PASS_GB || ALPHA_TEST
 layout(location = 0) out Vec2 out_uv;
+#	endif
+
+#	if ANKI_PASS == PASS_GB
 layout(location = 1) out ANKI_RP Vec3 out_normal;
 layout(location = 2) out ANKI_RP Vec3 out_tangent;
 layout(location = 3) out Vec3 out_bitangent;
@@ -52,27 +57,35 @@ layout(location = 6) out Vec3 out_normalTangentSpace;
 layout(location = 7) out Vec2 out_velocity;
 #		endif
 #	endif // ANKI_PASS == PASS_GB
+
 #endif // defined(ANKI_VERTEX_SHADER)
 
 //
 // Frag input
 //
-#if defined(ANKI_FRAGMENT_SHADER) && ANKI_PASS == PASS_GB
+#if defined(ANKI_FRAGMENT_SHADER)
+
+#	if ANKI_PASS == PASS_GB || ALPHA_TEST
 layout(location = 0) in Vec2 in_uv;
+#	endif
+
+#	if ANKI_PASS == PASS_GB
 layout(location = 1) in ANKI_RP Vec3 in_normal;
 layout(location = 2) in ANKI_RP Vec3 in_tangent;
 layout(location = 3) in Vec3 in_bitangent;
 
-#	if REALLY_USING_PARALLAX
+#		if REALLY_USING_PARALLAX
 layout(location = 4) in F32 in_distFromTheCamera;
 layout(location = 5) in Vec3 in_eyeTangentSpace;
 layout(location = 6) in Vec3 in_normalTangentSpace;
-#	endif
+#		endif
 
-#	if ANKI_VELOCITY || ANKI_BONES
+#		if ANKI_VELOCITY || ANKI_BONES
 layout(location = 7) in Vec2 in_velocity;
-#	endif
-#endif
+#		endif
+#	endif // ANKI_PASS == PASS_GB
+
+#endif // defined(ANKI_FRAGMENT_SHADER)
 
 //
 // Frag out
@@ -99,7 +112,7 @@ void packGBuffer(ANKI_RP Vec3 diffColor, ANKI_RP Vec3 normal, ANKI_RP Vec3 specu
 	g.m_f0 = specularColor;
 	g.m_roughness = roughness;
 	g.m_subsurface = subsurface;
-	g.m_emission = (emission.r + emission.g + emission.b) / 3.0;
+	g.m_emission = emission;
 	g.m_metallic = metallic;
 	g.m_velocity = velocity;
 	packGBuffer(g, out_gbuffer0, out_gbuffer1, out_gbuffer2, out_gbuffer3);

+ 33 - 5
AnKi/Shaders/GBufferGeneric.ankiprog

@@ -15,9 +15,10 @@
 #pragma anki mutator NORMAL_TEX 0 1
 #pragma anki mutator PARALLAX 0 1
 #pragma anki mutator EMISSIVE_TEX 0 1
+#pragma anki mutator ALPHA_TEST 0 1
 
-#pragma anki rewrite_mutation ANKI_PASS 2 DIFFUSE_TEX 1 to ANKI_PASS 2 DIFFUSE_TEX 0
-#pragma anki rewrite_mutation ANKI_PASS 3 DIFFUSE_TEX 1 to ANKI_PASS 3 DIFFUSE_TEX 0
+#pragma anki rewrite_mutation ANKI_PASS 2 DIFFUSE_TEX 1 ALPHA_TEST 0 to ANKI_PASS 2 DIFFUSE_TEX 0 ALPHA_TEST 0
+#pragma anki rewrite_mutation ANKI_PASS 3 DIFFUSE_TEX 1 ALPHA_TEST 0 to ANKI_PASS 3 DIFFUSE_TEX 0 ALPHA_TEST 0
 
 #pragma anki rewrite_mutation ANKI_PASS 2 SPECULAR_TEX 1 to ANKI_PASS 2 SPECULAR_TEX 0
 #pragma anki rewrite_mutation ANKI_PASS 3 SPECULAR_TEX 1 to ANKI_PASS 3 SPECULAR_TEX 0
@@ -37,13 +38,15 @@
 #pragma anki rewrite_mutation ANKI_PASS 2 PARALLAX 1 to ANKI_PASS 2 PARALLAX 0
 #pragma anki rewrite_mutation ANKI_PASS 3 PARALLAX 1 to ANKI_PASS 3 PARALLAX 0
 
-#define REALLY_USING_PARALLAX (PARALLAX == 1 && ANKI_PASS == 0 && ANKI_LOD == 0)
+#pragma anki rewrite_mutation ALPHA_TEST 1 DIFFUSE_TEX 0 to ALPHA_TEST 0 DIFFUSE_TEX 0
+
+#define REALLY_USING_PARALLAX (PARALLAX == 1 && ANKI_PASS == 0 && ANKI_LOD == 0 && ALPHA_TEST == 0)
 
 #include <AnKi/Shaders/GBufferCommon.glsl>
 
 #pragma anki reflect u_ankiGlobalSampler
 layout(set = 0, binding = 2) uniform sampler u_ankiGlobalSampler;
-#if DIFFUSE_TEX == 1 && ANKI_PASS == PASS_GB
+#if DIFFUSE_TEX == 1 && (ANKI_PASS == PASS_GB || ALPHA_TEST)
 #	pragma anki reflect u_diffTex
 layout(set = 0, binding = 3) uniform ANKI_RP texture2D u_diffTex;
 #	define USING_DIFF_TEX 1
@@ -159,11 +162,14 @@ layout(set = 0, binding = 11, row_major, std140) readonly buffer b_ankiPrevFrame
 Vec3 g_position = in_position;
 #if ANKI_PASS == PASS_GB
 Vec3 g_prevPosition = in_position;
-Vec2 g_uv = in_uv;
 ANKI_RP Vec3 g_normal = in_normal;
 ANKI_RP Vec4 g_tangent = in_tangent;
 #endif
 
+#if ANKI_PASS == PASS_GB || ALPHA_TEST
+Vec2 g_uv = in_uv;
+#endif
+
 // Perform skinning
 #if ANKI_BONES
 void skinning()
@@ -257,6 +263,10 @@ void main()
 #	endif
 #else
 	gl_Position = u_ankiPerInstance[INSTANCE_ID].m_ankiMvp * Vec4(g_position, 1.0);
+
+#	if ALPHA_TEST
+	out_uv = g_uv;
+#	endif
 #endif
 }
 #pragma anki end
@@ -350,6 +360,14 @@ ANKI_RP Vec3 readNormalFromTexture(ANKI_RP texture2D map, sampler sampl, highp V
 }
 #endif
 
+void doAlphaText(F32 alpha)
+{
+	if(alpha == 0.0)
+	{
+		discard;
+	}
+}
+
 void main()
 {
 #if ANKI_PASS == PASS_GB
@@ -361,7 +379,13 @@ void main()
 #	endif
 
 #	if defined(USING_DIFF_TEX)
+#		if ALPHA_TEST
+	const ANKI_RP Vec4 diffColorA = texture(u_diffTex, u_ankiGlobalSampler, uv);
+	doAlphaText(diffColorA.a);
+	const ANKI_RP Vec3 diffColor = diffColorA.rgb;
+#		else
 	const ANKI_RP Vec3 diffColor = texture(u_diffTex, u_ankiGlobalSampler, uv).rgb;
+#		endif
 #	else
 	const ANKI_RP Vec3 diffColor = u_ankiPerDraw.m_diffColor;
 #	endif
@@ -409,6 +433,10 @@ void main()
 	out_gbuffer2 = Vec4(0.0);
 	out_gbuffer3 = Vec2(0.0);
 #endif
+
+#if ANKI_PASS != PASS_GB && ALPHA_TEST
+	doAlphaText(texture(u_diffTex, u_ankiGlobalSampler, in_uv).a);
+#endif
 }
 
 #pragma anki end

+ 1 - 2
AnKi/Shaders/GBufferGpuParticles.ankiprog

@@ -81,8 +81,7 @@ void main()
 	g.m_f0 = u_ankiPerDraw.m_specColor;
 	g.m_roughness = u_ankiPerDraw.m_roughness;
 	g.m_subsurface = 0.0;
-	const ANKI_RP Vec3 emission = mix(u_ankiPerDraw.m_initialEmission, u_ankiPerDraw.m_finalEmission, in_lifeFactor);
-	g.m_emission = (emission.r + emission.g + emission.b) / 3.0;
+	g.m_emission = mix(u_ankiPerDraw.m_initialEmission, u_ankiPerDraw.m_finalEmission, in_lifeFactor);
 	g.m_metallic = u_ankiPerDraw.m_metallic;
 	g.m_velocity = in_velocity;
 	packGBuffer(g, out_gbuffer0, out_gbuffer1, out_gbuffer2, out_gbuffer3);

+ 1 - 1
AnKi/Shaders/LightShading.ankiprog

@@ -88,7 +88,7 @@ void main()
 #endif
 
 	// Ambient and emissive color
-	out_color = gbuffer.m_diffuse * gbuffer.m_emission;
+	out_color = gbuffer.m_emission;
 
 	// Dir light
 	const ANKI_RP Vec3 viewDir = normalize(u_clusteredShading.m_cameraPosition - worldPos);

+ 15 - 15
AnKi/Shaders/PackFunctions.glsl

@@ -6,6 +6,7 @@
 #pragma once
 
 #include <AnKi/Shaders/Common.glsl>
+#include <AnKi/Shaders/TonemappingFunctions.glsl>
 
 /// Pack 3D normal to 2D vector
 /// See the clean code in comments in revision < r467
@@ -141,18 +142,22 @@ struct GbufferInfo
 	ANKI_RP F32 m_roughness;
 	ANKI_RP F32 m_metallic;
 	ANKI_RP F32 m_subsurface;
-	ANKI_RP F32 m_emission;
+	ANKI_RP Vec3 m_emission;
 	Vec2 m_velocity;
 };
 
 // Populate the G buffer
 void packGBuffer(GbufferInfo g, out Vec4 rt0, out Vec4 rt1, out Vec4 rt2, out Vec2 rt3)
 {
-	rt0 = Vec4(g.m_diffuse, g.m_subsurface);
-	rt1 = Vec4(g.m_roughness, g.m_metallic, g.m_f0.x, FIXED_MAX_EMISSION / ABSOLUTE_MAX_EMISSION);
+	const F32 packedSubsurfaceMetallic = packUnorm2ToUnorm1(Vec2(g.m_subsurface, g.m_metallic));
+
+	const Vec3 tonemappedEmission = invertibleTonemap(g.m_emission);
+
+	rt0 = Vec4(g.m_diffuse, packedSubsurfaceMetallic);
+	rt1 = Vec4(g.m_roughness, g.m_f0.x, tonemappedEmission.rb);
 
 	const Vec3 encNorm = signedOctEncode(g.m_normal);
-	rt2 = Vec4(g.m_emission / FIXED_MAX_EMISSION, encNorm);
+	rt2 = Vec4(tonemappedEmission.g, encNorm);
 
 	rt3 = g.m_velocity;
 }
@@ -164,7 +169,7 @@ ANKI_RP Vec3 unpackDiffuseFromGBuffer(ANKI_RP Vec4 rt0, ANKI_RP F32 metallic)
 
 ANKI_RP Vec3 unpackNormalFromGBuffer(ANKI_RP Vec4 rt2)
 {
-	return signedOctDecode(rt2.gba);
+	return signedOctDecode(rt2.yzw);
 }
 
 ANKI_RP F32 unpackRoughnessFromGBuffer(ANKI_RP Vec4 rt1)
@@ -174,24 +179,19 @@ ANKI_RP F32 unpackRoughnessFromGBuffer(ANKI_RP Vec4 rt1)
 	return r;
 }
 
-ANKI_RP Vec3 unpackF0FromGBuffer(ANKI_RP Vec4 rt1)
-{
-	return Vec3(rt1.z);
-}
-
 // Read part of the G-buffer
 void unpackGBufferNoVelocity(ANKI_RP Vec4 rt0, ANKI_RP Vec4 rt1, ANKI_RP Vec4 rt2, out GbufferInfo g)
 {
 	g.m_diffuse = rt0.xyz;
-	g.m_subsurface = rt0.w;
+	const Vec2 unpackedSubsurfaceMetallic = unpackUnorm1ToUnorm2(rt0.w);
+	g.m_subsurface = unpackedSubsurfaceMetallic.x;
+	g.m_metallic = unpackedSubsurfaceMetallic.y;
 
 	g.m_roughness = unpackRoughnessFromGBuffer(rt1);
-	g.m_metallic = rt1.y;
-	g.m_f0 = unpackF0FromGBuffer(rt1);
-	const ANKI_RP F32 maxEmission = rt1.w * ABSOLUTE_MAX_EMISSION;
+	g.m_f0 = Vec3(rt1.y);
+	g.m_emission = invertInvertibleTonemap(Vec3(rt1.z, rt2.x, rt1.w));
 
 	g.m_normal = signedOctDecode(rt2.yzw);
-	g.m_emission = rt2.x * maxEmission;
 
 	g.m_velocity = Vec2(MAX_F32); // Put something random
 

+ 1 - 1
AnKi/Shaders/TraditionalDeferredShading.ankiprog

@@ -148,7 +148,7 @@ void main()
 	const F32 factor = shadowFactor * max(gbuffer.m_subsurface, lambert);
 #endif
 
-	out_color = gbuffer.m_diffuse * gbuffer.m_emission;
+	out_color = gbuffer.m_emission;
 	out_color += (specC + diffC) * u_unis.m_diffuseColor * factor;
 }
 

+ 4 - 4
Samples/PhysicsPlayground/Assets/GpuSparks.ankimtl

@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <material shaderProgram="Anki/Shaders/GBufferGpuParticles.ankiprog" shadow="0">
 	<inputs>
-		<input shaderVar="m_diffColor" value="1.0 0.1 0.1"/>
+		<input shaderVar="m_diffColor" value="0.0 0.0 0.0"/>
 		<input shaderVar="m_specColor" value="0.04 0.04 0.04"/>
-		<input shaderVar="m_roughness" value="9.0"/>
+		<input shaderVar="m_roughness" value="1.0"/>
 		<input shaderVar="m_metallic" value="0.0"/>
-		<input shaderVar="m_initialEmission" value="1024 1024 1024"/>
-		<input shaderVar="m_finalEmission" value="10 10 10"/>
+		<input shaderVar="m_initialEmission" value="200 0 0"/>
+		<input shaderVar="m_finalEmission" value="1 0 0"/>
 	</inputs>
 </material>
 

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

@@ -1,4 +1,4 @@
--- Generated by: /home/godlike/src/anki/buildd/Bin/GltfImporter PhysicsPlayground.gltf ../../ -rpath Assets -texrpath Assets
+-- Generated by: /home/godlike/src/anki/buildr/Bin/GltfImporter PhysicsPlayground.gltf ../../ -rpath Assets -texrpath Assets
 local scene = getSceneGraph()
 local events = getEventManager()
 

+ 1 - 0
Samples/PhysicsPlayground/Assets/dynamic.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/PhysicsPlayground/Assets/sky.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/PhysicsPlayground/Assets/walls.001.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/PhysicsPlayground/Assets/walls.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

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

@@ -1,4 +1,4 @@
--- Generated by: ../../../buildr/Bin/GltfImporter CornellBox.gltf /home/godlike/src/anki/Samples/SimpleScene/Assets -rpath Assets -texrpath Assets -lod-count 1
+-- Generated by: /home/godlike/src/anki/buildr/Bin/GltfImporter CornellBox.gltf . -rpath Assets -texrpath Assets
 local scene = getSceneGraph()
 local events = getEventManager()
 

+ 1 - 0
Samples/SimpleScene/Assets/backWall.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/SimpleScene/Assets/ceiling.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/SimpleScene/Assets/floor.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/SimpleScene/Assets/leftWall.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/SimpleScene/Assets/light.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/SimpleScene/Assets/rightWall.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/SimpleScene/Assets/shortBox.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/SimpleScene/Assets/tallBox.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/SkeletalAnimation/Assets/Robot.001.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

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

@@ -1,4 +1,4 @@
--- Generated by: /home/godlike/src/anki/buildd/Bin/GltfImporter droid.gltf /home/godlike/src/anki/Samples/SkeletalAnimation/Assets/ -rpath Assets -texrpath Assets
+-- Generated by: /home/godlike/src/anki/buildr/Bin/GltfImporter droid.gltf /home/godlike/src/anki/Samples/SkeletalAnimation/Assets/ -rpath Assets -texrpath Assets
 local scene = getSceneGraph()
 local events = getEventManager()
 

+ 1 - 0
Samples/SkeletalAnimation/Assets/room.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/SkeletalAnimation/Assets/room.blue.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/SkeletalAnimation/Assets/room.green.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/SkeletalAnimation/Assets/room.red.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 0 - 34
Samples/Sponza/Assets/16___Default.ankimtl

@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="0"/>
-		<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"/>
-	</mutation>
-
-	<inputs>
-		
-
-		<input shaderVar="m_diffColor" value="0.588000 0.588000 0.588000"/>
-		<input shaderVar="m_specColor" value="0.040000 0.040000 0.040000"/>
-		<input shaderVar="m_roughness" value="0.500000"/>
-		<input shaderVar="m_metallic" value="0.000000"/>
-		
-		<input shaderVar="m_emission" value="0.000000 0.000000 0.000000"/>
-		<input shaderVar="m_subsurface" value="0.000000"/>
-		
-	</inputs>
-</material>
-
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
-		<mutation>
-			<mutator name="ALPHA_TEXTURE" value="0"/>
-		</mutation>
-	</rayType>
-</rtMaterial>

BIN
Samples/Sponza/Assets/Cube.003.ankimesh


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

@@ -1,4 +1,4 @@
--- 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
+-- Generated by: /home/godlike/src/anki/buildr/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 events = getEventManager()
 

+ 1 - 0
Samples/Sponza/Assets/arch.001.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/Sponza/Assets/arch.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/Sponza/Assets/bricks.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

BIN
Samples/Sponza/Assets/carpet.ankimesh


BIN
Samples/Sponza/Assets/carpet_lod1.ankimesh


+ 1 - 0
Samples/Sponza/Assets/ceiling.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/Sponza/Assets/chain.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="0"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/Sponza/Assets/column_a.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/Sponza/Assets/column_b.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/Sponza/Assets/column_c.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/Sponza/Assets/details.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/Sponza/Assets/fabric_a.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/Sponza/Assets/fabric_c.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/Sponza/Assets/fabric_d.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/Sponza/Assets/fabric_e.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/Sponza/Assets/fabric_f.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/Sponza/Assets/flagpole.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/Sponza/Assets/floor.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/Sponza/Assets/leaf.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="1"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/Sponza/Assets/lion.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/Sponza/Assets/lion_stand.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/Sponza/Assets/roof.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

BIN
Samples/Sponza/Assets/skybox.ankimesh


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

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

+ 1 - 0
Samples/Sponza/Assets/vase.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/Sponza/Assets/vase_fl.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="1"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/Sponza/Assets/vase_hanging.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>

+ 1 - 0
Samples/Sponza/Assets/vase_round.ankimtl

@@ -9,6 +9,7 @@
 		<mutator name="NORMAL_TEX" value="1"/>
 		<mutator name="PARALLAX" value="0"/>
 		<mutator name="EMISSIVE_TEX" value="0"/>
+		<mutator name="ALPHA_TEST" value="0"/>
 	</mutation>
 
 	<inputs>