Substrate - Feedback Thread

I am testing the substrate for post-process material and using scene textures. I upgraded the project to UE 5.4. and seems like scene textures still have issues.

Base Color (as stored in GBuffer): In this scene texture, the Base color is missing for Meta human Skin and Hair (seems like an issue with the Subsurface profile and Hair shading model).

Shading Model Color: In this scene texture, the shading model color is missing for the Unlit, Clear Coat, and Hair shading models (for the hair shading model used meta human for the test).

I also have a request for 4 additional scene texture IDs:
1. Emissive Color
2. Reflection
3. Detailed Lighting
4. Simple Lighting



Is there a way to get backlight transmission to work (e.g. backlight through ears) with substrate?

If I make a non-substrate subsurface material and put a light behind a thin object like a character’s ears and place the camera in front, I can see light bleeding through very nicely.

But if I make a very simple substrate material (slab bsdf with a constant plugged into SSS MFP), the subsurface bleeding will only happen if the camera can see the lit side of the surface. As the camera goes to the opposite side the SSS fades away.

Here’s a simple setup (single directional light) - only difference in these images is the camera position. You can see in the first image that there is a lot of SSS when the camera can see the lit side, but as the camera moves to the dark side all that scatter disappears.

This is the test material:

image

In a non substrate subsurface material I can get a lot of transmission through the ear:

image

I was wondering if there is an option somewhere that I am missing for substrate materials?

SSS Phase Anisotropy doesn’t fix this (it’s already correctly defaulted to 1), and I have ‘transmission’ turned on on my light (also doesn’t seem to do much).

Thanks.

Just a bit of technical clarification here: for what I was taught, subsurface scattering is light entering an interface, scattering within it, and exiting through that same interface. Transmission is light propagating through one interface, and exiting out another (EG backlight). I bring this up not to nitpick, but just to better understand.

For what I know with substrate, subsuface scattering and transmission are handled using somewhat separate methods. SSS is handled using a screen-space diffusion algorithm, and as you discovered and disappears when the surface receiving light isn’t visible.

I do know that the whole concepts of opacity/transmittance were redefined and rewritten for substrate, but I don’t actually know what means what at the moment. Your blend mode might be a thing to experiment with?

I can’t find any documentation in substrate on a similar backscattering term, or perhaps the documentation is so different that I don’t know what I’m looking at.

Thanks for reporting!
BaseColor, ShadingModel read from scene texture are fixed for 5.5 (I also fixed a bunch more I have noticed were different). There is still a bug for hair material properties when they go the visibility buffer path. Was have a task for that registered now.

TLDR: If you want things to work as before, you will have to use the legacy shading model node for SSS + transmission.

Subsurface scattering on the slab node is still work in progress since we want that path to be more unified. You should get light traveling through your mesh, but to do that your MFP needs to be large. That will result in a large SSS blur in screen space which removes lots of details or a waxy look. SSSPhase should help as you say but, as I said, this is Work In Progress :slight_smile: and not finished.

2 Likes

I forgot to mention before about path tracer as well.
BaseColor, and ShadingModel scene textures show similar issues in path tracer as well. specially hair shading model.

Question #1:
Please let me know if I should expect new scene texture IDs from the passes I mentioned below.
1. Emissive Color
2. Reflection
3. Detailed Lighting
4. Simple Lighting
If yes then in which UE version I should expect these new passes?

Question #2:
Substrate Slab replaces old properties like Metallic and subsurface with MFP and Fuzz in terms of naming. so I was curious if it’s going to affect the names of “Scene texture IDs” as well in the scene texture node.

Does Substrate change anything regarding support for proper AOV render passes (as well as support for LPEs)? Specifically, I’m referring to:

direct diffuse+subsurface
indirect diffuse+subsurface
direct specular+coat
indirect specular+coat

The docs say this for Render Passes:

Although Movie Render Queue has the capability to output some render passes, the limitations of Deferred Rendering does not make it possible to output all passes to assemble the final image from. This means that common passes available in other rendering packages (AOV’s), such as Ambient Occlusion or Sub-surface Scattering, are unavailable in Unreal Engine. This page lists the only supported passes.

So my hope is that if Path Tracing is used in combination with Substrate that it might be possible to output AOVs and LPEs.

Replicating your test material I’m able to get back scattering:

My guess as to why you are not seeing it is that your light is too dim. Here’s mine from behind:

Incidentally, you get more control if you put a color into the MFP using a Transmittance to MFP node. Also setting the Phase anisotropy to 0.8 works nicer than setting it to 1.0. I believe 0.8 is the correct value for human skin. You can control the SSS scale using thickness in the Transmittance to MFP node. Note that I do not have this connected to the scale which works more like a weight.

Also, as is to be expected this all looks much more accurate in the path tracer:

1 Like

That’s really interesting. In your test the SSS looks about the same in both of your images (camera on the same side as the light vs the opposite side).

I’m sure I could boost the light enough so that I could see SSS bleed through to the other side in my setup, but you can see in my test that the SSS is super strong when the camera can see the lit side, but fades away as I spin the camera around the head.

If I use that Transmittance To MeanFreePath helper node I get absolute rubbish. And the phase anisotropy control doesn’t seem to do anything at all.

