- Home /
Procedural realistic terrain for hex tile map - what's causing the edges to stick up?
I'm working on procedurally generating realistic terrain on hex tiles for a strategy game. I've got it working nicely except where a tile is concave the edge is still visible as a one-sided face that sticks up. I think it might have something to do with how Unity draws triangles. Any ideas?
The tile changes shape correctly except the edges seem to stick up like this: https://i.imgur.com/NGsDmSl.png
Here's what the mesh looks like in Blender: https://i.imgur.com/TL6y2jj.png
Here's my code:
void MorphTerrain()
{
Vector3[] verts = GetVertices();
Vector3[] newVerts = new Vector3[verts.Length];
float bottomLayer = GetBottomLayer(verts);
for (int i = 0; i < verts.Length; i++)
{
if (verts[i].z > bottomLayer) //Because blender, z is the axis that will control height
{
newVerts[i] = verts[i];
continue;
}
float sampleX = -(transform.position.x + (verts[i].x * 100));
float sampleY = transform.position.z - (verts[i].y * 100);
newVerts[i] = new Vector3(verts[i].x, verts[i].y, GetNoiseValue(sampleX, sampleY));
}
SetVertices(newVerts);
}
Vector3[] GetVertices()
{
return mesh.vertices;
}
void SetVertices(Vector3[] verts)
{
mesh.vertices = verts;
mesh.RecalculateBounds();
}
float GetNoiseValue(float x, float y)
{
float xCoord = (x + xOffset) * noiseResolution;
float yCoord = (y + yOffset) * noiseResolution;
float rise = height * Mathf.PerlinNoise(xCoord, yCoord);
return rise;
}
private float GetBottomLayer(Vector3[] verts)
{
float result = 1f;
foreach (Vector3 v in verts)
{
if (v.z < result) result = v.z;
}
return result;
}
Thanks in advance for your help!
Your answer
Follow this Question
Related Questions
Change hex tilemap to use axial coordinates? 0 Answers
Hexagonal grid with 120 degree angles 1 Answer
How to render procedurally generated mesh to be rendered as 2 sided? 1 Answer
[Solved] Issues mapping procedurally generated cube without repeating vertices 0 Answers
Efficient way of placing multi-tile sprites onto tilemap via script 0 Answers