27 if (cosTheta < 1e-6f) {
29 return (
M_PI_2_F - 2.0f / 3.0f) - cosTheta;
33 return sinTheta * (theta - 2.0f / 3.0f - sinTheta * cosTheta) +
34 2.0f / 3.0f * (sinTheta / cosTheta) * (1.0f -
sqr(sinTheta) * sinTheta);
43 float nl =
max(
dot(n,
l), 0.0f);
44 float nv =
max(
dot(n,
v), 0.0f);
45 float t =
dot(
l,
v) - nl * nv;
48 t /=
max(nl, nv) + FLT_MIN;
50 const float single_scatter = bsdf->a + bsdf->b * t;
53 const Spectrum multi_scatter = bsdf->multiscatter_term * (1.0f - El);
64 const float sigma =
saturatef(bsdf->roughness);
66 bsdf->b = sigma * bsdf->a;
70 const float Eavg = bsdf->a *
M_PI_F + ((
M_2PI_F - 5.6f) / 3.0f) * bsdf->b;
71 const Spectrum Ems = M_1_PI_F *
sqr(albedo) * (Eavg / (1.0f - Eavg)) /
73 const float nv =
max(
dot(bsdf->N, sd->wi), 0.0f);
75 bsdf->multiscatter_term = Ems * (1.0f - Ev);
86 const float cosNO =
dot(bsdf->N, wo);
88 *pdf = cosNO * M_1_PI_F;
109 if (
dot(Ng, *wo) > 0.0f) {
MINLINE float safe_acosf(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
ATTR_WARN_UNUSED_RESULT const BMLoop * l
ATTR_WARN_UNUSED_RESULT const BMVert * v
ccl_device Spectrum bsdf_oren_nayar_get_intensity(ccl_private const ShaderClosure *sc, float3 n, float3 v, float3 l)
ccl_device int bsdf_oren_nayar_setup(ccl_private const ShaderData *sd, ccl_private OrenNayarBsdf *bsdf, const Spectrum color)
ccl_device int bsdf_oren_nayar_sample(ccl_private const ShaderClosure *sc, float3 Ng, float3 wi, float2 rand, ccl_private Spectrum *eval, ccl_private float3 *wo, ccl_private float *pdf)
ccl_device Spectrum bsdf_oren_nayar_eval(ccl_private const ShaderClosure *sc, const float3 wi, const float3 wo, ccl_private float *pdf)
ccl_device_inline float bsdf_oren_nayar_G(const float cosTheta)
additional_info("compositor_sum_squared_difference_float_shared") .push_constant(Type output_img float dot(value.rgb, luminance_coefficients)") .define("LOAD(value)"
#define ccl_device_inline
#define CCL_NAMESPACE_END
@ CLOSURE_BSDF_OREN_NAYAR_ID
ccl_device_inline void sample_cos_hemisphere(const float3 N, float2 rand_in, ccl_private float3 *wo, ccl_private float *pdf)
Spectrum multiscatter_term
SPECTRUM_DATA_TYPE Spectrum
ccl_device_inline float sqr(float a)
ccl_device_inline float sin_from_cos(const float c)