[FREE] Advanced Landscape Shader

Hi guys, Auke here.
Visual Storyteller and Lead Environment Artist at Sooii.

In the last year I learned a lot about landscape creation and besides Unreal, I used a lot of different tools to get the result I was looking for. My journey began with World Machine and I started to love and hate it. The results were amazing, but the usability was and still is a pain. I decided to look for something different and ended up using with the Gaea Bridge. These tools are the fundament for my landscape creation workflow, but when the work is there done, I ended up in Unreal with a grey landscape without much character to it.

https://us.v-cdn.net/5021068/uploads/editor/sz/jdc3cd2j61ct.jpg

You’ll find some tutorials out there about landscape materials, but a lot of them incomplete or just a fraction of what you need for your landscape. Besides that, creating natural landscapes is kind of a niche in CG and that’s makes it’s even harder to find proper ressource. So I decided, after reading dozens of forum threads or watching tutorials, it’s about time to give something back to you guys. Something you can learn from or just use it as your own.

I’ve made an advanced and most important, modular landscape material with a pretty nice performance and some nifty material functions in it, which I made with the help of Rodrigo Villani.

So to not waste your time, here is a little breakdown about the inherited nodes and a description what they do.
I hope you can learn something from it and I wish you a merry christmas - hope you’ll find this present useful :slight_smile:

Material Layer

https://us.v-cdn.net/5021068/uploads/editor/rd/8sq8mbdinkfo.jpg

When working with landscapes, you have multiple kinds of surfaces. In my case, the mongolian scene, I used a soil, grass, gravel, cliff and snow layer. Managing these can really be a waste of time. Duplicating texture sample for texture sample, repeating this step over and over again. For exactly this problem I created this material function. Out of the box, you just have to plug in your textures, connect it with the rest of your node system and it works. You probably should rename the basic parameters to get access in your material instance, but beside that it’s a out of the box solution.
One thing to mention is, I multiply by default the AO channel on top of the BaseColor. Technically this is wrong and breaks the PBR workflow, but it really helps to get better definitions in your material, because most of the time a regular material can’t handle the self-shadowing in small crevices. So I added this little option, which you can always turn of using a simple boolean.
Also, for saving some texture samples, I am using the AO multiplied by 0.5 for getting some kind of an specular approximation.

Adjustment Layer

https://us.v-cdn.net/5021068/uploads/editor/uf/9i4kfowyef1w.jpg

Sometimes your material does not look right and you do not want to change these parameters in Substance, Mixer etc. and it’s easier and faster to do this in the material. For this case, I added a pretty big adjustement layer function. Most of it is pretty self explaining, so just play a bit around with it, open it if you like and look through it. The most important part of this function are the Heightmap functions. With these parameters you can control the contrast of your heightmap for - and this is imporant - the blending between your materials. Using a normalized heightmap is often not enough to get nice transition, especially when you are dealing with sharp rocks, so you need to raise up the contrast.
The result is still not perfect, but I am working on a better solution for this, not using the internal LayerBlend node.

Distance Overlay

https://us.v-cdn.net/5021068/uploads/editor/wv/4ehiyrzyz6dc.jpg

The problem with big and open landscapes is that you quickly see repetitions on your surface, caused by the tiling textures. To overcome this, I created a distance overlay function to lerp an overlay over your and normal channel. This one is pretty expensive, because it is using a high res texture - in my case a 8k one - which I made with the data maps from gaea, processed in Substance Designer. When you are interested in creating this texture, let me know and I’ll make a written tutorial for it.
You can control the overall intensity of the basecolor and the normal channel. More important is the option for excluding material layers from the overlay. In my case, I excluded the cliff surface to preserve the rock structure projected via a special stochastic tri-planar function, made by Rodrigo Villani. More about it later.

https://us.v-cdn.net/5021068/uploads/editor/ok/jb572xwaakgf.jpg

https://us.v-cdn.net/5021068/uploads/editor/c1/c3xcqnour5qu.jpg

Color Variation

https://us.v-cdn.net/5021068/uploads/editor/9d/t65a4j718alt.jpg

I’ve made this one for the same reason like the distance overlay function. On far distance the surfaces tiles to much and it looks repetitive and that’s not how nature work. When you take a look at a grass surface, you’ll see a lot of different colors like dead grass patches, fresh green grass - or something in between. To mimic this behavior, I created this node.
It’s not uncommon to do this, but to complete the collection it’s totally necessary. It’s basically again just a color multiply with some other parameters like intensity, contrast etc.

Distance Reflection

https://us.v-cdn.net/5021068/uploads/editor/77/mtnm4a94ptg3.jpg

The problem with large landscapes is, that on a certain distance, the landscapes reflects too much and it does not look believable at all. For this I created this little ‘hack’ to overcome these problems when using PBR in realtime applications.
Unreal is restricted in how much it can show on screen and so, for example grass, get culled out on distance. In the real world, the grass is still there and scatters the light in every direction. It’s comparable with a really rough surface which reflects the rays of light in a very chaotic way. So, the easiest way to solve this problem is, to use a mask based on distance to manipulate the roughness and specular values and to mimic this behavior.

