JamesTKhan/Mundus

Research geometry clipmapping as an option for rendering large terrains

Opened this issue · 2 comments

Is your feature request related to a problem? Please describe.
Rendering a large amount of terrains is not performant in current state. Tessellation shaders are not supported by WebGL. LoD for terrains is a potential solution but you end up having to create terrain "skirts" to account for unaligned terrains at LoD borders, which does not look that good, fails on slopes, and causes z-fighting.

Describe the solution you'd like
Not having access to Tessellation shaders is a huge set back. Another option is geometry clipmapping. More research is needed to determine if geometry clipmapping is practical for Mundus. I do not know much about it yet, so creating a issue to come back to later.

Additional context
https://developer.nvidia.com/gpugems/gpugems2/part-i-geometric-complexity/chapter-2-terrain-rendering-using-gpu-based-geometry

https://www.youtube.com/watch?v=PVrv3_7aLhU

Dropping some notes from a standalone prototype I was working on. Geometry clipmap relies on Heightmap textures being sampled in the vertex shader to displace the mesh. Also, for them to look half way decent, they need to be 16 bit images like .tif.

Mundus currently stores individual terrain meshes height data in a file, very different approaches.

AFAIK libGDX does not support 16bit textures, or tif textuers. So I had to use a different library and load 16bit TIF images that way via BufferedImage which uses AWT which means no GWT. Maybe a solution is to downgrade to 8bit when on GWT but either way, it is a substantial change from the current terrain system and will require a lot of changes to implement so this is something I have to think about, I may refine the prototype I have some more in the mean time.