To begin, this is simply a milestone of a hobby project I have been working on. This is in no way a completed product and is still missing alot of features, however, it represents 3 weeks of work so far on the Geomipmapping part alone. One big missing feature is texturing. My end game for this bit is to have an entire planet being implemented with this same algorithm, which isnt as difficult as one might believe it to be.
Knowledge of these algorithms came from:
Currently, the height data is comming from my previously posted noise library, in this instance we are seeing 3 dimensional perlin noise, as implemented in Ken Perlin’s Improved Noise.
The picture below is showing the fundamental implementation of how it works. A mesh is divided into a quad tree (detail level can be controlled, for example, in the screenshot the detail is 9x9 while in the video it is 32x32. This means that each square of land gets 32 by 32 verticies) and as you get closer to each individual section, it may divide. Vice versa, as you get farther away, the parent will unite its children. This limits the amount of triangles being rendered for a quite detailed terrain.
Without horizon culling and with 32x32 detail level:
On average, there is around 100 - 150k tris on screen.
On average while moving around at a decent speed, 180 fps with spikes down to 100 fps - depending on detail distance
This is without multi-threading.
Altogether, I would call this a very nice terrain solution, and it is very fast as well, even on java with many doubles calculations!
If anyone has any questions about this, just let me know!
I will be sure to keep everyone updated.
Actually is is almost exactly what I have implemented for the terrain system right now, except with a slightly different seaming algorithm (edge LOD matching).
I have an idea for texturing, so if you would like to get in touch we can combine our code and get something out there.
Great epics will be sung for years to come if this grand collaboration comes properly together!