SlopeMask

https://us.v-cdn.net/5021068/uploads/editor/33/yvtki9ggtepu.jpg

Do you know Brushify or any other auto landscape material? That’s basically the same. You can utilize it for every task - in my case I use it for the cliff detection and to not be restricted by resolution … and it’s just easier to add slopes. So yeah. Use it as you like.

https://us.v-cdn.net/5021068/uploads/editor/0n/z13dhc6viefr.jpg

https://us.v-cdn.net/5021068/uploads/editor/wm/mjddsl1wbo4g.jpg

Stochastic Tri-Planar

https://us.v-cdn.net/5021068/uploads/editor/77/sw8zasjl35ae.jpg

On this one I am extremely proud and the best thing, I didn’t do anything for it…
During work I am watching a lot of GDC talks to stay up to date and learn new things in areas, I am not even related to. One day I watched a talk about the rendering in FarCry 4 and I was blown away. Beside the procedural approach of creating this beautiful world and all the super technical stuff, I was also very interested of how they are dealing with cliff faces. They developed a super cheap method of creating a tri-planar function using just a single texture sample. They also released a paper with even more information - when you are interested in, you can find the paper here.
Long story short, I am more of an artist and so I looked for some help to get this function into Unreal … and I got help from Rodrigo Villani. I understand the basic logic of this function but I basically have no idea how he accomplished this node. You can just use it, or visit his YouTube channel and watch his video about how he’s creating this tri-planar projection node. It’s not up yet, so be sure to subscribe to his channel to not miss it.

There are some more material functions in it, but these are just to basic to cover them here. Just download the sample scene and study the material or just grab it and migrate it to your project. I hope you’ll find this material useful and before I end this article, I want to thank some people for their help. Beside Rodrigo Villani I want to say thanks to Ayden Yanik, who helped me with his VDB Cloud Pack. For me, finding proper clouds to use, is pretty hard. You always have to paint, stamp and adjust the clouds and in the end, you do have still a lot of clouds with different lighting scenarios. So I used his cloud pack and simply rendered some clouds. When you are interested in it, be sure to visit his ArtStation Shop.

And last, but not least, Sooii. I started my career there last year as a professional 3D artist and I got a lot of support from my coworkers and especially my boss. So I want to say thank you. I get a lot of freedom to develop my skills there - so thank you :slight_smile:

Download:

https://drive.google.com/open?id=1Re…Nsgq3JdvAHHnNd

So thanks for your time and I wish all of you a merry christmas and have nice holidays.

5 Likes

Thank you very much. Amazing work. Is there any tutorial videos?

Hi @mustafaisildak,
thanks for your kind words :slight_smile:

No, there won’t be and I do not provide any support on this one.
I will develop it further and post the updates from time to time here, but beside this I don’t plan to go further :slight_smile:

Much much appreciation for such a generous sharing! Thank You! Happy New Year(s) ! :wink:

Thanks :slight_smile:
It looks amazing :slight_smile:
Great work :slight_smile:

Hello ! That is very kind of you. Thanks. I know this is comming in late, but I don’t see theh logic behind your distance reflection function. Maybe i am wrong, being a noob, but it looks like it is just lerping between two values based on an grayscale alpha map (roughness) and I don’t understand how lerping the result with the actual roughness map based on that rudimental camera depth FADE function, can give me a different roughness in the distance. It’s more like a number and an image mixed toghether. Didn’t work form me. Thank you anyway for the rest!

Your bike ?

Thx it really work well, if you migrate don’t forget to enable epic sun position calculator plugin

I have seriously been pulling my hair out trying to figure this out! Thank you so much! I am going to spend the next couple of days dissecting this. I am just starting out and all of the tutorials on landscape materials that I have found are really old or really simple. This is absolutely fantastic and going to help me learn SO much! I watched so many landscape tutorials and they would just be like, oh yeah I used an auto-landscape material for this, and just skip over how to actually make one. It was getting so frustrating and I was feeling dispirited about it until I came across this. I just tried it out on one of my world machine landscapes and it looks amazing. You are awesome! Thank you!

thanks so much excellent tutorial

This does not work in UE4.25, right? Just opened the project but it’s all black. I found the required megascans plugin here btw: https://help.quixel.com/hc/en-us/com…n-with-UE-4-25

Edit: Ok found out you had to load the actual level. Thanks for this!

Awesome work !

Wow, THX for this advance mat and the pics looks fabulous :smiley:

Good work, i’ve reconstruct your material blueprints and functions not migrate, but im going in one problem with my day night cycle the cliff shader glew at night i have light mountains.
Try to figured out with all the settings for that.All is good except the mountains here is a picture:

Greetz!

Thank you. How to use it? Any tutorial or example?

Hate to necro, but did anyone get this working on 4.25? Looks fantastic, an overview video on setup and usage would be amazing.

why when i try to make a new scene using the material everything is good besides the snow fading out when close to it making it invisible but i can clearly see it from distance