BlackToppStudios / Mezzanine

A game engine that supports high performance 3d graphics physics and sound
http://www.blacktoppstudios.com
18 stars 5 forks source link

Terrain - Planetary Simulation #137

Open MakoEnergy opened 7 years ago

MakoEnergy commented 7 years ago

In the not too distant future I want to start work on a terrain system. A sensible set of interfaces for static (but in some cases, editable but still not transformable) geometry in the simulation space to be traversed.

Simple terrain pieces, be them heightfields or meshes, should be placeable with no overhead in the simplest version. It is expected that all the terrain geometry will be loaded at once. A slightly more advanced version would introduce paging (the loading of terrain chunks that the observer(s) are near but unloading everything else), but the terrain would still be paged along a plane. The most advanced version would also involve paging, but would be paged along a sphere or a very close approximation.

Additional "tiers" of terrain may be appropriate, but those seem like the minimal set we should aim for. Paging along a plane can be tricky, but countless examples exist out in the wild and shouldn't require much research on our parts. Zero paging is brain dead simple and we can accomplish that now with minimal hacking. Planetary simulations with appropriate LOD is a bit more complicated. So to properly account for them in the terrain system interfaces we'll have understand planetary simulation better.

Here is a small collection of links I have found on the subject that seem helpful - Technical/Academic Papers: http://www.mutantstargoat.com/bekos/files/doc/gbekiaris.thesis.msc.pdf http://www.twandegraaf.nl/Art/Documents/Procedural%20planets%20into%20detail,%20Twan%20de%20Graaf%202012.pdf http://gamedevs.org/uploads/deferred-rendering-of-planetary-terrains-with-accurate-atmospheres.pdf http://old.cescg.org/CESCG-2009/papers/PragueCUNI-Elek-Oskar09.pdf http://www.vis.uni-stuttgart.de/~schafhts/HomePage/pubs/wscg07-schafhitzel.pdf https://www.cse.unr.edu/~fredh/papers/thesis/046-mahsman/thesis.pdf http://worldcomp-proceedings.com/proc/p2013/CGV4061.pdf http://elib.dlr.de/86477/1/Collienne_GI_VRAR_2013.pdf https://graphics.llnl.gov/ROAM/ https://cesiumjs.org/massiveworlds/ http://www.stereofx.org/papers/TERRAIN.PDF http://andrew-flower.com/assets/projects/defter-thesis-f9a659feea18ffe347b24e3bbfc054d8.pdf http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.136.2768&rep=rep1&type=pdf http://developer.amd.com/wordpress/media/2013/02/Chapter5-Andersson-Terrain_Rendering_in_Frostbite.pdf

Generic Articles/Discussions: http://stackoverflow.com/questions/16494699/best-clod-method-for-planet-rendering http://stackoverflow.com/questions/22104128/simulating-orbits-using-laws-of-physics <-- Not strictly related to terrain. https://www.gamedev.net/topic/637715-terrain-generation/ https://www.gamedev.net/topic/646084-4d-perlin-noise-terrain/ http://gamedev.stackexchange.com/questions/16563/how-are-voxel-terrain-engines-made http://www.gamasutra.com/view/feature/131451/a_realtime_procedural_universe_.php http://www.gamasutra.com/blogs/DanielMaslovsky/20161018/283317/Bending_Unity_to_Carry_Spherical_Voxel_Planets_in_Planet_Nomads.php http://casual-effects.blogspot.com/2014/04/fast-terrain-rendering-with-continuous.html https://www.shaneenishry.com/blog/2014/08/01/planet-generation-part-i/ http://robert-lindner.com/blog/planetrenderer_week1/ https://dexyfex.com/2015/11/30/planetary-terrain-rendering/ http://leifnode.com/2014/04/planetary-scale-lod-terrain-generation/ http://richardssoftware.net/Home/Post/29 http://richardssoftware.net/Home/Post?id=30

Library Articles/Discussions: http://libnoise.sourceforge.net/tutorials/tutorial8.html https://github.com/sp4cerat/Planet-LOD https://www.seedofandromeda.com/blogs/49-procedural-gas-giant-rendering-with-gpu-noise https://www.seedofandromeda.com/blogs/51-procedural-star-rendering https://www.seedofandromeda.com/blogs/58-procedural-heightmap-terrain-generation http://blog.marekrosa.org/2014/12/space-engineers-super-large-worlds_17.html http://www.mavorsrants.com/2013/02/planetary-annihilation-engine.html

Complete Planetary Middleware: http://www.outerra.com/ http://www.keenswh.com/vrage.html

Voxel Resources: https://bitbucket.org/volumesoffun/polyvox

More links will be added to this list as time goes on and I find more resources. This issue WILL need to be broken up and worked on incrementally in child issues, but at current we aren't educated enough on the scope of the task to make those issues. Despite that this can remain for centralized discussion on the topic.

MakoEnergy commented 7 years ago

Making a separate comment for details that pertain to all terrains (not just planetary) I've found that could be useful.

Geomipmapping: http://www.flipcode.com/archives/article_geomipmaps.pdf

QuadTree: https://codereview.stackexchange.com/questions/84374/quadtree-implementation https://github.com/danshapero/quadtree

Sparse Voxel Octrees: http://www.nvidia.com/docs/IO/88972/nvr-2010-001.pdf