33 #ifndef __BSDF_TOON_H__
34 #define __BSDF_TOON_H__
71 if (
angle < max_angle)
73 else if (
angle < (max_angle + smooth) && smooth != 0.0f)
74 is = (1.0f - (
angle - max_angle) / smooth);
133 float angle = sample_angle * randu;
135 if (sample_angle > 0.0f) {
138 if (
dot(Ng, *omega_in) > 0.0f) {
141 #ifdef __RAY_DIFFERENTIALS__
143 *domega_in_dx = (2.0f *
dot(bsdf->N, dIdx)) * bsdf->N - dIdx;
144 *domega_in_dy = (2.0f *
dot(bsdf->N, dIdy)) * bsdf->N - dIdy;
173 float cosNI =
dot(bsdf->N, omega_in);
174 float cosNO =
dot(bsdf->N,
I);
176 if (cosNI > 0 && cosNO > 0) {
178 float3 R = (2 * cosNO) * bsdf->N -
I;
179 float cosRI =
dot(
R, omega_in);
217 float cosNO =
dot(bsdf->N,
I);
221 float3 R = (2 * cosNO) * bsdf->N -
I;
224 float angle = sample_angle * randu;
228 if (
dot(Ng, *omega_in) > 0.0f) {
229 float cosNI =
dot(bsdf->N, *omega_in);
235 #ifdef __RAY_DIFFERENTIALS__
236 *domega_in_dx = (2 *
dot(bsdf->N, dIdx)) * bsdf->N - dIdx;
237 *domega_in_dy = (2 *
dot(bsdf->N, dIdy)) * bsdf->N - dIdy;
MINLINE float safe_acosf(float a)
ccl_device float3 bsdf_diffuse_toon_eval_transmit(const ShaderClosure *sc, const float3 I, const float3 omega_in, float *pdf)
ccl_device int bsdf_glossy_toon_sample(const ShaderClosure *sc, float3 Ng, float3 I, float3 dIdx, float3 dIdy, float randu, float randv, float3 *eval, float3 *omega_in, float3 *domega_in_dx, float3 *domega_in_dy, float *pdf)
ccl_device float3 bsdf_diffuse_toon_eval_reflect(const ShaderClosure *sc, const float3 I, const float3 omega_in, float *pdf)
ccl_device float bsdf_toon_get_sample_angle(float max_angle, float smooth)
ccl_device float3 bsdf_glossy_toon_eval_transmit(const ShaderClosure *sc, const float3 I, const float3 omega_in, float *pdf)
CCL_NAMESPACE_BEGIN typedef ccl_addr_space struct ToonBsdf ToonBsdf
ccl_device float3 bsdf_glossy_toon_eval_reflect(const ShaderClosure *sc, const float3 I, const float3 omega_in, float *pdf)
ccl_device int bsdf_diffuse_toon_sample(const ShaderClosure *sc, float3 Ng, float3 I, float3 dIdx, float3 dIdy, float randu, float randv, float3 *eval, float3 *omega_in, float3 *domega_in_dx, float3 *domega_in_dy, float *pdf)
ccl_device bool bsdf_toon_merge(const ShaderClosure *a, const ShaderClosure *b)
ccl_device int bsdf_diffuse_toon_setup(ToonBsdf *bsdf)
ccl_device int bsdf_glossy_toon_setup(ToonBsdf *bsdf)
ccl_device float3 bsdf_toon_get_intensity(float max_angle, float smooth, float angle)
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
#define CCL_NAMESPACE_END
#define make_float3(x, y, z)
ccl_device_inline void sample_uniform_cone(const float3 N, float angle, float randu, float randv, float3 *omega_in, float *pdf)
@ CLOSURE_BSDF_DIFFUSE_TOON_ID
@ CLOSURE_BSDF_GLOSSY_TOON_ID
ccl_device_inline float saturate(float a)
ccl_device_inline float dot(const float2 &a, const float2 &b)
ccl_device_inline bool isequal_float3(const float3 a, const float3 b)