Abstract

We present a reflectance model for dielectric cylinders with rough surfaces such as human hair fibers. Our model is energy conserving and can evaluate arbitrarily many orders of internal reflection. Accounting for compression and contraction of specular cones produces a new longitudinal scattering function which is non-Gaussian and includes an off-specular peak. Accounting for roughness in the azimuthal direction leads to an integral across the hair fiber which is efficiently evaluated using a Gaussian quadrature. Solving cubic equations is avoided, caustics are included in the model in a consistent fashion, and more accurate colors are predicted by considering many internal pathways.

  • Following presentation by Eugene d'Eon of the paper in Prague I can recall two questions:

    1) Ravi Ramamoorthi: "It seems that there is an analogous relationship between the Marschner model and the spherical Gaussian M function in your paper much like the difference between Blinn Phong and Phong specular lobes for surfaces". Response: "Hmmm, I'm not sure."

    2) Marcos Fajardo: "We found an importance sampling scheme for the Marschner model. Can you comment on importance sampling for your new model?" Response: "No, haven't thought about it." (However, a method was later published in a SIGGRAPH 2013 technical brief that importance samples it completely and analytically).

    Reviewed by
    Ongoing discussion
  • For very narrow spherical Gaussians, numerical issues can arise in finite precision floating calculations. We found the following special cases useful in our implementation. To evaluate the $M$ function when the variance is low, $v < 0.1$, we use $$ M\left(v,\theta _{\text{cone}},\theta _o\right) \approx \exp \left(\log \left(I_0\left(a\right)\right)+b-\frac{1}{v}+0.6931+\log \left(\frac{1}{2 v}\right)\right) $$ where $a = \cos \theta _{\text{cone}} \cos \theta_o / v$ and $b = \sin \theta _{\text{cone}} \sin \theta_o / v$. The log of the Bessel function can also be problematic for large arguments for we use the following special case for $\log( I_0(x))$ when $x > 12$: $$ \log( I_0(x)) \approx x + 0.5 \left( -\log ( 2 \pi ) + \log \frac{1}{x} + \frac{1}{8x} \right). $$

    Reviewed by
    Ongoing discussion (1 comment - click to toggle)
    • Eugene d'Eon | 6 years, 2 months ago

      The idea to use the slide rule trick was due to Geoffrey Irving. The further expansions were derived by Eugene d'Eon.