Simulating
The Appearance of Jade
Rui
Wang (rw2p@cs.virginia.edu)
Introduction
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.
Compare
these three (first one: BRDF, second and third one: BSSRDF)
Implementation
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 remeshing method: I took
the model of the dragon (triangle mesh) and generated a distance
field based on pointtotriangle distance; then apply the Marching
Cubes algorithm to reconstruct geometry. After the remeshing,
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 kdtree
for sample points, and Diffusion approximation:
For simplicity, I build kdtree (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.
Results
Here are all the rendering results. All of
them are in resolution 640x480, most of them took 1015 minutes
to render, the final image with a white jade dragon and a reflective
marble stand took about 20 minutes. The dragon
model (remeshed), after remeshing, 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.
