- 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

### Welcome to Unity Answers

The best place to ask and answer questions about development with Unity.

To help users navigate the site we have posted a site navigation guide.

If you are a new user to Unity Answers, check out our FAQ for more information.

Make sure to check out our Knowledge Base for commonly asked Unity questions.

If you are a moderator, see our Moderator Guidelines page.

We are making improvements to UA, see the list of changes.

### Follow this Question

### Related Questions

Procedurally generating terrain? 0 Answers

Make a simple tree 1 Answer

QuadPlane to Sphere Terrain Generator Misaligned 1 Answer

How to create a terrain in a sphere with Perlin Noise 0 Answers