Is there some setting in your material or general project setting that you know of that might be affecting this for me? See some screenshots of my test scene:




etc.

Even my material preview is broken:

image

Material is super simple:

Blend mode is Opaque, Shading Model has automatically been set (by substrate I guess?) to Subsurface Profile.

Do you have a subsurface profile connected to it? I guess not since you are passing a color into SSS MFP. I do not have a SSP assigned to the material (and seem to be unable to do so).

@K_FR_NZ , what version of Unreal are you using? I saw UE 5.2 do things like in your most recent post with Substrate. I’m on UE 5.3.2 where these issues seem to have been fixed.

Hello,
AOVs should work the same way as before: nothing less but also nothing more. As of today.

Hello and thanks!

As mentioned before, the path tracer implementation is not finished.

Q#1: those should still work the same way as before. The fixes I have done are for 5.5. I have added a task for us to check that all those are working the same way as before with Substrate.

Q#2: we can recover back legacy properties from Substrate Diffuse/F0/etc during transition to Substrate. However, for instance, metallic from Diffuse/F0 is an approximation. That is how it will be. We even want to drop metallic scene texture reads as it does not makes sense moving forward. Things will change as the material system move forward to the new scheme. We cannot get stuck in 10+ year old principles :slight_smile:

1 Like

I want to update my post-process material product and want to plan based on substrate.

And I think there is confusion regarding my first question and new Passes. because there aren’t any scene textures Id regarding, Emissive Color, Reflection, Detailed Lighting, and Simple Lighting. These passes which I mentioned are missing from legacy material. So that’s why I am asking if these new passes will be added.

In the Lagecy Material system, there is no way to manipulate Translucent objects in post-process material when I use “Post Process Input 1”. and the shading model also doesn’t show any specific color for the translucent shading model. so I was curious if I would be able to manipulate translucent in Substrate Post Process material using “Post Process Input 1” from the scene texture node. and will translucent be shown in the Shading model scene texture. because in legacy material it didn’t have any specific color in scene texture for translucent like other shading models?

When I try to combine “Substrate Slab” with “Substrate Unlit” using “Substrate Horizontal Blend”.

Project crashes as soon as I attach blend node’s output to Material node’s “Front Material” input.

These is the error when popup apears after crash.

LoginId:4a5eef4d44a98418791cd39c8ca0a9ce
EpicAccountId:337a7e269326490f931ae031b64c3111

Assertion failed: It.LeftIndex == INDEX_NONE && It.RightIndex == INDEX_NONE && It.BSDFIndex != INDEX_NONE [File:D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\Materials\HLSLMaterialTranslator.cpp] [Line: 12082]

UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_CoreUObject
UnrealEditor_MaterialEditor
UnrealEditor_MaterialEditor
UnrealEditor_MaterialEditor
UnrealEditor_UnrealEd
UnrealEditor_GraphEditor
UnrealEditor_GraphEditor
UnrealEditor_Slate
UnrealEditor_Slate
UnrealEditor_Slate
UnrealEditor_Slate
UnrealEditor_Slate
UnrealEditor_ApplicationCore
UnrealEditor_ApplicationCore
UnrealEditor_ApplicationCore
UnrealEditor_ApplicationCore
user32
user32
UnrealEditor_ApplicationCore
UnrealEditor
UnrealEditor
UnrealEditor
UnrealEditor
UnrealEditor
UnrealEditor
kernel32
ntdll

If it is not in the legacy system then it won’t be in Substrate. Sorry but those extra ids and features you request would be a different ask and not the focus of this Substrate thread. Also due to the nature of our deferred rendered it is not easy to split lighting components the way you are asking here. See also the comment above discussing AOVs+MRQ.

Thanks for the crash report! I have added a task for 5.5.

you didn’t mention anything about translucent manipulation in post-process material. Why can’t I manipulate it even though there is ID for translucent? is this because of some sort of bug? it was the same in legacy.

I am a little bit confused regarding the lighting and reflection component. because Unreal Engine already does it in the editor for visualization buffer. is it happening in a different renderer or is it also happening in a deferred renderer?

can you clear an other confusion, there are most of material properties which are available in scene texture but “Emissive Color” is missing from it.

if you can’t add it now and this thread isn’t for feature request then where can I request “Emissive Color” property as a scene texture. because I requested different features multiple times but i don’t get any response from epic.

is there a cheat sheet for using bump offset with substrate? i learned. and will continue. mean free path it is. hmm. true parallax is expensive on my rig tho. i can’t even run the example map above 30 fps. it looks good tho. i like that ice ball. i done that procedurally raymarched some time ago. yo

snap is just some generic normals and height. will have to figure out to make it look good?

The docs have a ton of great info. This is taken from there:

"The Content Examples project includes a Level named “SubstrateMaterials where you can explore different examples and demonstrations of how Substrate Materials function.”

You should find examples in there of what you are after.

1 Like

I’m in 5.3.2 as well… interesting.

And this is a brand new test material I have just made, so it’s not any weird legacy thing – like my “real” skin material (not shown in any of my pictures) is one that was originally a non-substrate material that I saved as a substrate material, then added slabs to and slowly converted over, so I could believe that maybe something was funky in that material. But the test SSS material I screenshotted in my previous posts is a brand new one. Very strange.