Homan Igehy

*Stanford University*

The purpose of this addendum is to prove that equation (12) in [1] is
correct for an arbitrary surface.

Equation (9) states that for a ray that intersects a surface at
`t`

, the new ray is given by:

Its ray differential is given by (10):
```
d
```**P'**/dx = d**P**/dx + t d**D**/dx + dt/dx **D**

d**D'**/dx = d**D**/dx

In the paper, the value of `dt/dx`

is derived for a plane in
(12), and it is stated without proof that the expression is valid for all
surfaces. Here, we give a simple proof of this fact.
Suppose we have a surface **S**

that is parameterized by
surface coordinates `u`

and `v`

:

It's unit surface normal **N**

is given by the normalized
cross product of its two partial derivatives:

```
```**n** = (d**S**/du) x (d**S**/dv)

**N** = **n** / ||**n**||

The intersection of this surface with the ray defined by **P**

and **D**

is given by the system of equations:
Implictly differentiating with respect to image space coordinate
`x`

, we get:
```
d
```**S**/dx = d**P**/dx + t d**D**/dx + dt/dx **D**

All of the terms in the above equation are known for an intersected
surface except for `dt/dx`

(which is what we are solving for)
and ` d`**S**/dx

. A novel application of the surface normal
will get rid of this `d`**S**/dx

term. Now, the Chain Rule
for multivariate functions tells us that `d`**S**/dx

is a
surface tangent vector given by a linear combination of the two basis
tangent vectors `d`**S**/du

and `d`**S**/dv

:
```
d
```**S**/dx = d**S**/du du/dx + d**S**/dv dv/dx

The `du/dx`

and `dv/dx`

tell us the rate of change
in the local surface parameterizations `u`

and `v`

with respect to the image space coordinate `x`

, but as we shall
see, these values are irrelevant. The dot product of the surface tangent
vector `d`**S**/dx

with the surface normal
**N**

is of course zero:
```
(d
```**S**/dx . **N**) = (d**S**/du du/dx + d**S**/dv dv/dx) . **N**

(d**S**/dx . **N**) = (d**S**/du . **N**) du/dx + (d**S**/dv . **N**) dv/dx

(d**S**/dx . **N**) = (0) du/dx + (0) dv/dx

(d**S**/dx . **N**) = 0

Thus, we can take our original equation:
```
d
```**S**/dx = d**P**/dx + t d**D**/dx + dt/dx **D**

And take its dot product with `N`

to get:
```
0 = (d
```**P**/dx + t d**D**/dx + dt/dx **D**) . **N**

Rearranging, we are left with:
```
dt/dx = - [ (d
```**P**/dx + t d**D**/dx) . **N** ] / (**D** . **N**)

###
References

H. Igehy. Tracing Ray Differentials. *Computer Graphics* (SIGGRAPH 99 Proceedings), **33**, 179-186, 1999.

homan@graphics.stanford.edu