Cleanup: Cycles: Move F82 Fresnel model into helper function

This commit is contained in:
Lukas Stockner
2025-07-08 01:10:45 +02:00
parent 0ec2878cb6
commit bfcfe730ed
2 changed files with 10 additions and 4 deletions

View File

@@ -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) {

View File

@@ -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)
{