5
$\begingroup$

I'm trying to implement Cook-Torrance BRDF and had previously bookmarked this question as it looked very well thought out. Going through it, I'm confused about the Fresnel equation. The author has the equation:

$$ F = c_{spec} + (1 - c_{spec}) (1 - \mathbf{w_i} \cdot \mathbf{h})^5 \tag{1} $$

and says "$c_{spec}$ is the specular color"

Looking elsewhere, I can see this equation is Schlick's approximation, but in other references, $c_{spec}$ is called $R_0$ and is $\left(\frac{n_1-n_2}{n_1+n_2}\right)^2$ which is clearly a number based upon refractive indices and not a colour.

Does equation $(1)$ make sense with colour?

$\endgroup$
1
  • $\begingroup$ Brilliant. I have tried to implement gold appearance but don't think it looks right and have been reading more about Fresnel, extinction coefficients, etc. I'm not on this full time so it's going slow. Thanks. $\endgroup$
    – PeteUK
    Mar 19, 2017 at 22:32

1 Answer 1

6
$\begingroup$

Yes, because refractive index can vary with wavelength. This is the origin of colored specular reflection in metals such as gold and copper; most other materials have essentially uncolored specular. At each wavelength, the specular reflectance at normal incidence is related to the refractive index at that wavelength according to the formula you mentioned.

In case you're interested, the site refractiveindex.info has data tables and graphs of refractive index versus wavelength for various materials. For example, here's gold:

refractive index of gold vs wavelength

$\endgroup$
3
  • $\begingroup$ Thanks. So to come up with the specular colour for gold, I'd need to lookup the wavelengths for red, green, and blue components. With those wavelengths I lookup the corresponding refractive indices for gold. Then plug them in the formula for $R_0$ and those 3 values are the components of the specular colour? $\endgroup$
    – PeteUK
    Feb 25, 2017 at 0:56
  • 2
    $\begingroup$ @PeteUK Yep, as an easy way, you can use representative wavelengths for R, G, B like that. Probably a more accurate way is to integrate $R_0(\lambda)$, multiplied by one of the CIE color matching functions, over wavelength. $\endgroup$ Feb 25, 2017 at 0:59
  • $\begingroup$ @ChristianPagot Perhaps it's for storing in a sRGB specular color texture. The GPU would then decode to linear RGB when it's sampled. $\endgroup$ Feb 27, 2017 at 4:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.