Archive for May, 2011
One of nice things about height maps is just how easy they are to create versus the effect they produce. You can create a height map from just about anything. All you need to do is desaturate your starting image; you may want to blur some of the harder edges to create more gradual terrain, but that’s all you really need to do.
If you take a look at the video in my recent post: Dynamic Water on the GPU, you can see how I created a height map by drawing text onto a gray scaled image.
Now that I’ve gotten somewhat comfortable with height maps, I’ve been working on a new game that will incorporate its use. This particular project is going to have pre-defined terrain so I’m going to need my height maps up front. To create the height maps, I’m using Paint.NET.
One of the nice features in Paint.NET is Render Clouds, located in Effects -> Render -> Clouds. Selecting this will render some clouds in the colors of your choosing; also, you can modify the clouds scale and roughness as well as reseed your current rendering until your satisfied.
The following is a basic height map created using Render Clouds:
This one could pass as a decent height map; however, if you take a look at how the terrain renders, it turns out to be a bit of a mess. The problem is that it’s got too much stuff going on. Bumpy hills are cool and all, but so are flat plains. Not everywhere needs to appear rugged.
You can try tweaking some of the different areas; smooth out some plains, sharpen up some mountain ranges, etc, but when I was trying to create a nice map, I thought back on some reading I had done regarding lighting. I had read an article about the 3-Light Setup; the idea is that you set three lights at particular angles create a range of shadow manipulation. For my height map, I wanted a range of terrain types from soft plains to hard mountain ranges; but I also wanted them blended together in order to maintain a natural look.
To apply the concept of the 3-Light Setup, I used Paint.NET’s layering ability to break my map up in such a way that each layer would offer the terrain I wanted. In a sense, I started off with my Fill Light; a layer that provided some subtle terrain differences from flat to small hills. I created this layer using the Render Cloud with a large scale but small amount of roughness. Then I smoothed it out by adjusting the brightness/contrast.
Next, I wanted some mountains. So I created another layer, and rendered a different set of clouds. I lessened the scale a bit in order to create more defined terrain (clouds), and slightly increased the roughness. I didn’t increase the roughness too much though; the mountains should appear more rugged, but since this will likely be walkable terrain, I don’t want the player bouncing all over the place.
I started off the last layer as a duplicate of the second. Similar to the back light, this layer helps define the mountains. After duplicating the layer, I increased its contrast and then balanced it by slightly increasing the brightness. Some of the areas are so subtle that I had to give it a pink background; the pink is technically black and represents zero height.
And to compare to how the basic map rendered, here’s how the layered map looks:
I have finally gotten my dynamic water running. The water is volumetric and processed entirely on the GPU. Now I can hopeful move forward with getting this little project a little more “gamey.”
Enjoy the video, and take a swim into XBLIG!
After deciding to put Devious Knights on hold for bit—long story—I’ve been working on recreating some of my older ideas; this time however, I’ve been trying them out using some of the new techniques I’ve learned along the way.
The video shows a new dynamic terrain system that I’ve been working on. I create grass by taking some water from the pool and dropping it around the map. I also deform the terrain—create divots—by jumping up and slamming into it.
Check it out!