Rendering Oil and Moisture on Skin

CS348b Final Project

Sameh Kamel, 8 June 2004


This report describes how I rendered images of wet and oily faces. Here is a picture of my final rendering:

My rendering of an oily face


Reference Face (Viggo Mortensen)

There are three physical characteristics that are important to the look of peoples' faces:

  1. Subsurface scattering under the skin
  2. Skin texture (pores, follicles, etc.)
  3. Oil/moisture on and absorbed by the skin

You can spot the effect of each of the characteristics fairly easily in the reference picture above. The last effect, oil and moisture, hasn't received as much attention from the computer graphics community and so I wanted to explore simulating oil and moisture on skin.

Although one can easily simulate the increased specularity of wet faces by tweaking common specular parameters (like roughness), the overall darkening can only be simulated correctly by considered the effects of refraction through water or oil on the subsurface scattering contributions from the skin. The inclusion of these refractive effects on subsurface scattering produce the non-uniform darkening (a function of the surface normals and angles of incidences of the rays) of objects that occurs in the real world.


I wanted to simulate two effects for this project:
  1. Subsurface Scattering. Implement a fast subsurface scattering simulation as in [1].
  2. Oil/moisture. Simulate the increased specularity and darkening due to total internal reflection as in [2].

Technical Challenges

Faces have complex geometry and thus quickly varying radiance values, so the model has to be very finely sampled. This meant that (a) I had to be careful with my photon map and (b) I had to use a high resolution sampling grid to work with the techniques in [1]. I solved (a) simply by using a spot light that subtends mostly the face (so that most of the photons intersect the face). In the case of (b), most freely downloadable models are lower resolution and so I used subdivision surface algorithms to generate a finer mesh.


Direct Lighting (Photon Map) Subsurface Scattering Included Wet + Subsurface Scattering Oily + Subsurface Scattering


Overall, I am pleased with the quality of the images produced. The wet renderings properly capture the increased specularity and overall darkening of the faces. The specular spots are strongest around the curves of the upper lip and nose, which is physical correct. The darkening also appears to be correct and lends a great deal of realism to the pictures. Altough I am pleased with these images, I do have some ideas for areas of further work:
  1. Non-uniform wetness. My rendering assume a uniform thin film of water or oil. While this is a relatively valid assumption for oil, one often wants to have non-uniform moisture like sweat on a character's brow. This could be accomplished by defining a simple texture map that defines wet spots on the surface, and assigning wetness to the triangles in the model based on the map. One might interpolate to achieve smooth dropoffs in wetness.
  2. Parameters for sweat. I used the scattering parameters for water instead of sweat -- measured data for sweat may increase accuracy.
  3. Combining oil and moisture effects. The techniques in [2] described a single moisture layer, and so I only rendered oily and wet images separately. The technique is probably easily extended to multiple layers, and a multi-layer approach might work. But maybe just having a single layer and calculating combined oil/water scattering parameters is more efficient.

Code and Scene Files

Here I provide my project source code and scene files. The first link contains only the completely new files I wrote for pbrt. Because I made numerous small changes to pbrt's core files, this won't run alone and therefore I also provide here a gzip containing all of pbrt with my changes. As for the scene files, bear in mind that these scenes take a long time (and a lot of memory) to render because of the large number of sample points needed as discussed in the "Technical Challenges" section.

final_proj.tar.gz (just my new files) (pbrt source files, modified by me)

she-spot-direct.pbrt (face with direct lighting)

she-spot.pbrt (face with subsurface scattering)

she-spot-wet.pbrt (face wet with water)

she-spot-oil.pbrt (face wet with oil)

she-spot-geometry3.lrt (head model)


  1. [1] Jensen and Buhler. A Rapid Hierarchical Rendering Technique for Translucent Materials. Proceedings of SIGGRAPH'2002.
  2. [2] Jensen, Legakis, and Dorsey. Rendering of Wet Materials. In Rendering Techniques '99. Springer-Verlag, pages 273-282, 1999.
  3. [3] Jensen, Marchner, Levoy, and Hanrahan. A Practical Model for Subsurface Transport. In Computer Graphics (SIGGRAPH 2001 Proceedings).
  4. [4] Jensen. Realistic Image Synthesis Using Photon Mapping. 2001.

Model Credit

    The face model I used is credited to Anto Matkovic and was downloaded freely from: