25 const float eta_cos_theta_t_sq =
sqr(eta) - (1.0f -
sqr(cos_theta_i));
26 if (eta_cos_theta_t_sq <= 0) {
42 cos_theta_i =
fabsf(cos_theta_i);
44 const float cos_theta_t = -
safe_sqrtf(eta_cos_theta_t_sq) / eta;
47 *r_cos_theta_t = cos_theta_t;
51 const float r_s = (cos_theta_i + eta * cos_theta_t) / (cos_theta_i - eta * cos_theta_t);
52 const float r_p = (cos_theta_t + eta * cos_theta_i) / (eta * cos_theta_i - cos_theta_t);
74 const float cos_theta_t,
77 return (inv_eta *
dot(normal, incident) + cos_theta_t) * normal - inv_eta * incident;
84 float c =
fabsf(cosi);
85 float g = eta * eta - 1 + c * c;
88 float A = (g - c) / (g + c);
89 float B = (c * (g + c) - 1) / (c * (g - c) + 1);
90 return 0.5f * A * A * (1 +
B *
B);
101 Spectrum Rparl2 = (tmp - (2.0f * eta * cosi) + one) / (tmp + (2.0f * eta * cosi) + one);
102 Spectrum Rperp2 = (tmp_f - (2.0f * eta * cosi) + cosi2) / (tmp_f + (2.0f * eta * cosi) + cosi2);
103 return (Rparl2 + Rperp2) * 0.5f;
108 const float sqrt_f0 =
sqrtf(
clamp(f0, 0.0f, 0.99f));
109 return (1.0f + sqrt_f0) / (1.0f - sqrt_f0);
114 return sqr((ior - 1.0f) / (ior + 1.0f));
119 float m =
clamp(1.0f - u, 0.0f, 1.0f);
148 const float Iz =
dot(
I, Ng);
152 const float threshold =
min(0.9f * Iz, 0.01f);
153 if (
dot(Ng,
R) >= threshold) {
201 const float Ix =
dot(
I,
X);
203 const float a =
sqr(Ix) +
sqr(Iz);
204 const float b = 2.0f * (a + Iz * threshold);
205 const float c =
sqr(threshold + Iz);
210 const float Nz2 = (Ix < 0) ? 0.25f * (
b +
safe_sqrtf(
sqr(
b) - 4.0f * a * c)) / a :
216 return Nx *
X + Nz * Ng;
234 const float azimuthal_roughness)
236 const float x = azimuthal_roughness;
237 return (((((0.245f * x) + 5.574f) * x - 10.73f) * x + 2.532f) * x - 0.215f) * x + 5.969f;
245 return sigma * sigma;
249 const float pheomelanin)
286 float phase =
M_2PI_F * OPD * 1e-9f;
292 xyz.
x += 1.64408e-8f *
cosf(2.2399e+06f * phase + shift) *
expf(-4.5282e+09f *
sqr(phase));
293 return xyz / 1.0685e-7f;
304 float R123 = R12 * R23;
305 float r123 =
sqrtf(R123);
306 float Rs =
sqr(T121) * R23 / (1.0f - R123);
310 float Cm = (Rs - T121);
312 for (
int m = 1; m < 4; m++) {
329 if (thickness < 30.0f) {
344 float OPD = -2.0f * eta2 * thickness * cos_theta_2;
MINLINE float safe_sqrtf(float a)
ccl_device_forceinline Spectrum interpolate_fresnel_color(float3 L, float3 H, float ior, Spectrum F0)
ccl_device float fresnel_dielectric_cos(float cosi, float eta)
ccl_device float F0_from_ior(float ior)
ccl_device_inline Spectrum bsdf_principled_hair_sigma_from_reflectance(const Spectrum color, const float azimuthal_roughness)
ccl_device_inline float bsdf_principled_hair_albedo_roughness_scale(const float azimuthal_roughness)
ccl_device Spectrum fresnel_conductor(float cosi, const Spectrum eta, const Spectrum k)
ccl_device Spectrum fresnel_iridescence(KernelGlobals kg, float eta1, float eta2, float eta3, float cos_theta_1, float thickness, ccl_private float *r_cos_theta_3)
ccl_device_forceinline float fresnel_dielectric(float cos_theta_i, float eta, ccl_private float *r_cos_theta_t)
ccl_device float3 maybe_ensure_valid_specular_reflection(ccl_private ShaderData *sd, float3 N)
ccl_device_inline Spectrum bsdf_principled_hair_sigma_from_concentration(const float eumelanin, const float pheomelanin)
ccl_device_inline float3 refract_angle(const float3 incident, const float3 normal, const float cos_theta_t, const float inv_eta)
CCL_NAMESPACE_BEGIN ccl_device float2 fresnel_dielectric_polarized(float cos_theta_i, float eta, ccl_private float *r_cos_theta_t, ccl_private float2 *r_phi)
ccl_device_inline Spectrum closure_layering_weight(const Spectrum layer_albedo, const Spectrum weight)
ccl_device float ior_from_F0(float f0)
ccl_device_inline Spectrum iridescence_lookup_sensitivity(float OPD, float shift)
ccl_device_inline float3 iridescence_airy_summation(float T121, float R12, float R23, float OPD, float phi)
ccl_device float3 ensure_valid_specular_reflection(float3 Ng, float3 I, float3 N)
ccl_device float schlick_fresnel(float u)
local_group_size(16, 16) .push_constant(Type b
additional_info("compositor_sum_squared_difference_float_shared") .push_constant(Type output_img float dot(value.rgb, luminance_coefficients)") .define("LOAD(value)"
#define kernel_assert(cond)
const KernelGlobalsCPU *ccl_restrict KernelGlobals
#define ccl_device_forceinline
#define ccl_device_inline
#define CCL_NAMESPACE_END
@ SD_USE_BUMP_MAP_CORRECTION
ccl_device_inline Spectrum rgb_to_spectrum(float3 rgb)
MINLINE float smoothstep(float edge0, float edge1, float x)
ccl_device_inline float2 one_float2()
CCL_NAMESPACE_BEGIN ccl_device_inline float2 zero_float2()
ccl_device_inline float average(const float2 a)
ccl_device_inline float reduce_max(const float2 a)
ccl_device_inline bool isequal(const float2 a, const float2 b)
ccl_device_inline float3 safe_normalize_fallback(const float3 a, const float3 fallback)
ccl_device_inline float3 one_float3()
ccl_device_inline float3 exp(float3 v)
ccl_device_inline float3 cos(float3 v)
ccl_device_inline float3 log(float3 v)
color xyz_to_rgb(float x, float y, float z)
SPECTRUM_DATA_TYPE Spectrum
ccl_device_inline float inverse_lerp(float a, float b, float x)
ccl_device_inline float sqr(float a)
ccl_device_inline bool isnan_safe(float f)
ccl_device_inline float3 float4_to_float3(const float4 a)
ccl_device_inline Spectrum safe_divide_color(Spectrum a, Spectrum b)
ccl_device_inline int clamp(int a, int mn, int mx)