I have a mesh shader pipeline that performs meshlet culling in task shader, and foreach meslet that passes the culling it dispaches one mesh shader invocation.
Each mesh shader invocation works in one meshlet.
if( ti < meshlet.vertex_count )
{
uint vertex_indice = uint(meshlet_vertices[meshlet.vertex_offset + ti + mesh.meshlet_vertices_offset]);
vec3 fragPos = vec3(model * vec4(vertices[vertex_indice + mesh.vertex_offset].position.xyz + mesh.pos,1.0));
gl_MeshVerticesEXT[ti].gl_Position = vp * vec4(fragPos,1.0) ;
uint mhash = hash(mi);
vertexOutput[ti].world_pos = fragPos;
vertexOutput[ti].uv = vertices[vertex_indice].uv.xy;
vertexOutput[ti].normal = normalize(mat3(model) * vertices[vertex_indice].normal.xyz).xyz;
}
if ( ti < meshlet.triangle_count )
{
uint index_offset = mesh.meshlet_triangles_offset;
gl_PrimitiveTriangleIndicesEXT[ti] = uvec3(
uint( meshlet_indices[index_offset + meshlet.triangle_offset + ti*3 ]),
uint( meshlet_indices[index_offset + meshlet.triangle_offset + ti*3 + 1 ]),
uint( meshlet_indices[index_offset + meshlet.triangle_offset + ti*3 + 2 ]));
}
if(gl_LocalInvocationID.x == 0 );
SetMeshOutputsEXT(meshlet.vertex_count, meshlet.triangle_count);
I would like to hear some ideas on how could I extend this shader to add a procedural fur. How could I emit a per vertex strand line oriented along the normal (just a start…)?