Low poly terrains in Unity and how to make them look good
- Tâm Trần Ngọc
- Mar 22
- 3 min read
Updated: Mar 26
Low poly (or faceted/polygonal) is one of the most popular art style that being used in many indie games on the market. Along with low poly models of character and props, low poly terrain is the essential part of the game's environment. In this post, we will discuss about some tips to save them from boring look (and more performant), as well as the tool you can use to make low poly terrain for your game.

How to make low poly terrain look good?
There are a few things you need to consider when making the terrain, those are just ideas, the implementation is totally up to you and the tool you're using.
Tip #1: Use dynamic polygon density
That means putting less polygons where the surface is plain, and more where the surface is complex with many details. This way you can break the boring uniform look and save a tremendous amount of vertices, thus improving performance.

Some tools such as Polaris do this by default. In case you want to implement this in your code, here's the idea:
Generate a "polygon density map" that derived from your height map. Just compare a height map pixel value with its neighbors and output a value denoting the density at that point. Store those values in a read/write Texture2D.
Start with a single triangle and continuously subdivide it. At each iteration, read the density map (at vertex location or the center point) to determine if it should split the triangle or not, for example:
The current iteration is 1, density value is 8, we split the triangle into 2 pieces and add them to the list for the next iteration.
The current iteration is 9, density value is 8, we don't split it anymore.
Store your triangles in a tree-like structure so you can easily determine the "density level" of each triangle.
After this point, you have the basic grid of the terrain. However, some triangles may not match with their adjacents and create gaps. You will need some additional subdivision to match them.
Iterate through the triangles tree and only take leaf nodes.
The triangle should be split from its square corner like this:

Tip #2: Split the terrain mesh into smaller chunks
Why? Because the maximum number of vertices in a mesh is about 65k. To create bigger world, you need to split the terrain into several smaller chunks so it won't exceed that limit. This approach is also better for calculating mesh LOD and level streaming. In contrast, you can just set the mesh index format to 32 bits, but this may not work for low end platforms.
A question remains: how to remove potential gaps from subdivision between chunk?
Tip #3: Random displacement on XZ plane
A low poly terrain will look super boring when all vertices align nicely to a grid. To get around it, add a small offset to every vertices (x and z only). The offset should "look" random but actually deterministic, Perlin Noise function with original vertex position as argument should work.

Tip #4: Choosing a material targeting low poly terrain
Not all terrain materials work with this kind of terrain, because of 2 main reasons:
Mesh format: Low poly terrain usually made using "split vertices" technique, which mean triangles don't share their vertices, thus each vertex has its own normal vector to create the flat look. Material with tessellation won't work.
Low poly style prefers a crispy & sharp color between triangles, using splat textures is fine but remember to keep lightling & detail as simple as possible.
Tip #5: Cover it with grass and detail objects
Low poly doesn't mean empty! Get some grass textures, rock & pebble models and scatter them everywhere. But remember to keep an eye on performance. Having too many game objects & renderer is not so good for the framerate (and memory too). If you want to have a bunch of grass all over the place, consider using a custom vegetation renderer. Tool such as Polaris provides a vegetation renderer out of the box, where it treats each grass instance as vectors instead of game object.

Do you have any tip to make low poly terrain in Unity looks good? Share with us in the comment!
Comments