Home

3D Gallery

Illustration Gallery

Tutorials and software

Diarrhoea

About Me

Links
SUPER SUB SURFACE SCATTERING

Back to software index
Back in 2001, Stanford researcher Henrik Wann Jensen released a technical paper titled "A Practical Model for Subsurface Light Transport". This paper was to have a huge influence on computer graphics. It introduced the concept of Sub Surface Scattering (shortened SSS from now) to the 3D community, one of the key features needed to render realistic skin. Thanks to Wann Jensen, 3D characters such as Gollum, Yoda and Davy Jones was able to reach a level of visual realism not possible before the paper was released at Siggraph 2001.

When scattering arrived
While SSS was quickly implemented at the programming savvy VFX and animation houses (Pixar, PDI, ILM, Weta, you know the guys), it took a bumpy road bringing it to the popular 3D packages. The unfortunate of us with no programming skills, who were depending on off the shelf software, simply had to wait for it to be available for purchase. And when we finally could apply SSS to our models, the results and speed weren't always as expected.



The image above show the problem I faced when SSS appeared in Brazil r/s, which is my renderer of choice. This is a simple cube lit by a directional light from above. The first render show how the cube looks without any scattering (pre-2001 if you like). The next one show how the Brazil implementation of SSS renders. Notice how the scattering only spreads on the side surfaces and not on the surface where the light actually hits. This is how nearly all renderers implemented SSS in the beginning. You see the effect again in the third cube, rendered with VRay. The fourth cube show how scattering renders in Mental Ray. It's not perfect, but it demonstrates a very realistic SSS effect. *

Even though it does pretty scattering, I really don't like rendering in Mental Ray. And to make matters worse, when I first found I needed SSS, Mental Ray didn't even have it implemented. So there was no way I could render it as a separate pass. After thinking about it for a while, I decided to try to program a SSS system myself.

* Because FinalRender has no demo version, I've been unable to test it out. We've got Renderman for Maya at work, and its SSS might be the best in the business. But since I'm looking at 3ds max here, I left it out.

What I did
I thought about it like this: SSS is a bleeding of the light on the surface of an object. So why not do that in the texture itself, by baking out the light as a bitmap? Since that baked texture would store how the light is hitting the object, all you have to do is to blur it out and re-apply it to the object. I did a quick prototype in 3ds max using the texture baking functions, opened up the texture in Photoshop, and then used a series of blurs on the texture, layering the blurs on top of the original baked texture. The prototype worked great! So all I had to do was to program this method into a script, and try to automate it as best I could.



Here's the simple interface I came up with. Next to it you see the same box again, this time rendered with my scattering method. On the second box, I have combined my scattering with the one in Brazil. I think this looks the best. Compare these boxes with the ones on top. You'll see that my method is a nice alternative to Mental Ray scattering.



Let me show you how it looks on a more complex object, such as a head. The baby to the left is how he looks before any scattering is applied. The baby on the right is rendered with SSS. The images in the middle show how the textures look before and after scattering is applied. Look closely at the baby on the right. The effect is subtle, but if you look around the nose, the mouth and the eyes, you should be able to see that there's a softening of the way the light is affecting the surface. This will be more pronounced (and look a lot better) on a model with proper textures, especially if you have a bump map. There are some seams, unfortunately, but I have a couple of ideas on how to solve that.

So until Brazil r/s gets a realistic way of rendering SSS, this is how I will do my scattering. It can be very cumbersome. If you change the lights or the animation, you'll have to re-render all the textures. But at least it looks great. And combined with the back-scattering of Brazil, it can look quite stunning!

How can I get this?
So why isn't this available? Well, right now that would not be possible. It only works on my setup, when going downhill, and with the wind on my back. In other words, it's far from idiot proof, very easy to break and will get you into serious problems. I really don't have time to provide support if something fails, and it most likely will fail. That's why I'm not planning on distributing it at the moment.

Also, there has to be a better way of solving it than my method. I really hope someone would do a renderer-independent SSS for 3ds max, perhaps using vertex data instead of textures. I'd be more than happy to help anyone who wants to give it a try.



All the images on this website are (c) copyrighted Rune Spaans and their respective owners. Any use of the materials on this site other than for private, non-commercial viewing purposes is strictly prohibited. If you want to use some of these images for promotional or editorial reasons, please contact me.