Blender V4.5
bsdf_util.h File Reference
#include "kernel/types.h"
#include "kernel/util/colorspace.h"
#include "util/color.h"

Go to the source code of this file.

Functions

CCL_NAMESPACE_BEGIN ccl_device float2 fresnel_dielectric_polarized (float cos_theta_i, const float eta, ccl_private float *r_cos_theta_t, ccl_private float2 *r_phi)
ccl_device_forceinline float fresnel_dielectric (const float cos_theta_i, const float eta, ccl_private float *r_cos_theta_t)
ccl_device_inline float3 refract_angle (const float3 incident, const float3 normal, const float cos_theta_t, const float inv_eta)
ccl_device float fresnel_dielectric_cos (const float cosi, const float eta)
ccl_device_inline float fresnel_dielectric_Fss (const float eta)
ccl_device Spectrum fresnel_conductor (const float cosi, const Spectrum eta, const Spectrum k)
ccl_device_inline Spectrum fresnel_f82_Fss (const Spectrum F0, const Spectrum B)
ccl_device_inline Spectrum fresnel_f82tint_B (const Spectrum F0, const Spectrum tint)
ccl_device_inline Spectrum fresnel_f82_B (const Spectrum F0, const Spectrum F82)
ccl_device_inline Spectrum fresnel_conductor_Fss (const Spectrum eta, const Spectrum k)
ccl_device float ior_from_F0 (const float f0)
ccl_device float F0_from_ior (const float ior)
ccl_device float schlick_fresnel (const float u)
ccl_device_forceinline Spectrum interpolate_fresnel_color (const float3 L, const float3 H, const float ior, Spectrum F0)
ccl_device float3 ensure_valid_specular_reflection (const float3 Ng, const float3 I, float3 N)
ccl_device float3 maybe_ensure_valid_specular_reflection (ccl_private ShaderData *sd, const float3 N)
ccl_device_inline float bsdf_principled_hair_albedo_roughness_scale (const float azimuthal_roughness)
ccl_device_inline Spectrum bsdf_principled_hair_sigma_from_reflectance (const Spectrum color, const float azimuthal_roughness)
ccl_device_inline Spectrum bsdf_principled_hair_sigma_from_concentration (const float eumelanin, const float pheomelanin)
ccl_device_inline Spectrum closure_layering_weight (const Spectrum layer_albedo, const Spectrum weight)
ccl_device_inline Spectrum iridescence_lookup_sensitivity (const float OPD, const float shift)
ccl_device_inline float3 iridescence_airy_summation (const float T121, const float R12, const float R23, const float OPD, const float phi)
ccl_device Spectrum fresnel_iridescence (KernelGlobals kg, float eta1, float eta2, float eta3, float cos_theta_1, const float thickness, ccl_private float *r_cos_theta_3)

Function Documentation

◆ bsdf_principled_hair_albedo_roughness_scale()

ccl_device_inline float bsdf_principled_hair_albedo_roughness_scale ( const float azimuthal_roughness)

Definition at line 294 of file bsdf_util.h.

References ccl_device_inline, and x.

Referenced by bsdf_hair_chiang_albedo(), and bsdf_principled_hair_sigma_from_reflectance().

◆ bsdf_principled_hair_sigma_from_concentration()

ccl_device_inline Spectrum bsdf_principled_hair_sigma_from_concentration ( const float eumelanin,
const float pheomelanin )

Definition at line 309 of file bsdf_util.h.

References ccl_device_inline, make_float3(), and rgb_to_spectrum().

Referenced by svm_node_closure_bsdf().

◆ bsdf_principled_hair_sigma_from_reflectance()

ccl_device_inline Spectrum bsdf_principled_hair_sigma_from_reflectance ( const Spectrum color,
const float azimuthal_roughness )

Definition at line 302 of file bsdf_util.h.

References bsdf_principled_hair_albedo_roughness_scale(), and log.

Referenced by svm_node_closure_bsdf().

◆ closure_layering_weight()

ccl_device_inline Spectrum closure_layering_weight ( const Spectrum layer_albedo,
const Spectrum weight )

◆ ensure_valid_specular_reflection()

