I've been working on getting some basic terrain rendering in my engine. I want to have something that looks awesome. Unfortunately, this has me a little bit conflicted between a quick and dirty implementation to just get things 'working', and a longer, harder implementation.
I ultimately chose to go the longer and harder route. The easier route would have been to implement terrain rendering using height maps. What I would like, though, is to have terrain that looks and feels much more authentic/real. What would make it more real? Well, cliffs with overhangs, caves, etc, etc. Not that you couldn't do these kinds of things with a height map. It's just that it requires you to manually add these things in there as seperate meshes, as height maps can't actually encode, for instance, an overhang.
What is the harder route? Well, simply put, I'm using voxels.
In my current implementation, this involves using some sort of 3d noise function to generate a 'point field'. We connect points from the field in groups of 8, which forms a cube (aka voxel). We then use an algorithm to 'smooth over' the voxels that are generated from the points, which results in a mesh that we can render.
The algorithm I'm using to smooth over the voxels is called Dual Contouring. I'm currently basing my implementation off of this fellows code and article. I currently have an implementation that works for a sphere (woo!). Unfortunately, when it comes to my 'point field', it is not working so well. I think I need to tweak my 3d noise function to generate points a little more coherently, but I'm not sure if that's actually the problem.
Here is a quick video of my voxelized sphere:
And here is a quick video of the voxelized sphere that has been smoothed using the Dual Contouring algorithm:
Until next time...