Graphics Reference
In-Depth Information
Consider a point
X
in space at which we wish to know the illumination. This is
frequently on some surface in the scene, but it need not be. The amount of light
incident at
X
from direction
is denoted
L
(
X
,
)
. This implicitly defines a func-
v
v
tion
L
of two variables,
X
and
, which is called the
radiance function,
also
known as the
plenoptic function.
To be clear, the argument
v
denotes the direc-
tion of propagation. If there's a photon passing through the point
P
, traveling in
direction
v
, then
L
(
P
,
)
=
0, while it's quite possible that
L
(
P
,
−
v
)=
0. By
v
v
convention, we'll restrict to the case where
is a
unit
vector. The units of
L
are
v
sr
−
1
. Surface areas are measured in
units of square meters, and steradians are the spherical analog of angular mea-
sure, called
solid angle.
An angle can measure a 1D region on a 2D unit circle
in the plane, and you might express the rate of a quantity passing through that
1D region “per radian.” We measure the amount of energy passing through a 2D
region (a solid angle) on a unit sphere in 3-space “per steradian.”
It is useful to know that radiance is conserved along a ray through empty space.
Thus, if we know
L
(
X
,
m
−
2
watts per square meter-steradian, W
·
·
)
, then we also know
L
(
X
+
t
v
,
)
for
t
>
0 so long as
v
v
there is no occluding object within distance
t
of
X
along that ray.
We distinguish the light that arrives at a point
directly
from a luminaire from light
that arrived
indirectly
after reflecting off some surface in the scene. For example,
near an outdoor swimming pool, sunlight shines directly on the top of your head,
but it also reflects off the water to indirectly strike the bottom of your chin. If
there were no indirect light, then the bottom of your chin would appear completely
unilluminated. The indirect light arises from interaction between the luminaire and
the scene, so we consider it part of the light transport model and not the luminaire
model.
Listing 14.10 gives a typical base class for a set of light-class implementations.
Its methods support the practical aspects of incorporating light sources into a ren-
derer, not the physical aspects of light emission.
Listing 14.10: A base class for all light sources, with trivial implementation
details omitted.
1
2
3
4
5
6
7
8
9
10
11
12
13
/
**
Base class for light sources
*
/
class
Light
{
public
:
const
std::string name()
const
;
virtual
CoordinateFrame cframe()
const
;
/
**
for turning lights on and off
*
/
virtual bool
enabled()
const
;
/
**
true for physically-correct lights
*
/
virtual bool
createsLambertianReflection()
const
;