|
@@ -3,10 +3,9 @@
|
|
|
// Code licensed under the BSD License.
|
|
// Code licensed under the BSD License.
|
|
|
// http://www.anki3d.org/LICENSE
|
|
// http://www.anki3d.org/LICENSE
|
|
|
|
|
|
|
|
-#pragma anki mutator ANKI_INSTANCED 0 1
|
|
|
|
|
#pragma anki mutator ANKI_LOD 0 1 2
|
|
#pragma anki mutator ANKI_LOD 0 1 2
|
|
|
#pragma anki mutator ANKI_VELOCITY 0 1
|
|
#pragma anki mutator ANKI_VELOCITY 0 1
|
|
|
-#pragma anki mutator ANKI_PASS 0 2 3
|
|
|
|
|
|
|
+#pragma anki mutator TECHNIQUE 0 1 2
|
|
|
#pragma anki mutator ANKI_BONES 0 1
|
|
#pragma anki mutator ANKI_BONES 0 1
|
|
|
#pragma anki mutator DIFFUSE_TEX 0 1
|
|
#pragma anki mutator DIFFUSE_TEX 0 1
|
|
|
#pragma anki mutator SPECULAR_TEX 0 1
|
|
#pragma anki mutator SPECULAR_TEX 0 1
|
|
@@ -17,159 +16,143 @@
|
|
|
#pragma anki mutator EMISSIVE_TEX 0 1
|
|
#pragma anki mutator EMISSIVE_TEX 0 1
|
|
|
#pragma anki mutator ALPHA_TEST 0 1
|
|
#pragma anki mutator ALPHA_TEST 0 1
|
|
|
|
|
|
|
|
-#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 TECHNIQUE 1 DIFFUSE_TEX 1 ALPHA_TEST 0 to TECHNIQUE 1 DIFFUSE_TEX 0 ALPHA_TEST 0
|
|
|
|
|
+#pragma anki rewrite_mutation TECHNIQUE 2 DIFFUSE_TEX 1 ALPHA_TEST 0 to TECHNIQUE 2 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
|
|
|
|
|
|
|
+#pragma anki rewrite_mutation TECHNIQUE 1 SPECULAR_TEX 1 to TECHNIQUE 1 SPECULAR_TEX 0
|
|
|
|
|
+#pragma anki rewrite_mutation TECHNIQUE 2 SPECULAR_TEX 1 to TECHNIQUE 2 SPECULAR_TEX 0
|
|
|
|
|
|
|
|
-#pragma anki rewrite_mutation ANKI_PASS 2 NORMAL_TEX 1 to ANKI_PASS 2 NORMAL_TEX 0
|
|
|
|
|
-#pragma anki rewrite_mutation ANKI_PASS 3 NORMAL_TEX 1 to ANKI_PASS 3 NORMAL_TEX 0
|
|
|
|
|
|
|
+#pragma anki rewrite_mutation TECHNIQUE 1 NORMAL_TEX 1 to TECHNIQUE 1 NORMAL_TEX 0
|
|
|
|
|
+#pragma anki rewrite_mutation TECHNIQUE 2 NORMAL_TEX 1 to TECHNIQUE 2 NORMAL_TEX 0
|
|
|
|
|
|
|
|
-#pragma anki rewrite_mutation ANKI_PASS 2 ROUGHNESS_TEX 1 to ANKI_PASS 2 ROUGHNESS_TEX 0
|
|
|
|
|
-#pragma anki rewrite_mutation ANKI_PASS 3 ROUGHNESS_TEX 1 to ANKI_PASS 3 ROUGHNESS_TEX 0
|
|
|
|
|
|
|
+#pragma anki rewrite_mutation TECHNIQUE 1 ROUGHNESS_TEX 1 to TECHNIQUE 1 ROUGHNESS_TEX 0
|
|
|
|
|
+#pragma anki rewrite_mutation TECHNIQUE 2 ROUGHNESS_TEX 1 to TECHNIQUE 2 ROUGHNESS_TEX 0
|
|
|
|
|
|
|
|
-#pragma anki rewrite_mutation ANKI_PASS 2 METAL_TEX 1 to ANKI_PASS 2 METAL_TEX 0
|
|
|
|
|
-#pragma anki rewrite_mutation ANKI_PASS 3 METAL_TEX 1 to ANKI_PASS 3 METAL_TEX 0
|
|
|
|
|
|
|
+#pragma anki rewrite_mutation TECHNIQUE 1 METAL_TEX 1 to TECHNIQUE 1 METAL_TEX 0
|
|
|
|
|
+#pragma anki rewrite_mutation TECHNIQUE 2 METAL_TEX 1 to TECHNIQUE 2 METAL_TEX 0
|
|
|
|
|
|
|
|
-#pragma anki rewrite_mutation ANKI_PASS 2 EMISSIVE_TEX 1 to ANKI_PASS 2 EMISSIVE_TEX 0
|
|
|
|
|
-#pragma anki rewrite_mutation ANKI_PASS 3 EMISSIVE_TEX 1 to ANKI_PASS 3 EMISSIVE_TEX 0
|
|
|
|
|
|
|
+#pragma anki rewrite_mutation TECHNIQUE 1 EMISSIVE_TEX 1 to TECHNIQUE 1 EMISSIVE_TEX 0
|
|
|
|
|
+#pragma anki rewrite_mutation TECHNIQUE 2 EMISSIVE_TEX 1 to TECHNIQUE 2 EMISSIVE_TEX 0
|
|
|
|
|
|
|
|
-#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
|
|
|
|
|
|
|
+#pragma anki rewrite_mutation TECHNIQUE 1 PARALLAX 1 to TECHNIQUE 1 PARALLAX 0
|
|
|
|
|
+#pragma anki rewrite_mutation TECHNIQUE 2 PARALLAX 1 to TECHNIQUE 2 PARALLAX 0
|
|
|
|
|
|
|
|
#pragma anki rewrite_mutation ALPHA_TEST 1 DIFFUSE_TEX 0 to ALPHA_TEST 0 DIFFUSE_TEX 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>
|
|
#include <AnKi/Shaders/GBufferCommon.glsl>
|
|
|
|
|
|
|
|
-#pragma anki reflect u_ankiGlobalSampler
|
|
|
|
|
-layout(set = 0, binding = 3) uniform sampler u_ankiGlobalSampler;
|
|
|
|
|
-#if DIFFUSE_TEX == 1 && (ANKI_PASS == PASS_GB || ALPHA_TEST)
|
|
|
|
|
|
|
+layout(set = MATERIAL_SET_EXTERNAL, binding = MATERIAL_BINDING_GLOBAL_SAMPLER) uniform sampler u_globalSampler;
|
|
|
|
|
+
|
|
|
|
|
+#if DIFFUSE_TEX
|
|
|
# pragma anki reflect u_diffTex
|
|
# pragma anki reflect u_diffTex
|
|
|
-layout(set = 0, binding = 4) uniform ANKI_RP texture2D u_diffTex;
|
|
|
|
|
-# define USING_DIFF_TEX 1
|
|
|
|
|
|
|
+layout(set = MATERIAL_SET_EXTERNAL,
|
|
|
|
|
+ binding = MATERIAL_BINDING_FIRST_NON_STANDARD + 0u) uniform ANKI_RP texture2D u_diffTex;
|
|
|
#endif
|
|
#endif
|
|
|
-#if SPECULAR_TEX == 1 && ANKI_PASS == PASS_GB
|
|
|
|
|
|
|
+
|
|
|
|
|
+#if SPECULAR_TEX
|
|
|
# pragma anki reflect u_specTex
|
|
# pragma anki reflect u_specTex
|
|
|
-layout(set = 0, binding = 5) uniform ANKI_RP texture2D u_specTex;
|
|
|
|
|
-# define USING_SPECULAR_TEX 1
|
|
|
|
|
|
|
+layout(set = MATERIAL_SET_EXTERNAL,
|
|
|
|
|
+ binding = MATERIAL_BINDING_FIRST_NON_STANDARD + 1u) uniform ANKI_RP texture2D u_specTex;
|
|
|
#endif
|
|
#endif
|
|
|
-#if ROUGHNESS_TEX == 1 && ANKI_PASS == PASS_GB
|
|
|
|
|
|
|
+
|
|
|
|
|
+#if ROUGHNESS_TEX
|
|
|
# pragma anki reflect u_roughnessTex
|
|
# pragma anki reflect u_roughnessTex
|
|
|
-layout(set = 0, binding = 6) uniform ANKI_RP texture2D u_roughnessTex;
|
|
|
|
|
-# define USING_ROUGHNESS_TEX 1
|
|
|
|
|
|
|
+layout(set = MATERIAL_SET_EXTERNAL,
|
|
|
|
|
+ binding = MATERIAL_BINDING_FIRST_NON_STANDARD + 2u) uniform ANKI_RP texture2D u_roughnessTex;
|
|
|
#endif
|
|
#endif
|
|
|
-#if NORMAL_TEX == 1 && ANKI_PASS == PASS_GB && ANKI_LOD < 2
|
|
|
|
|
|
|
+
|
|
|
|
|
+#if NORMAL_TEX
|
|
|
# pragma anki reflect u_normalTex
|
|
# pragma anki reflect u_normalTex
|
|
|
-layout(set = 0, binding = 7) uniform ANKI_RP texture2D u_normalTex;
|
|
|
|
|
-# define USING_NORMAL_TEX 1
|
|
|
|
|
|
|
+layout(set = MATERIAL_SET_EXTERNAL,
|
|
|
|
|
+ binding = MATERIAL_BINDING_FIRST_NON_STANDARD + 3u) uniform ANKI_RP texture2D u_normalTex;
|
|
|
#endif
|
|
#endif
|
|
|
-#if METAL_TEX == 1 && ANKI_PASS == PASS_GB
|
|
|
|
|
|
|
+
|
|
|
|
|
+#if METAL_TEX
|
|
|
# pragma anki reflect u_metallicTex
|
|
# pragma anki reflect u_metallicTex
|
|
|
-layout(set = 0, binding = 8) uniform ANKI_RP texture2D u_metallicTex;
|
|
|
|
|
-# define USING_METALLIC_TEX 1
|
|
|
|
|
|
|
+layout(set = MATERIAL_SET_EXTERNAL,
|
|
|
|
|
+ binding = MATERIAL_BINDING_FIRST_NON_STANDARD + 4u) uniform ANKI_RP texture2D u_metallicTex;
|
|
|
#endif
|
|
#endif
|
|
|
-#if REALLY_USING_PARALLAX
|
|
|
|
|
|
|
+
|
|
|
|
|
+#if PARALLAX
|
|
|
# pragma anki reflect u_heightTex
|
|
# pragma anki reflect u_heightTex
|
|
|
-layout(set = 0, binding = 9) uniform ANKI_RP texture2D u_heightTex;
|
|
|
|
|
|
|
+layout(set = MATERIAL_SET_EXTERNAL,
|
|
|
|
|
+ binding = MATERIAL_BINDING_FIRST_NON_STANDARD + 5u) uniform ANKI_RP texture2D u_heightTex;
|
|
|
#endif
|
|
#endif
|
|
|
-#if EMISSIVE_TEX == 1 && ANKI_PASS == PASS_GB
|
|
|
|
|
|
|
+
|
|
|
|
|
+#if EMISSIVE_TEX
|
|
|
# pragma anki reflect u_emissiveTex
|
|
# pragma anki reflect u_emissiveTex
|
|
|
-layout(set = 0, binding = 10) uniform ANKI_RP texture2D u_emissiveTex;
|
|
|
|
|
-# define USING_EMISSIVE_TEX 1
|
|
|
|
|
|
|
+layout(set = MATERIAL_SET_EXTERNAL,
|
|
|
|
|
+ binding = MATERIAL_BINDING_FIRST_NON_STANDARD + 6u) uniform ANKI_RP texture2D u_emissiveTex;
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
-#if ANKI_PASS == PASS_GB
|
|
|
|
|
-struct PerDraw
|
|
|
|
|
|
|
+#pragma anki reflect AnKiLocalUniforms
|
|
|
|
|
+struct AnKiLocalUniforms
|
|
|
{
|
|
{
|
|
|
-# if !defined(USING_DIFF_TEX)
|
|
|
|
|
|
|
+#if !DIFFUSE_TEX
|
|
|
Vec3 m_diffColor;
|
|
Vec3 m_diffColor;
|
|
|
-# endif
|
|
|
|
|
-# if !defined(USING_ROUGHNESS_TEX)
|
|
|
|
|
|
|
+#endif
|
|
|
|
|
+#if !ROUGHNESS_TEX
|
|
|
F32 m_roughness;
|
|
F32 m_roughness;
|
|
|
-# endif
|
|
|
|
|
-# if !defined(USING_SPECULAR_TEX)
|
|
|
|
|
|
|
+#endif
|
|
|
|
|
+#if !SPECULAR_TEX
|
|
|
Vec3 m_specColor;
|
|
Vec3 m_specColor;
|
|
|
-# endif
|
|
|
|
|
-# if !defined(USING_METALLIC_TEX)
|
|
|
|
|
|
|
+#endif
|
|
|
|
|
+#if !METAL_TEX
|
|
|
F32 m_metallic;
|
|
F32 m_metallic;
|
|
|
-# endif
|
|
|
|
|
-# if !defined(USING_EMISSIVE_TEX)
|
|
|
|
|
|
|
+#endif
|
|
|
|
|
+#if !EMISSIVE_TEX
|
|
|
Vec3 m_emission;
|
|
Vec3 m_emission;
|
|
|
-# endif
|
|
|
|
|
-# if REALLY_USING_PARALLAX
|
|
|
|
|
|
|
+#endif
|
|
|
|
|
+#if PARALLAX
|
|
|
F32 m_heightmapScale;
|
|
F32 m_heightmapScale;
|
|
|
-# endif
|
|
|
|
|
-# if ANKI_PASS == PASS_GB
|
|
|
|
|
- F32 m_subsurface;
|
|
|
|
|
-# endif
|
|
|
|
|
-};
|
|
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
-struct PerInstance
|
|
|
|
|
-{
|
|
|
|
|
- Mat3x4 m_ankiTransform;
|
|
|
|
|
-#if ANKI_PASS == PASS_GB
|
|
|
|
|
- Mat3 m_ankiRotation;
|
|
|
|
|
-#endif
|
|
|
|
|
-#if ANKI_PASS == PASS_GB && ANKI_VELOCITY == 1
|
|
|
|
|
- Mat3x4 m_ankiPreviousTransform;
|
|
|
|
|
-#endif
|
|
|
|
|
|
|
+ F32 m_subsurface;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-#if ANKI_PASS == PASS_GB
|
|
|
|
|
-# pragma anki reflect b_ankiPerDraw
|
|
|
|
|
-layout(set = 0, binding = 0, row_major, scalar) uniform b_ankiPerDraw
|
|
|
|
|
|
|
+layout(set = MATERIAL_SET_EXTERNAL, binding = MATERIAL_BINDING_LOCAL_UNIFORMS, row_major,
|
|
|
|
|
+ scalar) uniform b_localUniforms
|
|
|
{
|
|
{
|
|
|
- PerDraw u_ankiPerDraw;
|
|
|
|
|
|
|
+ AnKiLocalUniforms u_localUniforms;
|
|
|
};
|
|
};
|
|
|
-#endif
|
|
|
|
|
|
|
|
|
|
-#pragma anki reflect b_ankiPerInstance
|
|
|
|
|
-layout(set = 0, binding = 1, row_major, scalar) uniform b_ankiPerInstance
|
|
|
|
|
|
|
+layout(set = MATERIAL_SET_EXTERNAL, binding = MATERIAL_BINDING_RENDERABLE_GPU_VIEW, row_major,
|
|
|
|
|
+ scalar) uniform b_renderableGpuView
|
|
|
{
|
|
{
|
|
|
- PerInstance u_ankiPerInstance[MAX_INSTANCE_COUNT];
|
|
|
|
|
|
|
+ RenderableGpuView u_renderableGpuViews[MAX_INSTANCE_COUNT];
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-#pragma anki reflect b_ankiGlobalUniforms
|
|
|
|
|
-layout(set = 0, binding = 2, row_major, scalar) uniform b_ankiGlobalUniforms
|
|
|
|
|
|
|
+layout(set = MATERIAL_SET_EXTERNAL, binding = MATERIAL_BINDING_GLOBAL_UNIFORMS, row_major,
|
|
|
|
|
+ scalar) uniform b_globalUniforms
|
|
|
{
|
|
{
|
|
|
- MaterialGlobalUniforms u_ankiGlobals;
|
|
|
|
|
|
|
+ MaterialGlobalUniforms u_globalUniforms;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
#if ANKI_BONES
|
|
#if ANKI_BONES
|
|
|
-# pragma anki reflect b_ankiBoneTransforms
|
|
|
|
|
-layout(set = 0, binding = 11, row_major, std140) readonly buffer b_ankiBoneTransforms
|
|
|
|
|
|
|
+layout(set = MATERIAL_SET_EXTERNAL, binding = MATERIAL_BINDING_BONE_TRANSFORMS, row_major,
|
|
|
|
|
+ std140) readonly buffer b_boneTransforms
|
|
|
{
|
|
{
|
|
|
- Mat4 u_ankiBoneTransforms[];
|
|
|
|
|
|
|
+ Mat4 u_boneTransforms[];
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-# pragma anki reflect b_ankiPrevFrameBoneTransforms
|
|
|
|
|
-layout(set = 0, binding = 12, row_major, std140) readonly buffer b_ankiPrevFrameBoneTransforms
|
|
|
|
|
|
|
+layout(set = MATERIAL_SET_EXTERNAL, binding = MATERIAL_BINDING_PREVIOUS_BONE_TRANSFORMS, row_major,
|
|
|
|
|
+ std140) readonly buffer b_prevFrameBoneTransforms
|
|
|
{
|
|
{
|
|
|
- Mat4 u_ankiPrevFrameBoneTransforms[];
|
|
|
|
|
|
|
+ Mat4 u_prevFrameBoneTransforms[];
|
|
|
};
|
|
};
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
-#if !ANKI_INSTANCED
|
|
|
|
|
-# define INSTANCE_ID 0
|
|
|
|
|
-#else
|
|
|
|
|
-# define INSTANCE_ID gl_InstanceIndex
|
|
|
|
|
-#endif
|
|
|
|
|
-
|
|
|
|
|
#pragma anki start vert
|
|
#pragma anki start vert
|
|
|
|
|
|
|
|
// Globals (always in local space)
|
|
// Globals (always in local space)
|
|
|
Vec3 g_position = in_position;
|
|
Vec3 g_position = in_position;
|
|
|
-#if ANKI_PASS == PASS_GB
|
|
|
|
|
|
|
+#if TECHNIQUE == RENDERING_TECHNIQUE_GBUFFER
|
|
|
Vec3 g_prevPosition = in_position;
|
|
Vec3 g_prevPosition = in_position;
|
|
|
ANKI_RP Vec3 g_normal = in_normal;
|
|
ANKI_RP Vec3 g_normal = in_normal;
|
|
|
ANKI_RP Vec4 g_tangent = in_tangent;
|
|
ANKI_RP Vec4 g_tangent = in_tangent;
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
-#if ANKI_PASS == PASS_GB || ALPHA_TEST
|
|
|
|
|
|
|
+#if TECHNIQUE == RENDERING_TECHNIQUE_GBUFFER || ALPHA_TEST
|
|
|
Vec2 g_uv = in_uv;
|
|
Vec2 g_uv = in_uv;
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
@@ -177,31 +160,32 @@ Vec2 g_uv = in_uv;
|
|
|
#if ANKI_BONES
|
|
#if ANKI_BONES
|
|
|
void skinning()
|
|
void skinning()
|
|
|
{
|
|
{
|
|
|
- ANKI_RP Mat4 skinMat = u_ankiBoneTransforms[in_boneIndices[0]] * in_boneWeights[0];
|
|
|
|
|
- ANKI_RP Mat4 prevSkinMat = u_ankiPrevFrameBoneTransforms[in_boneIndices[0]] * in_boneWeights[0];
|
|
|
|
|
|
|
+ ANKI_RP Mat4 skinMat = u_boneTransforms[in_boneIndices[0]] * in_boneWeights[0];
|
|
|
|
|
+ ANKI_RP Mat4 prevSkinMat = u_prevFrameBoneTransforms[in_boneIndices[0]] * in_boneWeights[0];
|
|
|
ANKI_UNROLL for(U32 i = 1u; i < 4u; ++i)
|
|
ANKI_UNROLL for(U32 i = 1u; i < 4u; ++i)
|
|
|
{
|
|
{
|
|
|
- skinMat += u_ankiBoneTransforms[in_boneIndices[i]] * in_boneWeights[i];
|
|
|
|
|
- prevSkinMat += u_ankiPrevFrameBoneTransforms[in_boneIndices[i]] * in_boneWeights[i];
|
|
|
|
|
|
|
+ skinMat += u_boneTransforms[in_boneIndices[i]] * in_boneWeights[i];
|
|
|
|
|
+ prevSkinMat += u_prevFrameBoneTransforms[in_boneIndices[i]] * in_boneWeights[i];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-# if ANKI_PASS == PASS_GB
|
|
|
|
|
|
|
+# if TECHNIQUE == RENDERING_TECHNIQUE_GBUFFER
|
|
|
g_prevPosition = (prevSkinMat * Vec4(g_position, 1.0)).xyz;
|
|
g_prevPosition = (prevSkinMat * Vec4(g_position, 1.0)).xyz;
|
|
|
g_tangent.xyz = (skinMat * Vec4(g_tangent.xyz, 0.0)).xyz;
|
|
g_tangent.xyz = (skinMat * Vec4(g_tangent.xyz, 0.0)).xyz;
|
|
|
g_normal = (skinMat * Vec4(g_normal, 0.0)).xyz;
|
|
g_normal = (skinMat * Vec4(g_normal, 0.0)).xyz;
|
|
|
# endif
|
|
# endif
|
|
|
|
|
+
|
|
|
g_position = (skinMat * Vec4(g_position, 1.0)).xyz;
|
|
g_position = (skinMat * Vec4(g_position, 1.0)).xyz;
|
|
|
}
|
|
}
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
// Common store function
|
|
// Common store function
|
|
|
-#if ANKI_PASS == PASS_GB
|
|
|
|
|
|
|
+#if TECHNIQUE == RENDERING_TECHNIQUE_GBUFFER
|
|
|
void positionUvNormalTangent()
|
|
void positionUvNormalTangent()
|
|
|
{
|
|
{
|
|
|
- gl_Position = u_ankiGlobals.m_viewProjectionMatrix
|
|
|
|
|
- * Vec4(u_ankiPerInstance[INSTANCE_ID].m_ankiTransform * Vec4(g_position, 1.0), 1.0);
|
|
|
|
|
- out_normal = u_ankiPerInstance[INSTANCE_ID].m_ankiRotation * g_normal;
|
|
|
|
|
- out_tangent = u_ankiPerInstance[INSTANCE_ID].m_ankiRotation * g_tangent.xyz;
|
|
|
|
|
|
|
+ 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;
|
|
|
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;
|
|
|
}
|
|
}
|
|
@@ -215,12 +199,12 @@ void parallax()
|
|
|
const Vec3 t = in_tangent.xyz;
|
|
const Vec3 t = in_tangent.xyz;
|
|
|
const Vec3 b = cross(n, t) * in_tangent.w;
|
|
const Vec3 b = cross(n, t) * in_tangent.w;
|
|
|
|
|
|
|
|
- const Mat3 invTbn =
|
|
|
|
|
- transpose(u_ankiGlobals.m_viewRotationMatrix * u_ankiPerInstance[INSTANCE_ID].m_ankiRotation * Mat3(t, b, n));
|
|
|
|
|
|
|
+ const Mat3 invTbn = transpose(u_globalUniforms.m_viewRotationMatrix
|
|
|
|
|
+ * u_renderableGpuViews[gl_InstanceIndex].m_rotation * Mat3(t, b, n));
|
|
|
|
|
|
|
|
- const Vec3 viewPos =
|
|
|
|
|
- (u_ankiGlobals.m_viewMatrix * Vec4(u_ankiPerInstance[INSTANCE_ID].m_ankiTransform * Vec4(g_position, 1.0), 1.0))
|
|
|
|
|
- .xyz;
|
|
|
|
|
|
|
+ const Vec3 viewPos = (u_globalUniforms.m_viewMatrix
|
|
|
|
|
+ * Vec4(u_renderableGpuViews[gl_InstanceIndex].m_transform * Vec4(g_position, 1.0), 1.0))
|
|
|
|
|
+ .xyz;
|
|
|
out_distFromTheCamera = viewPos.z;
|
|
out_distFromTheCamera = viewPos.z;
|
|
|
|
|
|
|
|
out_eyeTangentSpace = invTbn * viewPos;
|
|
out_eyeTangentSpace = invTbn * viewPos;
|
|
@@ -228,18 +212,18 @@ void parallax()
|
|
|
}
|
|
}
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
-#if(ANKI_VELOCITY || ANKI_BONES) && ANKI_PASS == PASS_GB
|
|
|
|
|
|
|
+#if(ANKI_VELOCITY || ANKI_BONES) && TECHNIQUE == RENDERING_TECHNIQUE_GBUFFER
|
|
|
void velocity()
|
|
void velocity()
|
|
|
{
|
|
{
|
|
|
const Vec3 prevLocalPos = g_prevPosition;
|
|
const Vec3 prevLocalPos = g_prevPosition;
|
|
|
|
|
|
|
|
# if ANKI_VELOCITY
|
|
# if ANKI_VELOCITY
|
|
|
- const Mat3x4 trf = u_ankiPerInstance[INSTANCE_ID].m_ankiPreviousTransform;
|
|
|
|
|
|
|
+ const Mat3x4 trf = u_renderableGpuViews[gl_InstanceIndex].m_previousTransform;
|
|
|
# else
|
|
# else
|
|
|
- const Mat3x4 trf = u_ankiPerInstance[INSTANCE_ID].m_ankiTransform;
|
|
|
|
|
|
|
+ const Mat3x4 trf = u_renderableGpuViews[gl_InstanceIndex].m_transform;
|
|
|
# endif
|
|
# endif
|
|
|
|
|
|
|
|
- const Vec4 v4 = u_ankiGlobals.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);
|
|
|
|
|
|
|
|
const Vec2 prevNdc = v4.xy / v4.w;
|
|
const Vec2 prevNdc = v4.xy / v4.w;
|
|
|
|
|
|
|
@@ -256,7 +240,7 @@ void main()
|
|
|
skinning();
|
|
skinning();
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
-#if ANKI_PASS == PASS_GB
|
|
|
|
|
|
|
+#if TECHNIQUE == RENDERING_TECHNIQUE_GBUFFER
|
|
|
positionUvNormalTangent();
|
|
positionUvNormalTangent();
|
|
|
|
|
|
|
|
# if REALLY_USING_PARALLAX
|
|
# if REALLY_USING_PARALLAX
|
|
@@ -267,8 +251,8 @@ void main()
|
|
|
velocity();
|
|
velocity();
|
|
|
# endif
|
|
# endif
|
|
|
#else
|
|
#else
|
|
|
- gl_Position = u_ankiGlobals.m_viewProjectionMatrix
|
|
|
|
|
- * Vec4(u_ankiPerInstance[INSTANCE_ID].m_ankiTransform * Vec4(g_position, 1.0), 1.0);
|
|
|
|
|
|
|
+ gl_Position = u_globalUniforms.m_viewProjectionMatrix
|
|
|
|
|
+ * Vec4(u_renderableGpuViews[gl_InstanceIndex].m_transform * Vec4(g_position, 1.0), 1.0);
|
|
|
|
|
|
|
|
# if ALPHA_TEST
|
|
# if ALPHA_TEST
|
|
|
out_uv = g_uv;
|
|
out_uv = g_uv;
|
|
@@ -350,7 +334,7 @@ Vec2 computeTextureCoordParallax(texture2D heightMap, sampler sampl, Vec2 uv, F3
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
// Do normal mapping
|
|
// Do normal mapping
|
|
|
-#if ANKI_PASS == PASS_GB
|
|
|
|
|
|
|
+#if TECHNIQUE == RENDERING_TECHNIQUE_GBUFFER
|
|
|
ANKI_RP Vec3 readNormalFromTexture(ANKI_RP texture2D map, sampler sampl, highp Vec2 texCoords)
|
|
ANKI_RP Vec3 readNormalFromTexture(ANKI_RP texture2D map, sampler sampl, highp Vec2 texCoords)
|
|
|
{
|
|
{
|
|
|
// First read the texture
|
|
// First read the texture
|
|
@@ -376,54 +360,53 @@ void doAlphaText(F32 alpha)
|
|
|
|
|
|
|
|
void main()
|
|
void main()
|
|
|
{
|
|
{
|
|
|
-#if ANKI_PASS == PASS_GB
|
|
|
|
|
|
|
+#if TECHNIQUE == RENDERING_TECHNIQUE_GBUFFER
|
|
|
# if REALLY_USING_PARALLAX
|
|
# if REALLY_USING_PARALLAX
|
|
|
- const Vec2 uv =
|
|
|
|
|
- computeTextureCoordParallax(u_heightTex, u_ankiGlobalSampler, in_uv, u_ankiPerDraw.m_heightmapScale);
|
|
|
|
|
|
|
+ const Vec2 uv = computeTextureCoordParallax(u_heightTex, u_globalSampler, in_uv, u_localUniforms.m_heightmapScale);
|
|
|
# else
|
|
# else
|
|
|
const Vec2 uv = in_uv;
|
|
const Vec2 uv = in_uv;
|
|
|
# endif
|
|
# endif
|
|
|
|
|
|
|
|
-# if defined(USING_DIFF_TEX)
|
|
|
|
|
|
|
+# if DIFFUSE_TEX
|
|
|
# if ALPHA_TEST
|
|
# if ALPHA_TEST
|
|
|
- const ANKI_RP Vec4 diffColorA = texture(u_diffTex, u_ankiGlobalSampler, uv);
|
|
|
|
|
|
|
+ const ANKI_RP Vec4 diffColorA = texture(u_diffTex, u_globalSampler, uv);
|
|
|
doAlphaText(diffColorA.a);
|
|
doAlphaText(diffColorA.a);
|
|
|
const ANKI_RP Vec3 diffColor = diffColorA.rgb;
|
|
const ANKI_RP Vec3 diffColor = diffColorA.rgb;
|
|
|
# else
|
|
# else
|
|
|
- const ANKI_RP Vec3 diffColor = texture(u_diffTex, u_ankiGlobalSampler, uv).rgb;
|
|
|
|
|
|
|
+ const ANKI_RP Vec3 diffColor = texture(u_diffTex, u_globalSampler, uv).rgb;
|
|
|
# endif
|
|
# endif
|
|
|
# else
|
|
# else
|
|
|
- const ANKI_RP Vec3 diffColor = u_ankiPerDraw.m_diffColor;
|
|
|
|
|
|
|
+ const ANKI_RP Vec3 diffColor = u_localUniforms.m_diffColor;
|
|
|
# endif
|
|
# endif
|
|
|
|
|
|
|
|
-# if defined(USING_SPECULAR_TEX)
|
|
|
|
|
- const ANKI_RP Vec3 specColor = texture(u_specTex, u_ankiGlobalSampler, uv).rgb;
|
|
|
|
|
|
|
+# if SPECULAR_TEX
|
|
|
|
|
+ const ANKI_RP Vec3 specColor = texture(u_specTex, u_globalSampler, uv).rgb;
|
|
|
# else
|
|
# else
|
|
|
- const ANKI_RP Vec3 specColor = u_ankiPerDraw.m_specColor;
|
|
|
|
|
|
|
+ const ANKI_RP Vec3 specColor = u_localUniforms.m_specColor;
|
|
|
# endif
|
|
# endif
|
|
|
|
|
|
|
|
-# if defined(USING_ROUGHNESS_TEX)
|
|
|
|
|
- const ANKI_RP F32 roughness = texture(u_roughnessTex, u_ankiGlobalSampler, uv).g;
|
|
|
|
|
|
|
+# if ROUGHNESS_TEX
|
|
|
|
|
+ const ANKI_RP F32 roughness = texture(u_roughnessTex, u_globalSampler, uv).g;
|
|
|
# else
|
|
# else
|
|
|
- const ANKI_RP F32 roughness = u_ankiPerDraw.m_roughness;
|
|
|
|
|
|
|
+ const ANKI_RP F32 roughness = u_localUniforms.m_roughness;
|
|
|
# endif
|
|
# endif
|
|
|
|
|
|
|
|
-# if defined(USING_METALLIC_TEX)
|
|
|
|
|
- const ANKI_RP F32 metallic = texture(u_metallicTex, u_ankiGlobalSampler, uv).b;
|
|
|
|
|
|
|
+# if METAL_TEX
|
|
|
|
|
+ const ANKI_RP F32 metallic = texture(u_metallicTex, u_globalSampler, uv).b;
|
|
|
# else
|
|
# else
|
|
|
- const ANKI_RP F32 metallic = u_ankiPerDraw.m_metallic;
|
|
|
|
|
|
|
+ const ANKI_RP F32 metallic = u_localUniforms.m_metallic;
|
|
|
# endif
|
|
# endif
|
|
|
|
|
|
|
|
-# if defined(USING_NORMAL_TEX)
|
|
|
|
|
- const ANKI_RP Vec3 normal = readNormalFromTexture(u_normalTex, u_ankiGlobalSampler, uv);
|
|
|
|
|
|
|
+# if NORMAL_TEX
|
|
|
|
|
+ const ANKI_RP Vec3 normal = readNormalFromTexture(u_normalTex, u_globalSampler, uv);
|
|
|
# else
|
|
# else
|
|
|
const ANKI_RP Vec3 normal = normalize(in_normal);
|
|
const ANKI_RP Vec3 normal = normalize(in_normal);
|
|
|
# endif
|
|
# endif
|
|
|
|
|
|
|
|
-# if defined(USING_EMISSIVE_TEX)
|
|
|
|
|
- const ANKI_RP Vec3 emission = texture(u_emissiveTex, u_ankiGlobalSampler, uv).rgb;
|
|
|
|
|
|
|
+# if EMISSIVE_TEX
|
|
|
|
|
+ const ANKI_RP Vec3 emission = texture(u_emissiveTex, u_globalSampler, uv).rgb;
|
|
|
# else
|
|
# else
|
|
|
- const ANKI_RP Vec3 emission = u_ankiPerDraw.m_emission;
|
|
|
|
|
|
|
+ const ANKI_RP Vec3 emission = u_localUniforms.m_emission;
|
|
|
# endif
|
|
# endif
|
|
|
|
|
|
|
|
# if ANKI_VELOCITY || ANKI_BONES
|
|
# if ANKI_VELOCITY || ANKI_BONES
|
|
@@ -432,16 +415,16 @@ void main()
|
|
|
const Vec2 velocity = Vec2(1.0);
|
|
const Vec2 velocity = Vec2(1.0);
|
|
|
# endif
|
|
# endif
|
|
|
|
|
|
|
|
- packGBuffer(diffColor, normal, specColor, roughness, u_ankiPerDraw.m_subsurface, emission, metallic, velocity);
|
|
|
|
|
-#elif ANKI_PASS == PASS_EZ
|
|
|
|
|
|
|
+ packGBuffer(diffColor, normal, specColor, roughness, u_localUniforms.m_subsurface, emission, metallic, velocity);
|
|
|
|
|
+#elif TECHNIQUE == RENDERING_TECHNIQUE_GBUFFER_EZ
|
|
|
out_gbuffer0 = Vec4(0.0);
|
|
out_gbuffer0 = Vec4(0.0);
|
|
|
out_gbuffer1 = Vec4(0.0);
|
|
out_gbuffer1 = Vec4(0.0);
|
|
|
out_gbuffer2 = Vec4(0.0);
|
|
out_gbuffer2 = Vec4(0.0);
|
|
|
out_gbuffer3 = Vec2(0.0);
|
|
out_gbuffer3 = Vec2(0.0);
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
-#if ANKI_PASS != PASS_GB && ALPHA_TEST
|
|
|
|
|
- doAlphaText(texture(u_diffTex, u_ankiGlobalSampler, in_uv).a);
|
|
|
|
|
|
|
+#if TECHNIQUE != RENDERING_TECHNIQUE_GBUFFER && ALPHA_TEST
|
|
|
|
|
+ doAlphaText(texture(u_diffTex, u_globalSampler, in_uv).a);
|
|
|
#endif
|
|
#endif
|
|
|
}
|
|
}
|
|
|
|
|
|