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.
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).
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.
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.
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)
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.
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
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!
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: