So, i read about MeshShaders. And was curious to implement a simple MeshShader in UE.
I used Nanite as a resource, i can run the meshshader and it should render a basic cube, but for some unknown reason the cube is not visible in the editor. when i capture a frame with renderdoc i can view the cube.
i think dispatching the meshshader by using the GetRendererModule().RegisterPostOpaqueRenderDelegate(…) is wrong?
Nanite has a custom call in the renderer if i got it right.
Any clue where the right hook for the dispatch is?
float4 TransformPosition(float x, float y, float z)
{
return mul(float4(x, y, z, 1), ViewProjection);
}
// Entry point for Mesh Shader
[numthreads(1, 1, 1)]
[outputtopology("triangle")]
void MainMS(
out vertices VSOut verts[8],
out indices uint3 tris[12])
{
SetMeshOutputCounts(8, 12);
verts[0].Position = TransformPosition(-100, -100, -100);
verts[1].Position = TransformPosition(-100, -100, 100);
verts[2].Position = TransformPosition(-100, 100, -100);
verts[3].Position = TransformPosition(-100, 100, 100);
verts[4].Position = TransformPosition( 100, -100, -100);
verts[5].Position = TransformPosition( 100, -100, 100);
verts[6].Position = TransformPosition( 100, 100, -100);
verts[7].Position = TransformPosition( 100, 100, 100);
verts[0].Color = float3(0, 0, 0);
verts[1].Color = float3(0, 0, 1);
verts[2].Color = float3(0, 1, 0);
verts[3].Color = float3(0, 1, 1);
verts[4].Color = float3(1, 0, 0);
verts[5].Color = float3(1, 0, 1);
verts[6].Color = float3(1, 1, 0);
verts[7].Color = float3(1, 1, 1);
tris[0] = uint3(0, 2, 1);
tris[1] = uint3(1, 2, 3);
tris[2] = uint3(4, 5, 6);
tris[3] = uint3(5, 7, 6);
tris[4] = uint3(0, 1, 5);
tris[5] = uint3(0, 5, 4);
tris[6] = uint3(2, 6, 7);
tris[7] = uint3(2, 7, 3);
tris[8] = uint3(0, 4, 6);
tris[9] = uint3(0, 6, 2);
tris[10] = uint3(1, 3, 7);
tris[11] = uint3(1, 7, 5);
}
float3 MainPS(VSOut In) : SV_Target0
{
return In.Color;
}