Procedural Fur with mesh shaders

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…)?

Well amd just published a tutorial on grass rendering that can basically be used for fur aswell.

1 Like