5
$\begingroup$

I am trying to reproduce an SSS shader that I created using Principled BSDF with standard nodes. (I want to add some complexity to the shader but I really like basic results of Principled).

In the image below you can see my attempt to recreate the Principled shader with individual nodes. As you can see in the monkies the results are not the same. The results of Principled appear to have more variation of the scattering effect depending on the volume thickness.

According to the Blender manual the "Subsurface" slider in Principled mixes Diffuse and SSS. So in my custom shader I Mixed diffuse and SSS shaders with the same mix factor of 0.1.

What I am I missing? Does the Principled SSS do something else under the hood?

(The rest of the shader attempts to recreate the glossy/roughness part. This one is fine. I am interested in recreating the SSS component exactly).

Principled BSDF SSS reconstruction

$\endgroup$

1 Answer 1

7
$\begingroup$

Unfortunately, the Principled BSDF node does not use the same subsurface scattering algorithm as the algorithms accessible through Cycles nodes. The paper that the Principled algorithm comes from states:

Our subsurface parameter blends between the base diffuse shape and one inspired by the Hanrahan- Krueger subsurface BRDF. This is useful for giving a subsurface appearance on distant objects and on objects where the average scattering path length is small; it’s not however a substitute for doing full subsurface transport as it won’t bleed light into the shadows or through the surface.

Cycles supports Christensen-Burley, Random Walk, Cubic, and Gaussian algorithms. Hanrahan-Krueger is not one of them. Additionally, the paper states that the algorithm is "inspired by" the Hanrahan-Krueger algorithm, so it doesn't even utilize it exactly.

Looking at the above quote, though, it appears that the Principled subsurface algorithm is not as accurate as those within Cycles, so it may suit your purposes better to just use one of algorithms already included in the Subsurface Scattering node1.

If you really need to use the subsurface algorithm in the Principled shader, you can find the .brdf code here on GitHub. The relevant code begins on line 110. You can convert this to OSL code and then add it into the NodeTree with a Script node.


1 Interestingly, the author of the paper that details the Principled algorithm is Brent Burley, namesake of the more accurate Christensen-Burley algorithm included in Cycles.

$\endgroup$
5
  • 1
    $\begingroup$ I know I am a little late on this, but if you wanted to use accurate SSS in tandem with the Principled BDSF shader would you just mix SSS node with the principled or would you have to do the setup by OP? @Scott Milner $\endgroup$
    – Tyler Dahl
    Jun 17, 2018 at 5:05
  • 1
    $\begingroup$ @TylerDahl Yes. Instead of increasing the Subsurface factor on the principled shader, you'd use a Mix node to add more accurate SSS. $\endgroup$ Jun 17, 2018 at 5:35
  • $\begingroup$ @TylerDahl Actually, I take that back. Looking at it more, it appears that SSS is mixed into the Principled shader before reflections, so that would only be valid with a completely diffuse use of the Principled shader. I'm not sure how you would do what you want to do off the top of my head. I think this could merit a separate question. $\endgroup$ Jun 17, 2018 at 5:41
  • $\begingroup$ @TylerDahl The formula is roughly (avg(diffuse, subsurface) * light + sheen) * metal + specular + clearcoat, so SSS is one of the first things integrated... $\endgroup$ Jun 17, 2018 at 5:49
  • $\begingroup$ That's interesting. I haven't come across a need to use it yet and I don't think I'm advanced enough into 3D art to be able to come up with a solution for this but maybe I'll do some research into it tomorrow and at least come up with a good question that has some relevant research with it $\endgroup$
    – Tyler Dahl
    Jun 17, 2018 at 5:53

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .