Substrate - Feedback Thread

Hello everyone,

My name is Sébastien Hillaire and I am the co-author of Substrate along with Charles de Rousiers.

Substrate Materials have been released as experimental in Unreal 5.1. As described in the documentation: “Substrate is a new way of authoring materials that replaces the fixed suite of shading models, such as Default Lit and ClearCoat, with a more expressive and modular framework that provides a greater range of surface appearances and a wider parameter space from which to work. Performance for Substrate Materials scales according to complexity and desired budget of a project, with legacy materials having a similar cost as before.”

For 5.1, the Substrate docs will be hosted on the Dev Community. They can be found here. Please be sure to read all of the docs before posting, especially the Experimental Status Section to learn more about current limitations. We will likely update the docs over time based on your questions and feedback. Furthermore, a sample project with training and usage examples will be released soon.

We are starting this thread for general feedback and discussion. If you have more focused feedback that might require a longer conversation, please start a new thread under Rendering and apply the Substrate tag. Before replying to this thread or starting a new topic, please search the forum first to see if there is already a relevant thread.

We and other Epic employees will try our best to answer as much as we can, but cannot promise responses to all of your posts. We do read everything here and will try to incorporate your feedback into future work.

NOTE: Substrate is the new name. The previous, now deprecated name, was Strata.


How would you achive the subsurface scattering like in the shading model?The one on strata behaves like the subsurface profile which is nice for skin but less for something like a candle.

You can use the Mean Free Path (or the more perceptually uniform helper node Transmittance-To-MeanFreePath) to give a SSS effect (and color). Keep in mind that the value range for Mean Free Path is 0 to infinity. If you want the object to get more scatter, you can definitely multiply the MFP value as high as you need to hit the look you want.


If I try to multiply the value im getting a pretty noise artefact as a result.

Not sure if I’m doing something wrong.

1 Like

Yeah, that’s definitely the right idea. You should also plug in the thickness - as the two parameters work in concert. If you’re still not able to hit the look you want, you can try to toggle the ‘Use Subsurface Diffusion’ boolean on the slab itself. This will cause SSS to revert to a wrap lighting mode which is (quite) similar to the legacy shading models (non-SSP).

1 Like

I actually think you have found an edge case in how the model is parametrized. You have a MFP of 1 in the transmittance to mean free path color for the blue channel - meaning that blue light is not attenuated at all. Simply changing the blue channel of your vector parameter to 0.99 will give the behavior I was expecting.

1 Like

The scenetexture is very weird, I don’t know how to do some stylized post-process now.

Which scene texture(s) are you trying to use, and how are you viewing them? Strata generates the buffers on request - so looking at the buffer in the viewport may not look like you’re used to seeing.

1 Like

Thanks for reporting those issues.

A few extra points:

  • I have tested scene textures from a post process in 5.1 and it seems to work (I have not tested everything). Please be accurate when something does not behave as in the non strata path otherwise we do not know what to look at. Thanks.
  • From our side, we will need to add details for the subsurface setup in the course.
  • As mentioned by @EG.NMorgan, when UseSubsurfaceDiffusion is ticked on the slab node, the screen space subsurface scattering diffusion method is used. Use the transmittance color to specify the bleeding color as well as the thickness to specify the distance at which this color is reached. Directly feed MFP if you have physical data.
  • Then if UseSubsurfaceDiffusion is unticked, the shading is similar to the Subsurface shading model: transmittance color represent the subsurface color. The subsurface scattering distance is controlled using the phase input for now (same as Opacity before, adhoc non PBR way to remain cheap)
  • Transmittance=1 will result in an infinite MFP. We have made that safe but maybe we have missed a spot so we will look at fixing.
1 Like

Thanks for the quick replying.
It seems cause by TSR.

when use TAA, it get what I expected.

But when use TSR, the result is very weird.

gradient color also won’t work expected.

Thank you for reporting the issue! We found the problem, and it is now fixed in the mainline. We should be able to provide a fix for the next release patch.

1 Like

I was checking a bit of the code, I see everything is still hooked to the HLSLMaterialTranslator.cpp with hardcoded functions just to receive the pins values, I am wondering if in future will it be possible to inject a custom BrDF functions from a plugin, so we can create custom shading models

1 Like


We may have a plan for that already because Strata can make that possible. But there is no promise or ETA: we want to make this right, future proof and there are lots of elements to develop before we get there.

Any UX and workflow suggestions are welcome. Thanks!

1 Like

Please always provide more details for us to reproduce. It works as expected for me in 5.1:


Dielectric smooth:

Conductor rough:

Conductor smooth:

Flipflop node:

nvm it seems the material i was using was just too rough for the effect to be noticeable.

The thing that threw me off is that f0 seems to affect overall specular amount similar to the specular node while f90 doesn’t seem to.

As you can see f0 has a dramatic effect on overall specular values while f90 doesn’t. Though that may be intended.

Based on the description I was expecting an effect more similar to what’s shown in this video Specular & Roughness control for Unreal Landscapes - YouTube though I guess I may have just misunderstood.

Yes that is expected. F90 is only here to control specular at grazing angle and the way it progressively appears follows some physically based rules.
F0 controls reflectivity at facing angle. And we enforce physically based energy conservation/preservation. So F0 in [0,0.08] is for dielectric. Then when going higher up, conductor progressively appear (while diffuse progressively disappear).

If you want to hack/cheat around to better control the specular color, you can use the FlipFlop node (we still enforce energy conservation/preservation):

Also, if you want the old basecolor/specular/metallic parameterization you can also use the Metalness-To-DiffuseAlbedo-F0 helper node:

I couldn´t test Strata yet, so i just have a question: Will Strata be able to get something like an Edge shader/curvature shader (i think, its called Bevel node in Blender), so that we can isolate edges and corners on meshes? Just asking, because that one opens some really cool possibilities for procedural textures, as shown in this video here:

And Color Ramp ^.^