
I got the terrain working (well, a tiny tiny part of it). Unity has its own terrain system, but I didn’t want to use it; I’d rather keep things simple and flexible. My approach is based on geometry clipmapping, which is basically a way of doing LOD by stacking lower-resolution grids as you move out from the camera.
Why Not Unity’s Terrain?
Unity’s terrain is nice, but it bakes everything into static geometry during build; my game world is about 10× larger than Kalimdor so I need to stream terrain pages off a server instead. Geometry clipmapping lets me do that; it’s lightweight and doesn’t care about Unity’s editor-driven constraints.
How It Works

All of my terrain grids are flat meshes; the vertex shader samples a heightmap and offsets the vertices by whatever the heightmap says, multiplied by a uniform height scale. Since the meshes are always flat grids, I can keep them instanced and just swap them around as the camera moves. That’s what makes this so efficient.
Geometry clipmaps don’t use vertex morph rings like some other LOD systems; instead, I rely on skirts. Skirts extend the mesh downward at the edges and they hide the seams where different LODs meet.
Why Skirts Are Necessary

Here’s an example. On CDLOD, those transitions would be handled by extra triangles at the T-junctions, and then morphed to reduce popping. That’s cleaner, but it’s also more complex. Since I don’t need holes in my terrain, skirts do the job.

Performance
Right now, I’m pushing ~645k triangles. That’s very respectable; even mid-tier mobile could handle it, and low-end PCs won’t blink. My current density is 10 m per cell; which is honestly pretty low by modern standards:
- WoW: 3.3 m per cell
- Skyrim: 1.28 m per cell (pretty standard now)
- My GIS data (Kodiak Island): 5 m per cell
At 5 m density, the heightmap alone is already several gigabytes in size, so going any denser just isn’t practical with this dataset.
Up Next
This is just a small slice of the terrain, but geometry clipmapping is proving to be a solid solution; simple, efficient, and able to stream massive areas without Unity’s limitations.
I’ll probably work on expanding the shader (it’s fairly basic right now) so that I can support up to eight PBR materials.
Leave a Reply
You must be logged in to post a comment.