- Home /
UVs are not mapped properly in my unity surface shader
Hi,
I am trying to use compute shaders with surface shaders with dx11 tesselation shaders ( Using unity's distance base tesselation example from unity guide ). I copied the generated code from surface shaders and used it as a seperate shader.
I am generating vertices for a plane in compute shader. The triangles are being generated properly but I seem to have to a problem with mapping the UVs. With using any texture all I get the is black plane.
Here is my surface shader's vertex shader:
InternalTessInterp_appdata tessvert_surf(appdata v, uint id:SV_VertexID) {
InternalTessInterp_appdata o;
o.vertex = float4(vertexBuffer[id],1);
o.tangent = v.tangent;
o.normal = v.normal;
o.texcoord = float2(o.vertex.x/16,o.vertex.y/16);
return o;
}
Here is my Compute shader (the value of thread group size x, group size y and z is 4)
void GenerateMesh(uint3 id : SV_DispatchThreadID)
{
int idx = id.x + (id.y * thread_group_size_x * group_size_x) +
(id.z * thread_group_size_x * group_size_y * group_size_z);
float3 pos = float3(id.x, id.y, id.z);
output[6 * idx + 0].pos = pos + float3(1, 1, 0);
output[6 * idx + 1].pos = pos + float3(1, 0, 0);
output[6 * idx + 2].pos = pos;
output[6 * idx + 3].pos = pos;
output[6 * idx + 4].pos = pos + float3(0, 1, 0);
output[6 * idx + 5].pos = pos + float3(1, 1, 0);
}
Here is my CSharp code
void DrawMesh()
{
planetComputeShader.Dispatch(kernel, 4, 4, 1);
planetTesselationMaterial.SetPass(0);
planetTesselationMaterial.SetBuffer("vertexBuffer",vertexBuffer);
Graphics.DrawProcedural(MeshTopology.Triangles,6 * 289);
}
My final aim to create a procedural planet generated on GPU. I know I am far way from doing this but I am taking small steps :-) Please help me debug this. Thanks in advance.