<p><a href="http://graphics.stanford.edu/papers/veach_thesis/chapter8.ps" rel="nofollow noreferrer">http://graphics.stanford.edu/papers/veach_thesis/chapter8.ps</a></p>

<p>In chapter 8 of his thesis which he talks about the three-point form of the transport equations, equation (8.1) in particular, it seems the integrand will expand into something that contains a <span class="math-container">$\cos^2(\theta_i^\prime)$</span> term. One of the cosine terms comes from the <span class="math-container">$G$</span>, and the other one comes the BSDF <span class="math-container">$f_s$</span> which is defined with respect to the projected solid angle.</p>

<p>When I look at PBRT V3's implementation, BSDF is defined upon solid angle. However, the geometry term <span class="math-container">$G$</span> is the same as Veach's.</p>

<pre class="lang-cpp prettyprint-override"><code>Spectrum G(const Scene &amp;scene, Sampler &amp;sampler, const Vertex &amp;v0,
           const Vertex &amp;v1) {
    Vector3f d = v0.p() - v1.p();
    Float g = 1 / d.LengthSquared();
    d *= std::sqrt(g);
    if (v0.IsOnSurface()) g *= AbsDot(v0.ns(), d);
    if (v1.IsOnSurface()) g *= AbsDot(v1.ns(), d);
    VisibilityTester vis(v0.GetInteraction(), v1.GetInteraction());
    return g * vis.Tr(scene, sampler);
}
</code></pre>

<p>This implies there is only one <span class="math-container">$\cos(\theta_i^\prime)$</span> term. Am I missing something?</p>

CC BY-SA 4.0
2019-11-17T17:37:00.723Z
Where are you getting this $\cos^2(\theta_i')$ from? There is only one $\cos(\theta_i')$ and $\cos(\theta_o)$ per path segment. If the BSDF is defined with respect to solid angle then the extra cosine is bundled with the geometry term, which seems to be the case for PBRT.
Hubble
CC BY-SA 4.0
2019-11-17T17:47:46.140Z
The PBRT's implementation indeed contains only one consine term. However, in Veach's paper, the BSDF is defined with respect to projected solid angle (http://graphics.stanford.edu/papers/veach_thesis/chapter3.ps equation 3.12), and the geometry term in chapter 8 contains one extra consine term.
Davis
CC BY-SA 4.0
2019-11-18T09:54:38.167Z
Cos in renderequation cancels it out?
joojaa
CC BY-SA 4.0
2019-11-22T16:01:20.273Z
@joojaa Can you elaborate?
Davis
<pathtracing>
Questions in Veach path-space formulation
Davis
# Questions in Veach path-space formulation

(Asked by: username_0 on 2019-11-16)

<http://graphics.stanford.edu/papers/veach_thesis/chapter8.ps>

In chapter 8 of his thesis which he talks about the three-point form of the transport equations, equation (8.1) in particular, it seems the integrand will expand into something that contains a $\cos^2(\theta\_i^\prime)$ term. One of the cosine terms comes from the $G$, and the other one comes the BSDF $f\_s$ which is defined with respect to the projected solid angle.

When I look at PBRT V3's implementation, BSDF is defined upon solid angle. However, the geometry term $G$ is the same as Veach's.

```cpp
Spectrum G(const Scene &scene, Sampler &sampler, const Vertex &v0,
           const Vertex &v1) {
    Vector3f d = v0.p() - v1.p();
    Float g = 1 / d.LengthSquared();
    d *= std::sqrt(g);
    if (v0.IsOnSurface()) g *= AbsDot(v0.ns(), d);
    if (v1.IsOnSurface()) g *= AbsDot(v1.ns(), d);
    VisibilityTester vis(v0.GetInteraction(), v1.GetInteraction());
    return g * vis.Tr(scene, sampler);
}

```

This implies there is only one $\cos(\theta\_i^\prime)$ term. Am I missing something?

**Tags:** pathtracing

> **Comments:**
> **username_1**: Where are you getting this $\cos^2(\theta_i')$ from? There is only one $\cos(\theta_i')$ and $\cos(\theta_o)$ per path segment. If the BSDF is defined with respect to solid angle then the extra cosine is bundled with the geometry term, which seems to be the case for PBRT.  
> **username_0**: The PBRT's implementation indeed contains only one consine term. However, in Veach's paper, the BSDF is defined with respect to projected solid angle (http://graphics.stanford.edu/papers/veach_thesis/chapter3.ps equation 3.12), and the geometry term in chapter 8 contains one extra consine term.  
> **username_2**: Cos in renderequation cancels it out?  
> **username_0**: @username_2 Can you elaborate?  

---

## 0 answers

