- Home /
Fixing Quadrilateral Edge Cracks
I have a procedural terrain generation system going with a quad tree LOD system. Basically I have a sphere of quadrilaterals (which are separate game objects) at different levels of "subdivision" (every quad has the same number of vertices) and a 3D perlin noise function displaces the vertices to make a landscape. The problem is that between different levels of subdivision the edge vertices differ because at a higher subdivision level there is higher resolution for the noise function. I know that this a common problem as the built-in terrain system has a LOD system that accounts for the, along with almost every other similar, functional system. I think have a good idea of what I need to do but I don't know how the code for it would work. First I'd need to find the neighbor quads of a quad, which I know has something to do with the great circle distances between that quad and all of the rest (perhaps a distance equal to the length of the current quad multiplied by 2 would indicate a neighbor). Then I get the edge vertices, which I can already do effortlessly since the edge triangle indices are always the same. Then compare the edge vertices and determine the subdivision levels of the neighbors. I don't know where to go from here though. Help?
Screenshot of a few cracks (they aren't too severe here) :
My end goal (the built-in terrain edge fans):
EDIT: I think I got the first part but I don't know how to collapse the vertices based on the neighbors.
I figured out how to collapse the edge vertices. Because there is a set number of possible edge conditions for every quadrilateral, entering the indices in manually, into an array, is not a big deal. I'm entering the indices into bit masks that only store the edge triangles, basically whenever a specific bit mask for a specific index is needed, the edge triangles are set to the bit mask values. As long as the edge triangles are stored in the bit mask array in a linear matter, the triangles adjacent to each other are set to each other.
For example:
Initial Triangle Array (a,b,c,d,e,f)
Bitmask Triangle Array (a, a, c, c, e, e)
Basically the intermediate triangles are skipped in the output triangle array. I'm not sure if I'm explaining this well but for me it works. Still, I have to write the other systems and bring them all together, so if I run into any more problems I'll ask for help here.
Your answer
![](https://koobas.hobune.stream/wayback/20220613135708im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Pixelated Texture Edges on Terrain 0 Answers
How can I get a Low Poly terrain to work in Unity? 2 Answers
Procedural terrain- of the 2D circular variety. 0 Answers
Why aren't the mesh collider and mesh filter meshes saved in prefab children? 2 Answers
Assigning Textures to Terrain at Runtime 2 Answers