Hey there! Just wanted to add that in my case, when I try to render a Substrate SSS Material using the Path Tracing renderer, the Subsurface Scattering effect just stops working.
In the following screenshots (sorry - just follow the letters - I had to combine all the screenshots in a single image, because I am not allowed to post more than one), I have the same exact assets (same material and static mesh), when I switch the viewport to Lit mode - it renders SSS: screenshotB
Once I switch the viewport to render using Path Tracer, the effect is gone: screenshotA
Also did a quick test, and if I turn Substrate Materials OFF for this same project/same asset, and created a new PBR Material from scratch, that uses the SSSProfile shader model, the SSS effect works in both Lit and Path Tracer: screenshotC
@SebHillaire
Is this a bug:
My Substrate material is being simplified in 5.7 automatically, and I also can’t increase “Substrate Closure Per Pixel “.
When I change the Closure Per Pixel in project settings and restart the project, and then check it again in project settings, it resets to the default value of 1. And my layered material stays in its simplified form.
Note: I am not sure if by increasing the closure per pixel, i will be able to get rid of the message in material and avoid auto-simplification. Is this the right thing to do? Does closure per pixel mean the number of vertical layers allowed in a single material?
In short yes, basically the math is not the same so if you use it this way. You would have to do the energy conservation, clear coat absorption, etc. math yourself. You might as well use the SimpleClearCoat node.
2. Having a static Enum would be great with multiple options and labels so instead of integer-based switch value i can use an enum with labels to make material more artist-friendly, which I could also expose as a parameter. It will make the materials more artist-friendly. especially if I am selling a material-based product.
If this is not possible, then for the time being please give us the option to set the current multi-switch node static with the check box, just like we have an option on a static switch node to make it non-static.
3. Right now there are 4 different input types in material function like float, Vector2, Vector3 and Vector4. It would also be great to have a input node in function for dynamic vector, in case my function is general (like cm to km conversion). It save me trouble of creating multiple functions for same thing and also It will make the material function input similar to what we have in material expressions. for example we i can attach float, V2 or V3 or v4 in node like “multiple” or “Add“ without causing error.
4. Is it possible to have for loop node in case someone don’t want to use a custom node? Because I read that anything I write in a custom node won’t go through the engine constant folding process.
@SebHillaire
I have a question: I read on forum where it was mentioned that I should avoid “if” nodes as much as possible and rely on nodes like step.
Is “If“ node rally slow? and if yes then does step node have same level of accuracy in unreal engine compared to if?
Constants on input of substrate nodes: we have a task for that I think already but I will check and add if needed.
Those other requests are not linked to substrate core itself. So please post those in separated threads. We already have all those in the list somewhere as general material editor improvements but I’ll forward still to the team. Sorry but this thread is not for general material editor support.
Short answer for dynamic if and for loops: they are not supported yet in graph but there is some WIP on that. For loops in custom nodes are fine.
I checked your project on our latest 5.7, and the issue with transmission leak are independent of Substrate. I can reproduce them by turning off Substrate. These are due to SSS transmission handling with Virtual Shadow Map. Maybe this is something we can improve, but that’s not the focus at the moment for Substrate (i.e. parity and perf).
The ‘opt-in’ nature of many of the features is great if working directly on the Slab, but trying to parameterize or wrap it in a material function (like in the included Substrate Standard Surface node) forces the most expensive connected shading path to be taken, with seemingly no way to override that.
I don’t know enough about the backend to suggest comprehensive solutions, but maybe a Substrate NoOp node we could put in a Switch/Branch? Concept attached.
SSS substrate doesn’t seem to be working properly using Path Tracer. It worked perfectly in the previous UE version. Do you have any hints/suggestions?
@EDGE.OCE This is still a goal we have (to make it easy to do that) but a long term one. No ETA at this stage. The focus right now is 5.7 and performance for instance.
@wmarcianoGS Right now the UI can only show worst case as a function of what is plugged in. At runtime, if you inpsect complexity per pixel it should automatically demote if a feature is unused (Fuzz=0 then no fuzz, mfp=0 then no SSS, etc.).
@vg_vm I am a bit confused by what is SSS and what is MFP based Substrate diffusion. Make sure in 5.7 to use the correct SSS mode on the slab. I’ll check on my side. EDIT: 5.7 latest, it seems to all work correctly with the PT. I only noticed that SSSPRofile Extinction scale is not accounted for by the PT. Other than that, MFP based SSS requires r.Substrate.ProjectGBufferFormat 1 (documentation about that important new cvar is incoming)
When you say the goal is to make it easy, does this mean that it’s currently possible for a user to do so without editing the engine source, but it just requires a lot of effort? Or do you mean that it’s currently only possible via changes to the engine source code?
1. Compatibility with Material Layer GUI based material layering.
I´m currently in the process of moving our current Material Attribute Blending based Master Blend Material to a Material Layer GUI based Material layer Blending workflow.
Unreal 5.7 is still in Preview and I´ve read the documentation for 5.6, where it says you check “Substrate enable material layer support (Experimental)”.
But I´m not sure if that means substrate material layers would work with the Material Layer GUI or HOW exactly it will still be limited in 5.7. I wouldn´t consider Substrate to be production ready, but thats probably a matter of where you make the distinction between features.
Tanget normal maps
I also asked the dev AI about other current limitations and it mentioned tangent space normals not being fully supported in Substrate yet.
As at least one of my triplanar normal mapping functions I use rely on tangent space normal mapping, this would mean there still is NO parity with legacy materials.
Is this still being adressed in Unral 5.7.1 release? Or will it it still be a limitation?
Or is that just a limitation of the Material Layer GUI implementation for Substrate and NOT of the substrate slabs themselves?
Blending of translucent wih opaque SSS
I´m also not quite sure how limited this still is, compared to legacy materials.
In legacy materials, you could only blend opaque materials with translucent materials by setting opacity values from 0-1.
There was no way to do this with a subsurface profile based material.
Is this now somehow possible, as you would use the MFP for both SSS AND translucency control in the new substrate slabs?
I only read that “Screen space SSS” isn´t supported, but would I still be able to blend opaque SSS material with a translucent material using raytraced SSS with Lumen/Path tracing?
Subsurface Profile deprecated?
I´m also not quite sure yet, how the substrate slabs SSS works compared to the subsurface profile.
A previous annoyance for me was, that I couldn´t create a parameter to control the SSS thickness of the subsurface profile, so I couldn´t change that in the material instance parameters, if I applied it to objects of vastly different size.
Instead I had to create different subsurface profiles and then switch them out on a per object bases through the override material properties of the material instance.
Would be neat,if that could now be done with the Substrate SSS features.
So, is the mean free path depending on the size of the asset or on the world units?
And what about secondary roughness for specular, that we have in the subsurface profile?
Issues with pixel/vertex shader nodes?
I use a custom triplanar mapping function for making triplanar mapping sticky on skeletal meshes.
It relies some nodes like “vertex interpolator” and “pre skinned normal”, that are currently not compatible with the Material Layer GUI.
Are there also any limitations related to Substrate with how this would work, or is that just something that I´d have to deal with for Material Layer GUI based material layering?
And any idea if that is something, that is being worked on currently?
Because its rather relevant to my decision to move to the Material Layer GUI, because if that isn´t adressed, I have to either stick with the old material attribute layering or maintain TWO Master Materials (one for skeletal meshes and material attribute blending, one for the Material Layer GUI System)
Hello developers, I am using UE5.7-preview and discovered a bug with Substrate Slab SSS + Megalights. I manage to fix it by changing Sub-Surface Type from “Diffusion” (default) to other options.