28 #ifndef CCL_STDCYCLESOSL_H
29 #define CCL_STDCYCLESOSL_H
35 #define BUILTIN [[int builtin = 1]]
36 #define BUILTIN_DERIV [[ int builtin = 1, int deriv = 1 ]]
99 float threshold =
min(0.9 *
dot(Ng,
I), 0.01);
100 if (
dot(Ng,
R) >= threshold) {
104 float NdotNg =
dot(
N, Ng);
108 float Ix2 =
sqr(Ix), Iz2 =
sqr(Iz);
111 float b =
sqrt(Ix2 * (
a -
sqr(threshold)));
112 float c = Iz * threshold +
a;
115 float N1_z2 = fac * (b +
c), N2_z2 = fac * (-b +
c);
116 int valid1 = (N1_z2 > 1
e-5) && (N1_z2 <= (1.0 + 1
e-5));
117 int valid2 = (N2_z2 > 1
e-5) && (N2_z2 <= (1.0 + 1
e-5));
119 float N_new_x, N_new_z;
120 if (valid1 && valid2) {
121 float N1_x =
sqrt(1.0 - N1_z2), N1_z =
sqrt(N1_z2);
122 float N2_x =
sqrt(1.0 - N2_z2), N2_z =
sqrt(N2_z2);
124 float R1 = 2 * (N1_x * Ix + N1_z * Iz) * N1_z - Iz;
125 float R2 = 2 * (N2_x * Ix + N2_z * Iz) * N2_z - Iz;
127 valid1 = (R1 >= 1
e-5);
128 valid2 = (R2 >= 1
e-5);
129 if (valid1 && valid2) {
130 N_new_x = (R1 < R2) ? N1_x : N2_x;
131 N_new_z = (R1 < R2) ? N1_z : N2_z;
134 N_new_x = (R1 > R2) ? N1_x : N2_x;
135 N_new_z = (R1 > R2) ? N1_z : N2_z;
138 else if (valid1 || valid2) {
139 float Nz2 = valid1 ? N1_z2 : N2_z2;
140 N_new_x =
sqrt(1.0 - Nz2);
147 return N_new_x *
X + N_new_z * Ng;
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
static CCL_NAMESPACE_BEGIN const double alpha
IconTextureDrawCall normal
static const pxr::TfToken roughness("roughness", pxr::TfToken::Immortal)
closure color microfacet_ggx(normal N, float ag) BUILTIN
closure color principled_diffuse(normal N, float roughness) BUILTIN
closure color microfacet_multi_ggx_glass_fresnel(normal N, float ag, float eta, color C, color Cspec0) BUILTIN
closure color absorption() BUILTIN
closure color microfacet_ggx_aniso_fresnel(normal N, vector T, float ax, float ay, float eta, color C, color Cspec0) BUILTIN
closure color phong_ramp(normal N, float exponent, color colors[8]) BUILTIN
closure color microfacet_multi_ggx_glass(normal N, float ag, float eta, color C) BUILTIN
closure color microfacet_multi_ggx_aniso_fresnel(normal N, vector T, float ax, float ay, float eta, color C, color Cspec0) BUILTIN
closure color microfacet_multi_ggx_fresnel(normal N, float ag, float eta, color C, color Cspec0) BUILTIN
closure color diffuse_toon(normal N, float size, float smooth) BUILTIN
closure color henyey_greenstein(float g) BUILTIN
closure color ambient_occlusion() BUILTIN
closure color microfacet_multi_ggx(normal N, float ag, color C) BUILTIN
closure color microfacet_multi_ggx_aniso(normal N, vector T, float ax, float ay, color C) BUILTIN
closure color hair_transmission(normal N, float roughnessu, float roughnessv, vector T, float offset) BUILTIN
closure color ashikhmin_velvet(normal N, float sigma) BUILTIN
closure color diffuse_ramp(normal N, color colors[8]) BUILTIN
closure color bssrdf(string method, normal N, vector radius, color albedo) BUILTIN
closure color microfacet_ggx_refraction(normal N, float ag, float eta) BUILTIN
closure color principled_clearcoat(normal N, float clearcoat, float clearcoat_roughness) BUILTIN
closure color hair_reflection(normal N, float roughnessu, float roughnessv, vector T, float offset) BUILTIN
normal ensure_valid_reflection(normal Ng, vector I, normal N)
closure color microfacet_beckmann(normal N, float ab) BUILTIN
closure color microfacet_ggx_aniso(normal N, vector T, float ax, float ay) BUILTIN
closure color principled_hair(normal N, color sigma, float roughnessu, float roughnessv, float coat, float alpha, float eta) BUILTIN
closure color microfacet_ggx_fresnel(normal N, float ag, float eta, color C, color Cspec0) BUILTIN
closure color ashikhmin_shirley(normal N, vector T, float ax, float ay) BUILTIN
closure color microfacet_beckmann_aniso(normal N, vector T, float ax, float ay) BUILTIN
closure color glossy_toon(normal N, float size, float smooth) BUILTIN
closure color microfacet_beckmann_refraction(normal N, float ab, float eta) BUILTIN
closure color principled_sheen(normal N) BUILTIN
ccl_device_inline float sqr(float a)
ccl_device_inline float2 normalize(const float2 &a)
ccl_device_inline float dot(const float2 &a, const float2 &b)