### Color and Radiometry

Digital Image Synthesis
*Yung-Yu Chuang*

10/19/2006

*with slides by Pat Hanrahan and Matt Pharr*

**Radiometry**

• Radiometry: study of the propagation of

electromagnetic radiation in an environment

• Four key quantities: flux, intensity, irradiance and radiance

• These radiometric quantities are described by their spectral power distribution (SPD)

• Human visible light ranges from 370nm to 730nm

**1** **1 0****2**

**1 0****4**

**1 0****6**

**1 0****8**

**1 0****1 0**

**1 0****1 2**

**1 0****1 4**

**1 0****1 6**

**1 0****1 8**

**1 0****2 0**

**1 0****2 2**

**1 0****2 4**

**1 0****2 6**

**1 0****1 6**

**1 0****1 4**

**1 0****1 2**

**1 0****1 0**
**1 0****8**

**1 0****6**

**1 0****4**

**1 0****2**

**1** **1 0****-2**

**1 0****-4**

**1 0****-6**

**1 0****-8**
**Cosm ic**

**Ra y s**
**Ga m m a**

**Ra y s**
**X -Ra y s**

**Ultra -**
**V iolet**
**Infra -**

**Red**
**Ra d io**

**H ea t**
**Pow er**

**7 0 0** **6 0 0** **5 0 0** **4 0 0**

**IR** **R** **G** **B** **UV**

**W a velength (N M )**

**Spectral power distribution**

*fluorescent light (日光燈)*

400nm (bluish)

650nm (red) 550nm

(green)

**Spectral power distribution**

*lemmon skin*

**Color**

• Need a compact, efficient and accurate way to represent functions like these

• Find proper basis functions to map the infinite- dimensional space of all possible SPD functions to a low-dimensional space of coefficients

• For example, B(λ)=1, a bad approximation

**Spectrum**

**• In core/color.***

• Not a plug-in, to use inline for performance

**• Spectrum** stores a fixed number of samples at
a fixed set of wavelengths. Better for smooth
functions.

**#define COLOR_SAMPLE 3**
**class COREDLL Spectrum {**
**public:**

**<arithmetic operations>**

**private:**

**float c[COLOR_SAMPLES];**

**...**

**}**

component-wise

+ - * / comparison…

Why is this possible? Human vision system We actually sample RGB

**Human visual system**

• Tristimulus theory: all visible SPDs can be
accurately represented for human observers
*with three values, x*_{λ}*, y*_{λ} *and z*_{λ}.

*• The basis are the spectral matching curves, *
X(λ), Y(λ) and Z(λ).

### ∫

### ∫

### ∫

=

=

=

λ λ λ λ λ λ

### λ λ

### λ

### λ λ

### λ

### λ λ

### λ

*d*
*Z*

*S*
*z*

*d*
*Y*

*S*
*y*

*d*
*X*

*S*
*x*

) ( ) (

) ( ) (

) ( )

