Tesselating a procedural planet

Published November 14, 2007
Advertisement
As promised, today I will talk a little bit about tessellating an entire planet. The concept is actually quite simple:

Subdivide each face of a cube into four quads and push the new vertices onto the surface of the sphere. Continue this process for every new quad and you will generate a set of patches that cover the entire sphere. Not evenly, but good enough. Each patch is then covered with a triangle mesh where each vertex is also pushed onto the sphere. Instead of mapping the vertices exactly onto a sphere, a noise function can be used to generate slight displacements that result in surface features. In order to generate an earth sized planet, however, a lot of octaves are needed for each vertex. It basically requires a dual core processor where one thread is constantly computing new terrain patches as they are needed. Some of the vertices can be recycled from the previous patch, but at least half of them have to be computed on the fly.



I have looked at a number of other terrain rendering algorithms, in particular ROAM, geoclipmaps, geomipmaps and chunked LOD. ROAM certainly produces the best tessellation, but it is also the most inefficient and simply not practical; at least for now. The algorithm described here is sort of a chunked LOD, except that the borders between terrain patches are properly stitched up with triangles. In order to keep the complexity low, two adjacent terrain patches may only differ by one level detail. This restriction also makes it possible to link up all the patches and allow for fast access to the neighbors, which will become important when computing normal and tangent space. This is it for today, allthough there is a lot more to be said about rendering planets. I will cover more aspects in the future. Check out the Geist3D website for movies and actual software downloads.
Previous Entry Manipulators
0 likes 1 comments

Comments

mightypigeon
I'm actually looking to do tesselation of some surfaces myself right now. Not for heightmap terrain, though (my maps have lots of large surfaces that are killing fillrate)

Have you got any advice/resources to push me in the right direction? I'd greatly appreciate it.
November 14, 2007 07:35 PM
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Advertisement
Advertisement