<p>The book distinguishes a spectral power distribution from a spectral response curve because they are not the same, they are <em>adjoint</em>.</p>
<p>The thing about adjoints that makes them a little tricky to wrap your head around is that they typically have the same representation in software, but keeping them distinct is extremely important in computer graphics.</p>
<p>Another example is that the the adjoint of a <em>photon</em> is a <em>ray</em>. A photon and a ray have almost the same data: an origin, a direction, and something that represents a spectrum; in the case of a photon, it &quot;carries&quot; spectral power, but in the case of a ray, it &quot;carries&quot; importance, which is a spectral response curve.</p>
<p>(Note that PBRT's ray implementation doesn't actually &quot;carry&quot; importance, rather this is calculated in the integrators. See <code>beta</code> in pbrt-v3's PathIntegrator, for example.)</p>
<p>In the real world, photons are emitted from light sources, and bounce around the universe until some of them hit your eye or a camera. In modern ray tracing, we reverse this, emitting importance from the camera and bouncing it around the scene until we hit a light source.</p>
<p>The term &quot;adjoint&quot; <a href="https://en.wikipedia.org/wiki/Adjugate_matrix" rel="nofollow noreferrer">comes from linear algebra</a>. If <span class="math-container">$A$</span> is a matrix and <span class="math-container">$x$</span> and <span class="math-container">$y$</span> are vectors, then <span class="math-container">$A^\dagger$</span> is the adjoint of <span class="math-container">$A$</span>. It has the property that:</p>
<p><span class="math-container">$$ x \cdot (Ay) = (A^\dagger x) \cdot y$$</span></p>
<p>Intuitively, the adjoint lets you shift a transformation from one side of a dot product to the other, just like how ray tracing shifts the interaction calculations from the &quot;light&quot; side to the &quot;camera&quot; side.</p>
<p>This is covered in <a href="https://graphics.pixar.com/library/Adjoints/" rel="nofollow noreferrer">Per Christiansen's 2003 paper</a>, which is worth a read and a re-read.</p>
<p>Just as an aside, one more example that occasionally comes up is from differential geometry: the adjoint of a <em>vector</em> is a <em>1-form</em>. If you implemented this in code, a 1-form has exactly the same representation as a vector: it's three floats. But it means something different.</p>

CC BY-SA 4.0
2021-06-06T15:19:53.327Z
Thank you for your insight! Do you think my understanding is correct though? The one with the equations.
Peter
CC BY-SA 4.0
2021-06-07T11:36:30.743Z
Your understanding is correct for points inside the gamut of both RGB and XYZ.  For points outside, some of those coefficients may go negative. Essentially, this is a change of basis in a vector space, and $\int f(\lambda) g(\lambda)\,d\lambda$ is the inner product of that space.
Pseudonym
CC BY-SA 4.0
2021-06-05T13:06:53.847Z
2021-06-05T13:06:53.847Z
Pseudonym
<p>I'm reading section 5.2 of pbrt 3rd edition and came across the part where they explain the concept of RGB colors.</p>
<blockquote>
<p>When we display an RGB color on a display, the spectrum that is
actually displayed is basically determined by <strong>the weighted sum of
three spectral response curves</strong>, one for each of red, green, and blue,
as emitted by the display’s phosphors, LED or LCD elements, or plasma
cells.</p>
</blockquote>
<p>Then there's also this part.</p>
<p><a href="https://i.sstatic.net/lwbT4.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/lwbT4.png" alt="enter image description here" /></a></p>
<p>So my understanding so far is this.</p>
<p>Just like a SPD can be expressed from the weighted sum of spectral matching curves <span class="math-container">$X(\lambda), Y(\lambda), Z(\lambda)$</span> as in <span class="math-container">$S(\lambda) = x_{\lambda}X(\lambda) + y_{\lambda}Y(\lambda) + z_{\lambda}Z(\lambda)$</span>, it can also be expressed with the weighted sum of spectral response curves: <span class="math-container">$S(\lambda) = rR(\lambda) + gG(\lambda) + bB(\lambda)$</span></p>
<p>Is my understanding correct? If it's so, the point I don't get is why the book is using all sorts of mixed, confusing terms like &quot;spectral matching curves&quot;, &quot;spectral power distribution&quot;, and &quot;spectral response curves&quot;. I would really appreciate if someone could clear my confusion. Thanks in advance.</p>

<lighting><color><color-science><spectral><pbrt>
Is spectral response curve and spectral power distribution the same thing?
Peter
# Is spectral response curve and spectral power distribution the same thing?

(Asked by: username_0 on 2021-06-02)

I'm reading section 5.2 of pbrt 3rd edition and came across the part where they explain the concept of RGB colors.

> When we display an RGB color on a display, the spectrum that is
> actually displayed is basically determined by **the weighted sum of
> three spectral response curves**, one for each of red, green, and blue,
> as emitted by the display’s phosphors, LED or LCD elements, or plasma
> cells.

Then there's also this part.

[![enter image description here](https://i.sstatic.net/lwbT4.png)](https://i.sstatic.net/lwbT4.png)

So my understanding so far is this.

Just like a SPD can be expressed from the weighted sum of spectral matching curves $X(\lambda), Y(\lambda), Z(\lambda)$ as in $S(\lambda) = x\_{\lambda}X(\lambda) + y\_{\lambda}Y(\lambda) + z\_{\lambda}Z(\lambda)$, it can also be expressed with the weighted sum of spectral response curves: $S(\lambda) = rR(\lambda) + gG(\lambda) + bB(\lambda)$

Is my understanding correct? If it's so, the point I don't get is why the book is using all sorts of mixed, confusing terms like "spectral matching curves", "spectral power distribution", and "spectral response curves". I would really appreciate if someone could clear my confusion. Thanks in advance.

**Tags:** lighting, color, color-science, spectral, pbrt


---

## 1 answers

### Answer by username_1 on 2021-06-05. Score: 1 | Accepted answer

The book distinguishes a spectral power distribution from a spectral response curve because they are not the same, they are *adjoint*.

The thing about adjoints that makes them a little tricky to wrap your head around is that they typically have the same representation in software, but keeping them distinct is extremely important in computer graphics.

Another example is that the the adjoint of a *photon* is a *ray*. A photon and a ray have almost the same data: an origin, a direction, and something that represents a spectrum; in the case of a photon, it "carries" spectral power, but in the case of a ray, it "carries" importance, which is a spectral response curve.

(Note that PBRT's ray implementation doesn't actually "carry" importance, rather this is calculated in the integrators. See `beta` in pbrt-v3's PathIntegrator, for example.)

In the real world, photons are emitted from light sources, and bounce around the universe until some of them hit your eye or a camera. In modern ray tracing, we reverse this, emitting importance from the camera and bouncing it around the scene until we hit a light source.

The term "adjoint" [comes from linear algebra](https://en.wikipedia.org/wiki/Adjugate_matrix). If $A$ is a matrix and $x$ and $y$ are vectors, then $A^\dagger$ is the adjoint of $A$. It has the property that:

$$ x \cdot (Ay) = (A^\dagger x) \cdot y$$

Intuitively, the adjoint lets you shift a transformation from one side of a dot product to the other, just like how ray tracing shifts the interaction calculations from the "light" side to the "camera" side.

This is covered in [Per Christiansen's 2003 paper](https://graphics.pixar.com/library/Adjoints/), which is worth a read and a re-read.

Just as an aside, one more example that occasionally comes up is from differential geometry: the adjoint of a *vector* is a *1-form*. If you implemented this in code, a 1-form has exactly the same representation as a vector: it's three floats. But it means something different.

> **Comments:**
> **username_0**: Thank you for your insight! Do you think my understanding is correct though? The one with the equations.  
> **username_1**: Your understanding is correct for points inside the gamut of both RGB and XYZ.  For points outside, some of those coefficients may go negative. Essentially, this is a change of basis in a vector space, and $\int f(\lambda) g(\lambda)\,d\lambda$ is the inner product of that space.  

---

