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)
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Brightness Control the brightness and contrast of the input color Vector Map input vector components with curves Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert Invert a color
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)