Thursday, July 31, 2008

Intro

Hi everybody.
I'd like to introduce our project - a planetary engine.

Features:
  • Planetary engine that can be used with an elevation dataset, enhancing its resolution using fractal algorithms. Resolution of the elevation data is arbitrary, fractal algorithms further refine the detail down to under-foot resolution. It's possible to have a completely random fractal terrain too, or to sketch the terrain in rough resolution and have the fractal to generate the details.

  • Level of detail ranging from thousands of kilometers down to centimeters.

  • Currently working with earth elevation data (3arc sec dataset remapped to cube faces with roughly 150m resolution).

  • Elevation data are packed using a modifed wavelet compression, the required level of detail can be extracted effectively on the fly. Decompression done on GPU.

  • Finer resolution tiles are generated by fractal algorithm entirely on the GPU.

  • Textures are generated on the GPU from the fractal data using per-pixel computed elevation, slope and terrain curvature; later a material mapper would also utilize climatic data, bedrock maps etc. to more accurately texture the world.

  • Fully asynchronous engine using OpenGL, majority of the algorithms running on the GPU


There are many things to do, though - the material mapper, detail textures, atmospheric model, rendering rivers and water bodies, vegetation etc.

Now some pixel food.

Approaching earth. Until we implement the atmosphere, space is full of air :-)



Heading towards High Tatras in central europe.



Fractal refinement starts to show up. Original elevation data have resolution ~152 meters.



That rock over there ..



.. is roughly 4 meters wide, completely fractal generated.

2 comments:

Aks said...

Bravo, Brano! Extraordinary work!

I have many questions, but I hesitate to overwhelm you with them. :)

So, lets confine it to just one question... Building a large terrain models, especially a whole planet, requires calculations with doubles, but most graphics cards support only floats. Using fixed coordinate system bonded to the center of the Earth does not allow viewer to go beneath 2000m or so. The "Logarithmic Z-Buffer" cannot help much in that situation. Can you explain in some of your blogs (of course if it is not a secret) in what coordinate system the vertices are expressed?

Outerra said...

Hi Aleksandar
Please come to our forum at http://www.outerra.com/forum to discuss technical (and other) questions.

Yes, using a geocentric coordinate system for the planet directly would allow only for limited precision, and thus it can be used only up to a certain level of detail (i.e. for some maximum distance from the surface). So what I do is that the geometry for the more detailed terrain tiles is generated in its "local space", what is a coordinate system centered in the middle of the terrain tile that starts to use it. All subsequent subdivisions of this tile use the same coordinate system.
Finally, for the rendering of these tiles the camera is expressed in the local space too. This way you get rid of large static numbers in coordinates that ruin the precision.