diff --git a/projects/mesh_shader/resources/shaders/shader.frag b/projects/mesh_shader/resources/shaders/shader.frag
index c3740e2c79da1a34287e1339b3213d2c4721f818..f4f6982f2089e6c8e102027f3b8763bb38f8e59c 100644
--- a/projects/mesh_shader/resources/shaders/shader.frag
+++ b/projects/mesh_shader/resources/shaders/shader.frag
@@ -2,8 +2,31 @@
 #extension GL_ARB_separate_shader_objects : enable
 
 layout(location = 0) in  vec3 passNormal;
+layout(location = 1) in  flat uint passTaskIndex;
 layout(location = 0) out vec3 outColor;
 
+uint lowbias32(uint x)
+{
+    x ^= x >> 16;
+    x *= 0x7feb352dU;
+    x ^= x >> 15;
+    x *= 0x846ca68bU;
+    x ^= x >> 16;
+    return x;
+}
+
+float hashToFloat(uint hash){
+    return (hash % 255) / 255.f;
+}
+
+vec3 colorFromIndex(uint i){
+    return vec3(
+        hashToFloat(lowbias32(i+0)),
+        hashToFloat(lowbias32(i+1)),
+        hashToFloat(lowbias32(i+2)));
+}
+
 void main() {
-	outColor = normalize(passNormal) * 0.5 +0.5;
+	outColor = normalize(passNormal) * 0.5 + 0.5;
+    outColor = colorFromIndex(passTaskIndex);
 }
\ No newline at end of file
diff --git a/projects/mesh_shader/resources/shaders/shader.mesh b/projects/mesh_shader/resources/shaders/shader.mesh
index a120e432441a6f367772ded537a89c1f4b92a414..848fca2ccbcdf94eb9551bfd3aa101710daf29a8 100644
--- a/projects/mesh_shader/resources/shaders/shader.mesh
+++ b/projects/mesh_shader/resources/shaders/shader.mesh
@@ -12,6 +12,7 @@ layout( push_constant ) uniform constants{
 };
 
 layout(location = 0) out vec3 passNormal[];
+layout(location = 1) out uint passTaskIndex[];
 
 struct Vertex
 {
@@ -45,8 +46,10 @@ void main()	{
     
     vec3 inPos      = vertices[index].position;
     vec3 inNormal   = vertices[index].normal;
+    
     gl_MeshVerticesNV[workIndex].gl_Position    = mvp * vec4(inPos, 1);
     passNormal[workIndex]                       = inNormal;
+    passTaskIndex[workIndex]                    = previousMeshGroupCount;
     
     if(gl_LocalInvocationID.x == 0){
         gl_PrimitiveCountNV = 10;