Last year we were curious if we could create Minecraft-like destructible terrain but instead of blocks, we envisioned a smooth and graphically appealing world. So we set forth to create a prototype in order to prove the feasibility of such a system.
In the end, we had a small tech demo featuring destructible terrain with multiple materials. Even without optimization, the performance was quite acceptable and there was huge room for improvement. As a result, we were quite confident that the core technology would be fast enough to make our vision reality. For a little bonus we added waving grass and procedurally grown trees. Even though this prototype was only intended as a proof-of-concept, we ended up with a nice tech-demo that was able to generate quite scenic landscapes:
Here is a video of a small walk-through of the procedural landscape that is altered by creating and destructing parts of the terrain:
For those interested in some technical detail:
The terrain itself is stored as volume data while the actual geometry is computed with the Dual Contouring (DC) approach. We decided against the popular Marching Cubes (MC) algorithm because DC has lower implementation complexity and - if done right - is able to reproduce sharp features (such as edges or corners) which the original MC algorithm would ignore, causing unpleasant "jaggy" edges. Additionally, implementing Level-of-Detail (LOD) is a lot easier in the DC algorithm.
The trees are inspired by a Self-organizing Tree Generation approach. Growth of the tree is simulated, allowing the tree to grow towards light and align to the terrain. Grass is dynamically created on the GPU with a Geometry Shader and has a simple rigid animation to simulate movement by wind.
All of the terrain geometry is fed into the Bullet physics engine, resulting in accurate physical interaction between the "player" and the world.
This is just a quick overview, we actually plan to write some devblog posts about the terrain in the future.