Final Project - Writeup

Simulating The Appearance of Jade

Rui Wang (


The purpose of this project is to simulate the appearance of jade (white or green). The project proposal can be found here.

I have implemented 'a hierarchical technique for rendering translucent materials' by Henrik et. al. The technique approximates subsurface scattering light transport using BSSRDF. Different from assumption by traditional BRDFs that reflection occurs at the same spot of incident light, BSSRDFs suppose light can hit on one spot, go into the material, scattered and then coming out at different spots on the surface. Because of this, traditional rendering with BRDF is not capable of capturing the soft and color bleeding effect present in translucent materials such as marble and jade. Below are rendering of the Stanford dragon model with both BRDFs and BSSRDFs.

dragon_white_brdf.bmp hard edge, no color bleeding.

soft edge, color bleeding (e.g. from back of the tail). glossy surface. produces an appearance of white jade

dragon_green_brdf.bmp hard edge, no color bleeding.

produces an appearance of green jade

Compare these three (first one: BRDF, second and third one: BSSRDF)



Details of technique can be found in Henrik's paper. Here is a brief description of my implementation in lrt:

1) Uniformly choosing sample points on arbitrary geometry surface:
Instead of implementing the point repulsion algorithm mentioned in the paper, I used distance field re-meshing method: I took the model of the dragon (triangle mesh) and generated a distance field based on point-to-triangle distance; then apply the Marching Cubes algorithm to reconstruct geometry. After the re-meshing, vertices are distributed very uniformly across the surface. And the vertices are used directly as sample points. I also created the implicit surface for a marble stand (see result images below) that has nice curved edge.

2) Evaluate irradiance at sample points:
Instead of using photon maps for irradiance evaluation, I did something simpler but faster: I only evaluate direct illumination on the translucent objects. It sums up irradiance contributions from each light source for every sample point, and it takes only a few seconds even if there are millions of sample points. Result shows it's very effictive, since no indirect illumination is designed for the translucent objects.

3) Building kd-tree for sample points, and Diffusion approximation:
For simplicity, I build kd-tree (in the paper they use octree) for sample points, and use the same kind of thresholding (as in the paper) for hierarchical diffusion approximation. Strictly, there is another single scattering term in BSSRDF derived from subsurface light transport. But usually for highly translucent materials, multple scattering term (the diffusion approximation) dorminates. I didn't have time to implement the single scattering term, hopefully I will do it later.

4) Finding the translucency parameters for white and green jade:
The purpose of this project is to simulating the appearance of jade (white or green). The correct parameters for jade are not listed in the paper, so I experimented a lot to find them. I should say I am more successful at simulating white jade than green jade. Mainly because it's fairly easy to get 'white jade' looking starting from 'marble' (for which the parameters are known in the paper). I got interesting results by trying different parameters. Below is a 'ketchup' dragon.

5) Adding Specular Reflection:
I finally set up a simple scene to put the dragon: a marble stand (also translucent) and a background of ancient Chinese painting (the riverscene painting). I added specular reflection to the marble stand so that it looks more realistic.


Here are all the rendering results. All of them are in resolution 640x480, most of them took 10-15 minutes to render, the final image with a white jade dragon and a reflective marble stand took about 20 minutes. The dragon model (re-meshed), after re-meshing, contains 254,523 vertices, and the marble stand (created from implicit surface) contains 136,728 vertices.

I also have a collection of 'boned' images, but some of them are pretty cool. Some of them are rendered with not enough sample points; some of them have sample points totaly screwed (not on the geometry surface). Enjoy them here.