Now that the academic year has started I will have to scale back my experiments and projects with Unreal Engine. It’s not all bad news because the stuff I have learnt this summer, combined with my existing knowledge, will go some way to potentially helping out some of my students this academic year.
At some point in the near future I will pick up my Martian Landscape project and with this in mind, I decided to push my knowledge of creating a procedural landscape. I intend to create a very large portion of the Maritain landscape and I intend it to look as a realistic as possible. As I learnt from my previous experiments, when you have a large landscape, there is no efficient or effective way of hand-crafting it. In that experiment, which featured only a medium-sized landscape, the blending of the landscape layers was achieved by placing a texture map of the deposition in the layer mask for a surface type (grass, rock, etc.).
Whilst that is semi-procedural, the fact that the deposition map had to be generated at the same time as the height map meant that if you had to edit the terrain, the deposition map would be wrong. The only way you could edit the terrain would be to edit it in World Machine, re-export the height and deposition map and re-import them into back into Unreal. This may not seem like such a chore but it would eventually become tedious and you are dependant on generating all your terrain externally.
I wanted to create a workflow that removes the need for layer masks of any kind. Actually, that’s not strictly true. I want to remove the need for masks for the big aspects of landscape creation – so think the blend of grass to rock to something else (maybe snow to indicate elevation), but I do want a layer or two to be controlled manually by painting. This would allow for the bespoke creation certain aspects such as paths, streams/rivers/lakes etc. ensuring maximum landscape flexibility.
To start, as with all experiments, I needed a frame of reference to aim for via some basic research and inspirational examples. I found the following resources very helpful:
A Boy & His Kite:
Procedural Landscape Ecosystem:
Procedural Landscape Generation for Game Environments:
Click for a full breakdown of the above example.
Terra Nova – Dynamic in-game environment builder:
Very Simple Height & Slope blend:
Unreal Engine 4 Tutorial – Procedural Material Based On Slope:
Unreal Engine 4 – Landscape Auto Material:
UE4 Landscape Material Summary:
After analysing the above I decided to try and find some middle ground between the aspirational and inspirational examples. Whilst I appreciate the pursuit of maximum realism wasn’t necessarily a priority for the inspirational videos, I wanted to expand on the methods demonstrated and combine them with my recently acquired knowledge of good quality landscape materials in an attempt to come as close as possible to the aspiration examples. However it is worth pointing out that I will only be concentrating on the landscape and not foliage – which increases the realism of the result drastically.
So, after combining all the tips I picked up from the above tutorials, I arrived at the above. The material currently uses a single grass texture, a normal map for the grass, a single rock texture with a normal map texture (which is very poor quality – will revisit this soon) and a solid white colour to represent the snow. The snow “material” has a light blue SSS colour applied (and masked to just the snow). There is a single directional light with mostly default settings, and a skylight with very few tweaked settings. There is also a Exponential Height Fog, again with very few tweaked settings. Oh, all the lighting is dynamic (movable) so there is no waiting for the lighting to build!
The blends in my landscape material take into consideration slope, height and normal detail. The height blend for the snow is more complicated then the slope blends. You could arguably use the same method as the blend between the grass and the rock but I wanted to give a different style of control to the snow. The settings that control the blend angle bias and smoothness seem very arbitrary. You simply tweak them until the blend looks correct. However, I wanted the snow to have more “real-world” control. I want the user to be able to specify how high up the terrain (in Unreal worlds units) that snow transition starts. The example above is 6500 units or (65 metres). This is what a setting of 0 yields:
The following is when you specify a height that is higher than the landscape itself (so no snow):
Just changing a single value in the material instance creates a totally different scene. This should hopefully visualise the power of procedural.
Very soon, when I finally purchase a decent microphone, I will create a video tutorial series regarding everything I have learnt about creating landscapes in Unreal Engine. I will post the link here when they are created. I also plan to improve the rock texture as it is relatively poor and the material function for the rock itself is basic and needs more variety injecting into it.
A close up of the snow material which is simply a solid colour (0.75 white), a constant roughness (0.5), a constant specular (0.1) and a Subsurface Colour (light turquoise). The normal information is picked up from the layer below which in this instance is either grass or rock. It’s quite subtle so shouldn’t be an issue if I wanted to portray deeper snow: