I'm trying to figure out the best way to programmatically represent terrain in my game. I've been considering using a heightmap (or grid of evenly spaced vertices) to represent the surface of the terrain and a splatmap to allow smooth texturing. This would work for totally smooth terrain, but the problem is how to represent cliffs and sharp cliff faces.
The cliffs themselves would need to be rendered differently than the rest of the terrain. For example, they would need to have a different (non-stretched) texture visible on the front of the cliff, but if I used the splatmap for this, it would be impossible to have a sheer enough cliff face where the texture of the cliff is totally separate from the ground.
A picture says a thousand words so...
What are some general ways to store and/or render cliffs and other sharp differences in terrain height?