Discussion of Cycles Shaders and SSS

Add Emission and Alpha inputs to Principled BSDF by Brecht (Cycles and Eevee):
https://developer.blender.org/rB8f71a84496a95528303fbe0bb7c1406060353425
Edit:
I suppose that emission strength could be configured with some nodes connected to emission input. But would not it be convenient to be able to configure emission strength directly from Principled BSDF node?

Updated 05/29/2019:
Alex Strand completed last Brecht work on Principled BSDF by adding Emission Strength socket:
https://developer.blender.org/D4971

Change will be introduced in Blender 2.81

7 Likes

Looking at the code there is only one input for Emission and it’s a Color input. To set the strenght of the emission you should do it directly in the color value. The PxrDisney shader in Renderman 21.7 has an Emit Color input set as a color value. It seems intended to be used as a glow effect more than as Lamp.

I have compared this configuration with Emission shader:

and apparently they behave very similarly. Anyway, I’m not good with nodes and I have no idea if that configuration is correct. Anyway I think it would be nice to be able to configure Strength directly from Principled BSDF node.

If all you need is a basic emission surface, then you would definitely not use the Principled shader for it.

The new commit makes the Principled shader more useful for things like leaves, hot metal, backlit surfaces, bio-luminescent creatures, certain plastics, ect…

All it really needs now to be perfect is to upgrade it to include the way it was extended when Disney worked on Big Hero 6 (which I think there is an old patch for).

The node setup above was to check if strength behaved as Emission shader. Obviously what I was proposing was to use it along with other features of Principled BSDF. Even Strength can be useful to play a bit with Bloom from Eevee.

But anyway, if it does not seem useful for all you, no problem, there are only two nodes that I should connect there.

4 Likes

I think this is actually more a problem of the Color Picker UI. It should be more obvious in the Color Picker, when the RGB values may exceed 1.0.

3 Likes

:thinking: I just realized that you can go beyond 1, thanks.
Definitely not user friendly and not optimal to configure emission strength.

3 Likes

While I don’t think there’s that many common use cases for color values above 1 outside of emission, perhaps this could be solved with the color picker having a “range” field?

This is gorgeous and will help a lot exporters/importers.
Any chance we get something for AO like this? AO textures in PBR is quite more complex than just mix with the Albedo and currently impossible to get correctly in Eevee/Cycles.

Cycles doesn’t need an AO input, it doesn’t have any lights or effects that use it, unless they add support for the AO pass or world AO to load it instead of calculating on the fly. It’s just Eevee that needs it. Might be better to have it in the material output node instead of part of any of the BSDF shaders. I could’ve sworn there was a plan for this on the Eevee material output at some point, but I’m not sure what became of it.

The argument to add this to the principled is exactly the same than transparency and emission. It helps to make a more streamlined workflow with exporters/importers. There’s actually many other ways to do it by now but I think add this input to the material output is the worse solution I can think

1 Like

Let’s not forget that principled BSDF needs sss radius control also, besides vector input. Similar to SSS shader.

The “Subsurface” basically is a radius controll. It’s rather missleading because most users assume it’s just like a simple mix between diffuse and sss.

I didn’t know that. Well, i would definitely call that behavior strange. Cant remember a single situation with sss shading when i didn’t need separate control of sss mix and radius multiplier. Rather strange simplification which can only be useful in veeery simple cases, imho.

From the documentation:

Mix between diffuse and subsurface scattering. Rather than being a simple mix between Diffuse and Subsurface Scattering, it acts as a multiplier for the Subsurface Radius.

I don’t get it. I think there was a recommendation by Arnold sometime and it suggest to use 0 or 1, but not between the two. So what is the correct way to use it? It is physically correct to mix the diffuse and the sss?

No you should never just “mix” the two. You should always use either 100% Diffuse or 100% SSS. That’s exactly why the slider works this way and therefore it IS physically correct to use values between 0 and 1 with it. As soon as it’s > 0 it basically is 100% SSS but with a very small Radius.

8 Likes

Thanx for the clear explanation. By the way, just found out that sss slider can go beyond 1 to increase radius.
But.
Unlike in a Physically Correct Rendering Research Laboratory, on actual cg production cases we often need a simple mix between sss and diffuse. Also, among lots of other things, we might need that sss anisotropy thing which got implemented and then scraped.
Artists often want to play with things, not do a mathematical analysis of light propagation on a spherical horses in vacuum. :stuck_out_tongue:
By the way, great gif, very helpful.

Artists often want to play with things, not do a mathematical analysis of light propagation on a spherical horses in vacuum.

Of course not. That’s the whole point of a PBR shader. But you still have to adjust your thinking to understand it a bit from the “old school” way. Anyway for the record, a SSS with a tiny radius should be essentially identical to diffuse if that wasn’t clear from the other explanation.

Personally, I don’t love the “modulate SSS by tweaking the radius” workflow. Here’s my reasoning. SSS radius (or more correctly Diffuse Mean Free Path in other renderers) is a known value for different materials, say Skin materials bounce light for X amount into the material. The radius is a three component value to signify how far different wavelengths travel in the material. Scaling those uniformly can sometimes give unexpected results in slightly color shifting SSS results, depending on the SSS method. Brute force it’s probably ok.

The other question is how you’re balancing between transmission and SSS if one is a multiplier and one isn’t?

2 Likes

Without the Principled shader how would you recreated this? Can’t a material be partially diffuse and SSS with or without a texture?

The Principleds Subsurface Slider has the same behaviour as the “Scale” Parameter in the Subsurface Shader (it can even go beyond 1.0 when you enter it manually to achieve higher “Scale” values).
Scale is basically just a mulsiplier for the 3 SSS Radius values. “Diffuse” is visually the same as an SSS shader with a scale of 0.

I’m not an expert on Subsurface Scattering, so someone correct me if I’m wrong:

Not really afaik. It’s like the metallic value that should mostly either be 100% or 0%. If you want to use a texture - you should make a “SSS Scale” texture and plug it in the Subsurface input. If you still want to just mix diff. and sss (for Non Photorealistic stuff), you can use two Prinspiled Shaders and mix them.

@Fweeb could you split this discussion into a new thread? It’s not really related to Development updates anymore I guess.

2 Likes