Terrain Layer Painting Improvement

The current system for terrain layer painting is very limiting in terms of resolution.

See the following image for a visual depiction of what I mean. This is what you get when you import a splat map as a weight map into UE4’s layering system:

The problem is the resolution of the weight map / alpha map / paint mask / splat map (choose your favorite terminology, it all means the same thing) used with the terrain layer blending system is limited to the resolution of the underlying landscape.

E.g., a 2017x2017 landscape requires a 2017x2017 weight map. Each corresponding weight is used to blend between layers at each landscape vertex. Here is another image which illustrates the aforementioned concept:

I believe it is very important to decouple the terrain layer painting system from the underlying resolution of the landscape. I do not advocate replacing the existing system, as there are cases where it is perfectly adequate. However, I believe an alternative should exist for cases where higher-resolution terrain layer painting is desired, and that alternative should have tight integration with the editor just as the existing system does.

CryEngine has a very elegant system which allows for variable resolution in its layer weight maps from 64x64 to 2048x2048 across its terrain tiles (roughly the equivalent of components in UE4). With this system, it is possible to optimize by using higher-resolution weight maps in areas where the player will see the terrain close up, and lower-resolution weight maps where the player will see things from a distance.

Here are a couple pictures illustrating the interface which enables one to configure this feature in CryEngine:

As an example of why this would be beneficial to UE4, let’s say you had a 2017x2017 terrain. Right now that would limit you to a 2017x2017 resolution for your weight map across the entire terrain. But imagine if you could control the resolution of the weight map per component, so you could choose from a resolution starting at 64x64 and going all the way up to 2048x2048. This would allow painting with fine detail where it is needed, but coarser detail wherever those details won’t be seen.

Bump. Adding more info from how CryEngine solves this problem.

See the following bit of info from the CryEngine SDK documentation:

Terrain Painting Tips & Tricks

Hi Coreyx,

I’ve added a feature request to make the layer painting resolution independent of the vertex resolution. The layer weights are stored in a texture so they could be made independent, although it needs a bit of work as the tool addressing system is currently based on the vertex resolution.


Awesome! Thanks, JackP!

That’s really cool and good suggestion.


Was this feature added or is it somewhere on the roadmap? I am also finding the paint resolution extremely limited, specially if I imported a big map in the first place. On the other hand, I know that the right workflow for large maps is using the world composition, which would give me independent heightmaps per tile. Is there a way to divide in engine a large map after the fact, or does it have to be imported tiled in the first place?

Thank you.