SSS is a little broken?

SSS behaves quite strangely in some circumstances. I understand that it is just a simplification of a physical thing, but I wondered whether anyone might know of a way to get round this? Whether the mathematics of the SSS node would need tweaking, or if this is actually how things behave in the real world?

Here’s an example of a case where SSS is definitely inconsistent. Here are several spheres which slightly overlap, but are all separate objects (SSS RGB radius = 0.5, 1, 1):


…and here is the exact same scene with the spheres joined into a single mesh:


In the first image the smaller objects in particular are very dark, and in the second image everything is much lighter. Is this physically representative of the real world? The second image seems intuitively more correct to me. Interestingly the meshes don’t even need to overlap for the joining to have an effect.

The second issue is with pointy edges on the cube, why are they dark? I can see no reason that a pointy edge would absorb more light than a flat surface.

I would guess that the problem is that an object with a diameter smaller than the SSS RGB radius results in all the light just passing through, but it

The issue with multiple objects together can be fixed once the devs. implement a feature known as SSS Groups (which there seems to be no plans for at the moment).

The dark edges issue is due to the algorithm used which is pure raytraced SSS without any pre-processing or caching (which, by the way is also an issue with the world-renowned Arnold engine since it’s their algorithm that Cycles is using). Due to how SSS is technically a very complex surface shader, resolving this in code will not be an easy task. The best thing you can use is use multiple SSS nodes with different radius values so as to get light in the edges.

Thanks, I’ll see what I can do with multiple SSS nodes!

For the second issue, one solution (suggested by Kent Trammell in one of his Shader Forge tutorials) is to use the fake absorption trick ( http://blenderdiplom.com/en/tutorials/419-tutorial-absorption-in-cycles.html ) to produce a transparent shader that’s brightest in those corners where the SSS goes a bit dull, and using an add shader to pick out the corners. Used carefully, it can give some nice results.

There’s also a discussion of forcing the SSS shader to behave a bit better in this stack exchange thread: http://blender.stackexchange.com/questions/12315/cycles-sss-seemingly-incorrect-colour-for-thin-surfaces-or-small-objects