Translucency is a material phenomenon where light travels through an object's surface rather than simply bouncing off the surface. This is a diffuse phenomena, its specular equivalent would be something like transparency or refraction. Most non-metal surfaces contain a certain degree of translucency, so it was only a matter of time before researchers began looking into how to simulate this phenomenon in CG more effectively. A lot of papers at siggraph this year dealt with the subject, including a paper by PDI about skin in Shrek, Jensen's BSSRDF paper, and a talk by Matt Phaar of Exluna. Anyways, I've decided to talk a bit about what I learned, as well as take some reference pictures to help understand the phenomenon better. Although general enough to be platform in-specific, some of the topics discussed here relate to my 3d software of choice, 3dstudio max.
When light hits a surface, it reacts with that surface in some fashion. Reactions include reflection, absorption, refraction, diffusion, scattering, etc. When dealing with a diffuse surface, usually of the Lambertian kind, you're basically just dealing with reflection. A ray goes from the light source, hits a surface, does a shade call to get a color value, bounces to the camera and shades the appropriate pixel (in view raytracing, the ray travels backwards from the camera to the light, but for the sake of clarity I'll be referring to light raytracing for this tutorial). In the real world, this process is actually a two step process, light hits a surface, the surface absorbs certain wavelengths of light based on its material, and other wavelengths are reflected back to the viewers eyes, producing the color we see. The actual material weighs heavily in the equation, rough surfaces for example will reflect light back very differently than a smooth surface. But since most cg artists aren't interested in playing with the molecular structure of the material, many approximations and tricks have been developed to replace the actual science. And certain assumptions were made about the surfaces, for example, a Lambertian surface is completely smooth when in fact there are very few surfaces anywhere that are completely smooth (in 3dstudio, a Blinn Shader is actually a Blinn specular shader added to a Lambertian diffuse shader). Other models have appeared such as the oren-nayar model, which allows for surfaces to be "roughened", producing a better visual result than making everything purely Lambertian.
The way light reacts to a surface is known as the BRDF of the surface (Bidirectional Reflectance Distribution Function). BRDFs can be simple such as the Lambertian model. BRDFs can be complex, such as the cook-torrance model, which is more physically based but can be more difficult to control. Which you choose is based on a number of factos, are you an artist or a scientist? Do you need physical accuracy or is an approximation ok? Will the director get pissed off if you tell him/her that you can't tweak the color of the surface because that's not how it would look in the real world. :)
Ok, ok, so now we know a few basics. So how does this related to translucency? Well, Translucency is one of those phenomenon that goes a bit beyond your everyday Lambertian diffuse.
With good old Lambert, light hits a surface and bounces, leaving the surface from the same point it hits. Now lets consider something like human skin.
When light hits skin, some of the rays bounce right off. Some get absorbed (i.e., die). Some of the rays enter into the skin, bouncing around. Some of those get absorbed. Some bounce out at a slightly different angle than they entered. Some make it through the skin layer to the flesh layer (which includes blood, muscles, etc), again, more interactions. Some continue through this layer and hit the bone, stopping their journey. Anyways, just a little example, I'm sure you can see the need for a more complex shading system in order to approximate these kinds of interactions. We'll get back to human skin later.
Translucency of Flat Surfaces ("2D")
So now, how do we simulate it? Well, first comes the simple solution. We'll start with the 2d case. As in, if you've ever placed a light behind a piece of paper, you've noticed light gets through. What's more, if you stick you hand between the light and the paper you see the shadow of your hand through the paper.
This is simple 2d translucency, and can be simulated a number of different ways in max. The easiest is using the Translucency spinner in the raytrace material.
Here's the scene setup.
Here's with no translucency (the white dot is the location of the light).
Here's with translucency. We see light from behind the surface, as well as the shadow of the ball.
This technique sorta work on non flat objects...
But when you use a shadow casting light (shadow maps, in this case),
shadows look weird. That is why max raytrace translucency should only
used in cases such as paper, curtains, lamp shades, anything that has
great thickness to it.
Self-Illumination Trick ("2D")
Another trick I've used now and again is using self illumination to
fake translucency on flat objects. This really only works in static
shots where you don't need any interaction with the object, but it can
give you the same general effect. For example, here's a file called lantern.max (max 5) to make the lantern below.
I just placed a gradient map inside of the self illumination slot of
the material to simulate a glow coming from a light source on the
interior of the lamp. Note, the light inside the max scene isn't
actually being used to illuminate the object, I just placed it in there
to turn off max's default lights.
Another thing to try is to use a raytrace material instead, and
place the gradient inside the Extra Lighting map slot.
Simple "3D" Translucency
For 3D objects, you need something a bit different. Lets start with the straight-forward solution. Say for example, you have light enter a point on a surface, you then have the light continue to go through the object until it hits a back face, i.e., it leaves the object. You calculate a rough distance between those two points, the deeper the distance the less light works its way to the other side, and then you add that extra light to the other side of your surface. Grant Adam wrote a very interesting script that does something very similar, and can produce some nice results.
Here's the max file max file, using max4.2, to make this image using Grant's Script.
A few disadvantages of this technique:
Full-Blown Volume Rendering
For complete realism, what you actually want is a full volume render of your surface. When dealing with, for example, polygons, we're dealing with a surface, not a volume. If you've ever taken a sphere and deleted some faces, you've noticed the sphere is in fact hollow. A volume means at any point inside that sphere, there is still sphere, not empty space. The two main problems with this approach though involve speed and the data set. First, calculating a full volume gets very slow because of all the info you have. And then there's the question of how do you generate that information? Say you have a human muscle you want to render volumetrically, you now need some way to specify information about every point inside your surface. Do you want to start modeling every atom that makes up your object? Because of these factors, volume rendering is still somewhat impractical for mimicking say the way light reacts to human skin (in the entertainment industry anyways, volume rendering is being heavily researched in the medical industry as it relates to the human body). This desire to simplify is a lot like how the artistic wants to avoid worrying about the chemical composition of your material. "Can't you just give me a button that makes it look cool?"
Kubelka-Munk Pigment Model
Fortunately there are other ways to approximate translucent surfaces. If you start doing some research through various papers, the first one you're likely to run into is the Kubelka-Munk Pigment Model. This was developed in the 30s to describe light bouncing off wall paint. The idea is, how much of what pigments do you need so that when you paint a wall with x thickness of paint you get the desired color. Research was done, and some useful models were created. For more information, check out Andrew Glassner's "Principles of Digital Image Synthesis".
The method has several problems though, such as it assumes the substance is homogenous all the way through. It does not take into account layers of different materials or different densities in a single surface.
Hanrahan-Krueger Multiple Layer Model
This updated model allows you to solve a similar equation for multiple layers. Much like human skin, it does calculations as your light ray travels from one layer to another layer to another layer. Layers are described in terms of their refraction, absorption and scattering coefficients, the depth of the layer, and a Henyey-Greenstien phase function. Again, check out Glassner's book for more information.
Henrik Jensen's BSSRDF
The most advanced and accurate research so far in this area is a now well known paper by Henrik Wann Jensen, inventor of the photon map. This paper is entitled "A Practical Model For Sub-Surface Light Transport".
His experimentation started with using a laser pointer to send a beam of light through a glass of milk (an experiment I recreate below). He noticed how a beam would enter the milk and scatter reasonably uniformly through the material.
After a lot of research with colleagues, he has now proposed a new method for simulating sub-surface scattering. The problem with many previous single scattering methods is they don't work well with highly scattering materials (multi-scattering) such as milk and human skin. These materials tend to scatter light in an isotropic fashion (i.e., uniformly in all directions). Methods for simulating this already exist using diffusion theory. The answer Henrik found was to combine both methods, add a single scattering term to a diffusion term, to get the full effect. His results were physically correct while retaining reasonable speed.
His proposed BSSRDF (Bidirectional Surface Scattering Reflectance Distribution Function) made use of a generalization of the Hanrahan-Krueger Model for the direct component (due to single scattering), and a diffusion approximation (due to multiple scattering). For example, human skin's diffusion term is very high, whereas it's single scattering term is very small. A substance such as marble or wax will have a much larger contribution from the single scattering effect, and consequently less contribution from the diffusion component (in Henrik's experiments, he calculates that the two components are approximately equal to each other for marble). See the leaf section below for a discussion of observing the two different types of scattering.
Lets take a look and discuss a few examples (Thanks to Steve for help with the laser pointer)...
Leaves are another good example of thin translucency. Notice how multiple layers of leaves eventually blocks the light. This is one of the simplest cases since the surface is so thin.
This is a good place to discuss Single vs Multi-scattering. We now shoot out laser light into a leaf. Notice the strong, focused center to the light beam, which is the laser entering one side of the leaf and exiting through the other in a very directed manner, much like light travels through a piece of glass and comes out at a different angle due to refraction. In cg, this would be best approximated with a single scattering component. The soft glow surrounding the leaf would be best approximated with a multiscattering component.
Here's a second leaf, same exposure and settings on the camera, only a thicker leaf from a different kind of plant. Notice there is almost no soft glow, just the strong focused light beam coming through. To replicate this substance in cg, you'd do so with a strong single scattering component and a very small multiscattering component.
Here's some photos of grapes...
First the grapes under normal light.
Now backlit, notice the light coming through the surfaces, illuminating the veins.
Here's a laser going through the grapes. Notice the light moving
from the "entry grape" into the rest of the grapes, which would be best
approximated in cg with a strong multiscatter term.
I've increased the exposure time to see the light transport a bit better. As well as the light diffusing out in an isotropic fashion, notice the specular highlight created on the grape stem from the light scattering inside the grape.
Here's two shots of a laser going through the plum. Despite thinking the skin would be too thick, it's surprising how much light scatters inside.
Note: The plum was very tasty after the experiment was finished.
Here are a few photos of a wax candle. Notice the soft even distribution of light, which makes this material a good candidate for a strong multiscattering component. But interestingly, our experiments showed that wax (when lit by a directed beam of light) would require a strong single scattering component as well.
Also notice the similarity of the look to the experiments I did above using Grant's script. Remember, there are many different methods for simulating a multiscattering component. Henrik uses a dipole point source diffusion approximation. Other simpler solutions can also create good results for multiscattering in some materials, wax being one of them.
Here's a laser being sent through the candle.
Notice the light coming through the substance and lighting the plate.
The following three photos are an action shot. The laser is placed
close to the top of the milk, and you get a very directed light, which
would be best approximated with a single scattering component.
As the laser is moved down so that more if it enters the milk, you'd
want to use a stronger multiscattering component. As an experiment, try
starting with a glass of water, put a laser through it (the result will
be a refraction) and slowly add milk to the water. With a little bit of
milk, you'll see the light scattered somewhat, but it will still remain
reasonably directional, which would be considered a strong single
scatter in cg, and as the water became thicker with more and more milk,
the single scatter would slowly transform into a multiscatter.
Human skin is by far the most complex of these situations, since it is comprised of many layers, each with a very different composition.
For example, after the skin layer comes the fleshy layer. Light that hits this layer and then comes back out of the skin tends to contain a reddish tint. This makes sense, since there's plenty of reddish things to hit under the skin. That is why some people have noticed skin tends to get a little bit redder in the shadow areas. Some people in fact cheat skin by using a shadow / light falloff map to color the skin redder in the shadowed areas.
Another phenomenon that occurs is the softening of shadow areas. Think of it like this, you're a ray of light, you enter the skin, you leave at a slightly different location than where you entered (back-scattering). So if some of the skin is in shadow, and some is receiving direct illumination, it is quite possible to have a light beam enter through a lit area and leave through a shadowed area. This is why areas of shadow on skin don't falloff harshly, it's as though the skin is slightly illuminated in areas that are near shadow / lit areas. However, areas that are totally in shadow remain totally dark, hence this phenomenon is not the same as just making your material self illuminated.
Then notice light that travels all the way through the skin, exiting the other side (forward scattering). Here's a photo of a hand on a light. Notice the light going through the skin. This phenomenon also happens at other parts of the body, especially the ears if light goes behind them. I've seen tricks done before where people animate a self-illumination map in the ear to simulate the look of light traveling through the skin.
Also notice, even though you have bones that block some of the light, you can't make out the bones clearly. This is because the light rays are bouncing all around your skin and flesh molecules, and as discussed with Jensen's work, multiscattered light tends to become isotropic, even on a highly anisotropic material like skin, so the light becomes evenly distributed in all directions. However, as you enter areas of more concentrated bone (not thicker bone, just more of it in a specific location), less light travels through.
And that's all she wrote. As renderers become more advanced, expect to see these sorts of effects become more commonplace in our work. In the meantime, remember, SSS can be simulated in a number of ways, and no two ways work the same, and no one way works perfectly for all situations, so know your methods.