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
scale the radiance properly and add it into L
}
}
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
|