Abandoned
Final Project of Image Synthesis Techniques (CS348b) Spring 2005 at Stanford
(Proposal can be found here)

Goal
The goal is to render a dusty dining room (Figure 1). To emphasize the oldness and loneliness, I also want to add the visible sun rays (Figure 2) in the scene.

 Figure 1 Figure 2

Motivations
Imperfect surfaces are common in real life. Many people, however, try to make their rendering "perfect". Thus, it intrigues me to render such imperfect surfaces as dusty tables, chairs and so on.

Methods:
Dust Amount Prediction Function
[1]

The idea is that fall-off of dust amounts is similar to fall-off of specular highlight in Phong illumination model. Therefore, the amount of dust at a point can be computed by:

where K is the adhesion coefficient of the dust, s is the slippiness coefficient of the surface, and theta is the angle between the normal at the point and the dust source.

Dust Surface Reflection Function[2]
The dust amount is then perturbed by Perlin Noise and the perturbed dust amount is the input to Blinn's dust surface reflection function:

where B is the reflectance of the dust layer, w is the reflectance of dust particles, phi(a) is the phase function of dust particles, and tau is the optical depth:

where n is the density of dust, p is the radius of a dust particle.

The reflectance of the point on a surface equals to the reflectance of the dust layer plus the reflectance of the original surface multiplied by transmittance of the dust layer:

 Figure 3 Red matte dragon Figure 4 Red dusty matte dragon

Volumetric Photon Mapping[3]
Photon Shooting:
while (!enoughPhotons) {
shoot a photon ray from a light source;
while (ray is not terminated) {
if photon ray intersects volume before any surface
x = RandomFloat();
march photon ray one step further until transmittance < x       // interatcion occurs
if (albedo > RandomFloat)          // albedo = s/(s+a) where s and a are scattering  &
photon ray is scattered          // absorption coefficients
generate a new direction of photon ray
else
photon ray is absorbed and terminate the photon ray
store the photon in volume photon map
else
store the photon in direct, indirect, or caustic map.            // apply surface photon mapping
}
}

Rendering:
L = Spectrum(0.f);
Until (ray intersects a surface or transmittance is small) {
march ray one step further;               // step size is jittered
compute the indirect scatter-in radiance at the current point from volume photon map
compute the direct scatter-in radiance by sampling the lights
Scale the radiances properly and add them into L;                      // scale factor can be found in [3]
}
if (ray intersects a surface) {
compute the radiance at the intersection point using direct, indirect, and caustic photon maps
}
}

 Figure 5 Volume caustic caused by a glass sphere can be captured by Volumetric Photon Mapping

Modeling
I used AutoCAD to build the scene and was trying to make it similar to the picture as possible as I could. Figure 6 shows the scene with texture mapped furniture
.

 Figure 6 Modeled scene

Results
Figure 7 shows the result of adding dusts to surfaces in the scene. The dusts on the floor and the wall are not uniformly distributed because the dust amount is perturbed by Perlin noise.

Figure 8 shows the final result of a dusty room. It has dusts on the surfaces and in the air. There are several discernible rays because the light source on the left if projected by a black cross like a window whose shadow can be seen on the table.

 Figure 7 Dusty surfaces Figure 8 Dusty rooms with visible rays.

References
[1] Blinn, J. F. Light Reflection Functions for "Simulation of Clouds and Dusty Surfaces." Proceedings of SIGGRAPH '82: 21-29.
[2] Hsu, Siu-Chi and Tien-Tsin Wong. "Simulating Dust Accumulation." IEEE Computer Graphics and Applications 1995 (15)1:18-25
[3] Henrik Wann Jensen and Per H. Christensen, "Efficient Simulation of Light Transport in Scenes with Participating Media using Photon Maps." Proceedings of SIGGRAPH'98, pages 311-320, Orlando, July 1998