Terrain

September 29, 2018 | Doug

While working on Boots on the Ground, we’ve tried out several terrain editors and we will share some of our experiences in this post.

A terrain editor is a tool used to create the ground level of a game world, typically the outdoor part of the world. Game worlds that are primarily inside may not use a terrain system at all.

Terrain editors allow you to control the height of your terrain and apply textures to the terrain.

Heightmaps, Splatmaps, and Textures

Many game engines (e.g., Unity, Unreal, CryEngine) have heightmap based terrain systems. Heightmaps are grayscale images where dark areas represent low elevation and light areas represent high elevation. During game play, the game engine reads the heightmap and converts it into a polygon surface to render the terrain. Game engine editors often have a heightmap editor built in.

These editors provide a way to paint textures and other details, like trees and rocks, onto a terrain. When you paint, a splatmap is updated to reflect how the textures you’ve assigned to the terrain are blended together or, in the case of trees, rocks, and other non-texture details, where they are placed.

Limitations

Heightmaps map exactly 1 height value to each (x,y) coordinate in the heightmap.

Overhangs require more than one value per coordinate. Holes require an absence of values at certain coordinates. Thus, neither of these are possible to represent with a heightmap.

Meshes and Volumes

In addition to heightmaps, polygon meshes and volumes can be used for terrain. Unlike heightmaps, polygon meshes and volumes can both be used to represent terrains with overhangs and holes.

While heightmaps store information in a collection of pixels (a grayscale image), polygon meshes store information as a collection of verticies and edges, and volumes store information as a collection of voxels.

Another benefit of volume terrain is that you can remove surface volume to “dig” into the ground, like digging in Minecraft.

On the downside, game engine terrain systems usually only support heightmap based terrain, so if you do choose to use a mesh or volume, you might have to avoid the game engine’s terrain system altogether.

Editors

Name Type Heightmap Polygons Volumes
Photoshop Image Editor Yes No No
CryEngine Sculpt Yes No No
Lumberyard Sculpt Yes No No
Unity Sculpt Yes No No
Unreal Sculpt Yes No No
World Machine Node Yes Yes No
Houdini Node Yes Yes Yes

Image Editor: Photoshop

Since heightfields are grayscale images, you could edit one with Photoshop or any other image editor. While this is conceptually simple, it is difficult to do in practice because you don’t see a 3D visualization of the terrain while you edit the heightmap.

One benefit Photoshop has is that you can organize your work in layers and then combine the results, which makes it easier to change per-layer work. For example, you may do mountains in one layer and a river in another layer; this makes it easy to move the river, since it’s not part of the mountain layer.

Sculpting: CryEngine, Lumberyard, Unity, and Unreal

Sculpting editors have tools to raise, lower, and level the terrain. They may also give you tools to add patterns and noise. All the game engine editors listed above provide scupting tools.

Sculpting tools are by far the easiest to learn how to use. The downside is that working with them is like using photoshop with only a single layer; all your edits are destructive.

Node Based: World Machine and Houdini

Node based terrain editors give you functional nodes that you wire up in order to produce your terrain. Node based editors take longer to learn than the scuplting tools. However, since you are wiring up functional nodes, you can see the steps you took to generate the terrain. You can also quickly make changes that effect the entire terrain to try out ideas.

The two node based terrain editors I have experience with are World Machine and Houdini.

World Machine is a specialized tool for creating heightmaps. It has many nodes you can wire together to produce interesting looking terrain. It’s been around for a long time and is still actively developed by an individual developer.

Houdini is a general computer graphics tool that includes a set of nodes specifically for working with heightmaps (called Heightfields in Houdini). Additionally, Houdini has language called VEX that can be used to write custom nodes. Houdini is also the only tool in my list that can output volumetric data. Houdini has also been around a long time, though the Heightfield nodes were added relatively recently, in Houdini 16.

Both World Machine and Houdini can also be used to generate splatmaps. We shared a Unity tool called TerrainSplatmapProfile that helps you assign generated splatmaps to Unity terrain objects.