Cleanup: Cycles: Move F82 Fresnel model into helper function
This commit is contained in:
@@ -258,10 +258,7 @@ ccl_device_forceinline void microfacet_fresnel(KernelGlobals kg,
|
||||
* Essentially, this is the usual Schlick Fresnel with an additional cosI*(1-cosI)^6
|
||||
* term which modulates the reflectivity around acos(1/7) degrees (ca. 82°). */
|
||||
ccl_private FresnelF82Tint *fresnel = (ccl_private FresnelF82Tint *)bsdf->fresnel;
|
||||
const float mu = saturatef(1.0f - cos_theta_i);
|
||||
const float mu5 = sqr(sqr(mu)) * mu;
|
||||
const Spectrum F_schlick = mix(fresnel->f0, one_spectrum(), mu5);
|
||||
*r_reflectance = saturate(F_schlick - fresnel->b * cos_theta_i * mu5 * mu);
|
||||
*r_reflectance = fresnel_f82(cos_theta_i, fresnel->f0, fresnel->b);
|
||||
*r_transmittance = zero_spectrum();
|
||||
}
|
||||
else if (bsdf->fresnel_type == MicrofacetFresnel::GENERALIZED_SCHLICK) {
|
||||
|
||||
@@ -153,6 +153,15 @@ ccl_device_inline Spectrum fresnel_f82_B(const Spectrum F0, const Spectrum F82)
|
||||
return (7.0f / (f5 * f)) * (F_schlick - F82);
|
||||
}
|
||||
|
||||
/* Evaluate the F82 metallic model for the given parameters. */
|
||||
ccl_device_inline Spectrum fresnel_f82(const float cosi, const Spectrum F0, const Spectrum B)
|
||||
{
|
||||
const float s = saturatef(1.0f - cosi);
|
||||
const float s5 = sqr(sqr(s)) * s;
|
||||
const Spectrum F_schlick = mix(F0, one_spectrum(), s5);
|
||||
return saturate(F_schlick - B * cosi * s5 * s);
|
||||
}
|
||||
|
||||
/* Approximates the average single-scattering Fresnel for a physical conductor. */
|
||||
ccl_device_inline Spectrum fresnel_conductor_Fss(const Spectrum eta, const Spectrum k)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user