ccl_device float3 ensure_valid_specular_reflection ( const float3 Ng,
const float3 I,
float3 N )

◆ F0_from_ior()

ccl_device float F0_from_ior ( const float ior)

◆ fresnel_conductor()

ccl_device Spectrum fresnel_conductor ( const float cosi,
const Spectrum eta,
const Spectrum k )

Definition at line 114 of file bsdf_util.h.

References ccl_device, and make_spectrum.

Referenced by fresnel_conductor_Fss(), and microfacet_fresnel().

◆ fresnel_conductor_Fss()

ccl_device_inline Spectrum fresnel_conductor_Fss ( const Spectrum eta,
const Spectrum k )

◆ fresnel_dielectric()

ccl_device_forceinline float fresnel_dielectric ( const float cos_theta_i,
const float eta,
ccl_private float * r_cos_theta_t )

◆ fresnel_dielectric_cos()

◆ fresnel_dielectric_Fss()

◆ fresnel_dielectric_polarized()

CCL_NAMESPACE_BEGIN ccl_device float2 fresnel_dielectric_polarized ( float cos_theta_i,
const float eta,
ccl_private float * r_cos_theta_t,
ccl_private float2 * r_phi )

◆ fresnel_f82_B()

ccl_device_inline Spectrum fresnel_f82_B ( const Spectrum F0,
const Spectrum F82 )

Definition at line 148 of file bsdf_util.h.

References ccl_device_inline, mix, one_spectrum, and sqr().

Referenced by fresnel_conductor_Fss().

◆ fresnel_f82_Fss()

ccl_device_inline Spectrum fresnel_f82_Fss ( const Spectrum F0,
const Spectrum B )

Definition at line 127 of file bsdf_util.h.

References B, ccl_device_inline, mix, and one_spectrum.

Referenced by bsdf_microfacet_setup_fresnel_f82_tint(), and fresnel_conductor_Fss().

◆ fresnel_f82tint_B()

ccl_device_inline Spectrum fresnel_f82tint_B ( const Spectrum F0,
const Spectrum tint )

Definition at line 133 of file bsdf_util.h.

References ccl_device_inline, mix, one_spectrum, and sqr().

Referenced by bsdf_microfacet_setup_fresnel_f82_tint().

◆ fresnel_iridescence()

ccl_device Spectrum fresnel_iridescence ( KernelGlobals kg,
float eta1,
float eta2,
float eta3,
float cos_theta_1,
const float thickness,
ccl_private float * r_cos_theta_3 )

◆ interpolate_fresnel_color()

ccl_device_forceinline Spectrum interpolate_fresnel_color ( const float3 L,
const float3 H,
const float ior,
Spectrum F0 )

◆ ior_from_F0()

ccl_device float ior_from_F0 ( const float f0)

◆ iridescence_airy_summation()

ccl_device_inline float3 iridescence_airy_summation ( const float T121,
const float R12,
const float R23,
const float OPD,
const float phi )

◆ iridescence_lookup_sensitivity()

ccl_device_inline Spectrum iridescence_lookup_sensitivity ( const float OPD,
const float shift )

Evaluate the sensitivity functions for the Fourier-space spectral integration. The code here uses the Gaussian fit for the CIE XYZ curves that is provided in the reference implementation. For details on what this actually represents, see the paper. In theory we should pre-compute the sensitivity functions for the working RGB color-space, remap them to be functions of (light) frequency, take their Fourier transform and store them as a LUT that gets looked up here. In practice, using the XYZ fit and converting the result from XYZ to RGB is easier.

Definition at line 345 of file bsdf_util.h.

References ccl_device_inline, cos, cosf, exp, expf, M_2PI_F, make_float3(), pos, sqr(), sqrt, and float3::x.

Referenced by iridescence_airy_summation().

◆ maybe_ensure_valid_specular_reflection()

◆ refract_angle()

ccl_device_inline float3 refract_angle ( const float3 incident,
const float3 normal,
const float cos_theta_t,
const float inv_eta )

◆ schlick_fresnel()

ccl_device float schlick_fresnel ( const float u)

Definition at line 177 of file bsdf_util.h.

References ccl_device, and clamp().