(

**XYZ basis**

**360** **830**

pbrt has discrete versions (sampled every 1nm) of these bases in core/color.cpp

**XYZ color**

• It’s, however, not good for spectral computation. A

product of two SPD’s XYZ values is likely different from the XYZ values of the SPD which is the product of the two original SPDs.

• Hence, we often have to convert our samples (RGB) into XYZ

**void XYZ(float xyz[3]) const {**
**xyz[0] = xyz[1] = xyz[2] = 0.;**

**for (int i = 0; i < COLOR_SAMPLES; ++i) {**
**xyz[0] += XWeight[i] * c[i];**

**xyz[1] += YWeight[i] * c[i];**

**xyz[2] += ZWeight[i] * c[i];**

**}**
**}**

**Conversion between XYZ and RGB**

**float Spectrum::XWeight[COLOR_SAMPLES] = {**
**0.412453f, 0.357580f, 0.180423f**

**};**

**float Spectrum::YWeight[COLOR_SAMPLES] = {**
**0.212671f, 0.715160f, 0.072169f**

**};**

**float Spectrum::ZWeight[COLOR_SAMPLES] = {**
**0.019334f, 0.119193f, 0.950227f**

**};**

**Spectrum FromXYZ(float x, float y, float z) {**
**float c[3];**

**c[0] = 3.240479f * x + -1.537150f * y + -**
**0.498535f * z;**

**c[1] = -0.969256f * x + 1.875991f * y + **
**0.041556f * z;**

**c[2] = 0.055648f * x + -0.204043f * y + **
**1.057311f * z;**

**return Spectrum(c);**

**}**

**Basic radiometry**

• pbrt is based on radiative transfer: study of the transfer of radiant energy based on radiometric principles and operates at the geometric optics level (light interacts with objects much larger than the light’s wavelength)

• It is based on the particle model. Hence,

**diffraction and interference can’t be easily **
accounted for.

**Basic assumptions about light behavior**

**• Linearity: the combined effect of two inputs is **
equal to the sum of effects

**• Energy conservation: scattering event can’t **
produce more energy than they started with

**• No polarization: that is, we only care the **
frequency of light but not other properties

**• No fluorescence or phosphorescence: **

behavior of light at a wavelength doesn’t affect the behavior of light at other wavelengths

**• Steady state: light is assumed to have reached **
equilibrium, so its radiance distribution isn’t
changing over time.

**Fluorescent materials**

**Flux (Φ)**

• Radiant flux, power

• Total amount of energy passing through a surface per unit of time (J/s,W)

**Irradiance (E)**

• Area density of flux (W/m^{2})

*dA*
*E* *d*Φ

=

*4 r*2

*E* π

= Φ

*E* Φ*A*

= *E* Φcos*A* θ

= Lambert’s law Inverse square law

**Angles and Solid Angles**

• Angle

• Solid angle

*The solid angle subtended by a surface is defined as the *
*surface area of a unit sphere covered by the surface's *
*projection onto the sphere.*

*l*
θ = *r*

2

*A*
Ω = *R*

**⇒ circle has 2π radians**

**⇒ sphere has 4π steradians**

**Intensity (I)**

• Flux density per solid angle

• Intensity describes the directional distribution of light

ω
*d*
*I* *d*Φ

=

### ( ) *d* *I* ω *d*

### ω

### ≡ Φ

**Radiance (L)**

• Flux density per unit area per solid angle

• Most frequently used,

remains constant along ray.

• All other quantities can be derived from radiance

⊥

= Φ

*dA*
*d*

*L* *d*

ω

**Calculate irradiance from radiance**

*dA*

### θ

^{d}### ω

### ) ,

### ( *x* ω

*L*

*x*

Ω

### ∫

Φ =

= *L* *x*

### ω θ

*d*

### ω

*dA*
*x* *d*

*E*( ) ( , )cos

**Light meter**

**Irradiance Environment Maps**

**Radiance **

**Environment Map**

**Irradiance **

**Environment Map**

R N

### ( , )

*L* θ ϕ *E* ( , ) θ ϕ

**Differential solid angles**

*d*φ

*d*θ
θ

φ

*r*
sin

*r* θ

Goal: find out the relationship between dω and dθ, dψ

**Differential solid angles**

*d*φ

*d*θ
θ

φ

*r*
sin

*r* θ

2

( )( sin )

sin

*dA* *r d* *r* *d*

*r* *d d*

θ θ φ

θ θ φ

=

=

Goal: find out the relationship between dω and dθ, dψ

By definition, we know that

1 when =

= *dA* *r*

*d*ω

2 sin

*d* *dA* *d d*

ω = *r* = θ θ φ
φ
θ*d*
*d cos*

−

=

**Differential solid angles**

*d*φ

*d*θ
θ

φ

*r*
sin

*r* θ

We can prove that ^{Ω} ^{=}

### ∫

^{=}

2

4

*S*

*d*ω π

**Differential solid angles**

*d*φ

*d*θ
θ

φ

*r*
sin

*r* θ

We can prove that ^{Ω} ^{=}

### ∫

^{=}

2

4

*S*

*d*ω π

π

θ π

θ θ φ

φ θ θ ω

π π

π π

4

cos 2

sin

sin

1 1

0 2

0

0 2

0

2

=

−

=

=

=

= Ω

### ∫

### ∫

### ∫

### ∫

### ∫

### ∫

− *d*

*d*
*d*

*d*
*d*
*d*

*S*

**Isotropic point source**

If the total flux of the light source is Φ,

what is the intensity?

**Isotropic point source**

2

### 4

*S*

*I d* *I*

### ω π

### Φ =

### =

## ∫

*I* 4

### π

### = Φ

If the total flux of the light source is Φ,

what is the intensity?

**Warn’s spotlight**

### θ

If the total flux is Φ, what is the intensity?

### θ

### ω

^{S}*I* ( ) ∝ cos

**Warn’s spotlight**

### θ

If the total flux is Φ, what is the intensity?

### ⎩ ⎨

### ⎧ ≥

### = *otherwise*

*I* *c*

*S*

### 0 ) cos

### (

^{2}

### θ

π### ω θ

### 1 S

### c 2 0

### 1 1

### S c y 2

### cos cos

### c 2 cos

### cos

1 S

1

0 1

0 2

0

### = +

### =

### =

### = +

### =

### = Φ

+

### ∫

### ∫

### ∫

### π π

### θ θ

### π φ

### θ

π

### θ

*y* *y*

*d* *d*

*d*

*c*

^{S}

^{S}### + Φ

### = 2 π

### 1

*c* S

**Irradiance: isotropic point source**

### θ _{h}

_{h}

### Φ

What is the irradiance for this point?

**Irradiance: isotropic point source**

### θ _{h}

_{h}

### Φ

*r*

### θ cos *r* = *h*

2

### cos 4

### 4 *dA* *r*

*d* *dA*

*Id* *dA*

*E* *d* θ

### π ω

### π

### ω Φ

### Φ =

### = Φ =

### =

### π ω 4

### = Φ

### = Φ *d* *I* *d*

Lambert law

Inverse square law

**Irradiance: isotropic point source**

### θ _{h}

_{h}

### Φ

*r*

### θ cos *r* = *h*

2 3 2

### cos 4

### cos 4

### 4 *dA* *r* *h*

*d* *dA*

*Id* *dA*

*E* *d* θ

### π θ

### π ω

### π

### ω Φ

### Φ = Φ =

### = Φ =

### =

### π ω 4

### = Φ

### = Φ

*d*

*I* *d*

**Photometry**

### ( ) ( )

*Y* = ∫ *V* λ *L* λ λ *d*

**Luminance**