23static_assert(
sizeof(ShaderClosure) >=
sizeof(
ToonBsdf),
"ToonBsdf is too large!");
47 if (
angle < max_angle) {
50 else if (
angle < (max_angle + smooth) && smooth != 0.0f) {
51 is = (1.0f - (
angle - max_angle) / smooth);
71 const float max_angle = bsdf->
size;
72 const float smooth = bsdf->smooth;
73 const float cosNO =
dot(bsdf->N, wo);
79 if (
angle < sample_angle) {
99 const float max_angle = bsdf->
size;
100 const float smooth = bsdf->smooth;
106 if (
dot(Ng, *wo) > 0.0f) {
131 const float max_angle = bsdf->
size;
132 const float smooth = bsdf->smooth;
133 const float cosNI =
dot(bsdf->N, wi);
134 const float cosNO =
dot(bsdf->N, wo);
136 if (cosNI > 0 && cosNO > 0) {
138 const float3 R = (2 * cosNI) * bsdf->N - wi;
139 const float cosRO =
dot(
R, wo);
144 if (
angle < sample_angle) {
163 const float max_angle = bsdf->
size;
164 const float smooth = bsdf->smooth;
165 const float cosNI =
dot(bsdf->N, wi);
169 const float3 R = (2 * cosNI) * bsdf->N - wi;
177 if (
dot(Ng, *wo) > 0.0f &&
dot(bsdf->N, *wo) > 0.0f) {
MINLINE float safe_acosf(float a)
static double angle(const Eigen::Vector3d &v1, const Eigen::Vector3d &v2)
ccl_device Spectrum bsdf_glossy_toon_eval(const ccl_private ShaderClosure *sc, const float3 wi, const float3 wo, ccl_private float *pdf)
ccl_device float bsdf_toon_get_sample_angle(const float max_angle, const float smooth)
ccl_device int bsdf_diffuse_toon_setup(ccl_private ToonBsdf *bsdf)
ccl_device float bsdf_toon_get_intensity(const float max_angle, const float smooth, const float angle)
ccl_device int bsdf_diffuse_toon_sample(const ccl_private ShaderClosure *sc, const float3 Ng, const float3, const float2 rand, ccl_private Spectrum *eval, ccl_private float3 *wo, ccl_private float *pdf)
ccl_device int bsdf_glossy_toon_sample(const ccl_private ShaderClosure *sc, const float3 Ng, const float3 wi, const float2 rand, ccl_private Spectrum *eval, ccl_private float3 *wo, ccl_private float *pdf)
ccl_device_inline int bsdf_toon_setup_common(ccl_private ToonBsdf *bsdf)
ccl_device int bsdf_glossy_toon_setup(ccl_private ToonBsdf *bsdf)
ccl_device Spectrum bsdf_diffuse_toon_eval(const ccl_private ShaderClosure *sc, const float3, const float3 wo, ccl_private float *pdf)
dot(value.rgb, luminance_coefficients)") DEFINE_VALUE("REDUCE(lhs
#define ccl_device_inline
#define CCL_NAMESPACE_END
constexpr T clamp(T, U, U) RET
@ CLOSURE_BSDF_DIFFUSE_TOON_ID
@ CLOSURE_BSDF_GLOSSY_TOON_ID
ccl_device_inline float one_minus_cos(const float angle)
ccl_device_inline float3 sample_uniform_cone(const float3 N, const float one_minus_cos_angle, const float2 rand, ccl_private float *cos_theta, ccl_private float *pdf)