- Home /
Issues with Low Poly Shader on Mesh
I am trying to make a randomly generated mesh with a low poly look to it, and have made a shader using this tutorial: https://www.youtube.com/watch?v=e3oYQL0oDEs. I also created a script to procedurally generate a mesh. Unfortunately, when I run it, this happens:
My issue is the random black triangles everywhere, and when I view the scene and pan around while its running, the triangles change in color. Ideally, I would want the mesh to have this same look, except for without the random black triangles.
The project uses a Lightweight Render Pipeline and uses the script pasted below. I made the script it's own object in the scene and set the xSize and zSize to 20. I also made a PBR Shader with this ShaderGraph:
Any help is appreciated. Here is the Mesh Generator Script:'
public int xSize = 10;
public int zSize = 10;
Mesh mesh;
Vector3[] vertices;
int[] triangles;
Color[] colors;
float minTerrainHeight;
float maxTerrainHeight;
void Start()
{
mesh = new Mesh();
GetComponent<MeshFilter>().mesh = mesh;
CreateShape();
UpdateMesh();
}
void CreateShape()
{
vertices = new Vector3[(xSize + 1) * (zSize + 1)];
for (int i = 0, z = 0; z <= zSize; z++)
{
for (int x = 0; x <= xSize; x++)
{
float y = Mathf.PerlinNoise(x * .2f, z * .2f) * 3.5f;
vertices[i] = new Vector3(x, y, z);
if (y > maxTerrainHeight)
{
maxTerrainHeight = y;
}
if (y < minTerrainHeight)
{
minTerrainHeight = y;
}
i++;
}
}
triangles = new int[xSize * zSize * 6];
int vert = 0;
int tris = 0;
for (int z = 0; z < zSize; z++)
{
for (int x = 0; x < xSize; x++)
{
triangles[tris + 0] = vert + 0;
triangles[tris + 1] = vert + xSize + 1;
triangles[tris + 2] = vert + 1;
triangles[tris + 3] = vert + 1;
triangles[tris + 4] = vert + xSize + 1;
triangles[tris + 5] = vert + xSize + 2;
//yield return new WaitForSeconds(0.1f);
vert += 1;
tris += 6;
}
vert += 1;
}
Color currentColor = new Color();
colors = new Color[vertices.Length];
for (int i = 0, z = 0; z <= zSize; z++)
{
for (int x = 0; x <= xSize; x++)
{
if (i % 3 == 0)
{
float side = Random.Range(0f, 0.6f);
float opac = Random.Range(0.7f, 1f);
currentColor = new Color(side, opac, side, 1);
}
colors[i] = currentColor;
i++;
}
}
}
void UpdateMesh()
{
mesh.Clear();
mesh.vertices = vertices;
mesh.triangles = triangles;
mesh.colors = colors;
mesh.RecalculateNormals();
}
'
Your answer
