Substrate and Landscape Layers

I agree, it’s crazy that nobody has mentioned it anywhere. Thankfully, it’s mostly straightforward:

  1. After enabling Substrate, create a new material.
  • It will probably have a Substrate UE4 Default Shading node in the graph. I believe this is there to automatically convert old UE4 stuff to Substrate. Since we’re building something from scratch in a Substrate project, there’s no need to use that, so I’d replace it with a Substrate Slab BSDF node.
  1. Blend landscape like normal. Plug into Substrate slots.

    I’m just using colors but you’d use textures for creating a real scene.

Here’s the result:

That’s really it if you just want to achieve the same functionality as you had before.

Using MakeMaterialAttributs
I personally still find it helpful to group together related texture nodes in one place to keep my graph organized (refer to this video). Traditionally, you’d use a MakeMateriaAttibutes node and pipe that whole thing into the LandscapeLayerBlend node. You can do the same thing here:


Make sure to use a GetMaterialAttributes node and add the outputs you want to feed into the BSDF.

Even though we’re using the “old” material attributes, I don’t think it’s a problem. The Substrate magic happens in the slabs fed into the material output. All the LandscapeLayerBlend is doing is blending together different masks (in this case, its masking the textures “grouped” by the material attribute node); it’s not doing any other computations, that gets handled later by the BSDF. So what you put into the MakeMaterialAttributes really doesn’t matter.

As an example, I could probably pipe a texture intended for the F0 input into the subsurface color input of the MakeMaterialAttributes, and so long as I plug subsurface color of the GetMaterialAttributes node into F0, it should work just fine. Though, I haven’t tested this myself.

Substrate Advantages

One of the distinct advantages of Substrate is being able to create unique material slabs (ice or puddles would be good candidates here). The previous approach just pipes everything into 1 slab which removes many of the advantages of Substrate. So we’ll have to modify our setup a bit:

Here, I’ve added a second BSDF, and I’m blending it using the Substrate Horizontal Blend node. It’s just a simple blend node for materials that takes a mask for the mix. In this case, I want to paint another landscape layer for the mask, so I add a Landscape Layer Weight node (if you haven’t seen that node before, you can refer to these docs. Really, it’s just a simplified version of the Landscape Layer Blend with just 1 layer).

I’ve picked a random color (yellow) to feed as the layer input. It really doesn’t matter what color it is as the layer is only functioning as a mask for the mix node of the horizontal blend.

Here’s the result:

As you can see, we’ve now got two “materials” sharing a BSDF, and a third on a separate BSDF, which may be useful if that surface has different properties.

One thing I haven’t implemented yet is height blending for the 3rd material. Right now it’s simply using a weight blend for the ice. If you want to height blend this separate material, you’ll likely want to write your own logic, utilizing the heightmaps of other textures to modify the mask fed into the mix of the horizontal blend. I haven’t tested this yet myself, though.

Of course, height blending should work just as it did before within the Landscape Layer Blend node, no new changes there. It’s only extra the BSDFs that you’ll need to concern yourself with.

2 Likes