37 if (
angle < max_angle)
100 float angle = sample_angle * randu;
102 if (sample_angle > 0.0f) {
105 if (
dot(Ng, *omega_in) > 0.0f) {
108 #ifdef __RAY_DIFFERENTIALS__
110 *domega_in_dx = (2.0f *
dot(bsdf->N, dIdx)) * bsdf->N - dIdx;
111 *domega_in_dy = (2.0f *
dot(bsdf->N, dIdy)) * bsdf->N - dIdy;
146 float cosNI =
dot(bsdf->N, omega_in);
147 float cosNO =
dot(bsdf->N,
I);
149 if (cosNI > 0 && cosNO > 0) {
151 float3 R = (2 * cosNO) * bsdf->N -
I;
152 float cosRI =
dot(
R, omega_in);
191 float cosNO =
dot(bsdf->N,
I);
195 float3 R = (2 * cosNO) * bsdf->N -
I;
198 float angle = sample_angle * randu;
202 if (
dot(Ng, *omega_in) > 0.0f) {
203 float cosNI =
dot(bsdf->N, *omega_in);
209 #ifdef __RAY_DIFFERENTIALS__
210 *domega_in_dx = (2 *
dot(bsdf->N, dIdx)) * bsdf->N - dIdx;
211 *domega_in_dy = (2 *
dot(bsdf->N, dIdy)) * bsdf->N - dIdy;
MINLINE float safe_acosf(float a)
ccl_device int bsdf_glossy_toon_sample(ccl_private const ShaderClosure *sc, float3 Ng, float3 I, float3 dIdx, float3 dIdy, float randu, float randv, ccl_private float3 *eval, ccl_private float3 *omega_in, ccl_private float3 *domega_in_dx, ccl_private float3 *domega_in_dy, ccl_private float *pdf)
ccl_device int bsdf_diffuse_toon_sample(ccl_private const ShaderClosure *sc, float3 Ng, float3 I, float3 dIdx, float3 dIdy, float randu, float randv, ccl_private float3 *eval, ccl_private float3 *omega_in, ccl_private float3 *domega_in_dx, ccl_private float3 *domega_in_dy, ccl_private float *pdf)
ccl_device int bsdf_diffuse_toon_setup(ccl_private ToonBsdf *bsdf)
ccl_device float bsdf_toon_get_sample_angle(float max_angle, float smooth)
ccl_device float3 bsdf_diffuse_toon_eval_transmit(ccl_private const ShaderClosure *sc, const float3 I, const float3 omega_in, ccl_private float *pdf)
CCL_NAMESPACE_BEGIN struct ToonBsdf ToonBsdf
ccl_device float3 bsdf_glossy_toon_eval_transmit(ccl_private const ShaderClosure *sc, const float3 I, const float3 omega_in, ccl_private float *pdf)
ccl_device float3 bsdf_glossy_toon_eval_reflect(ccl_private const ShaderClosure *sc, const float3 I, const float3 omega_in, ccl_private float *pdf)
ccl_device float3 bsdf_diffuse_toon_eval_reflect(ccl_private const ShaderClosure *sc, const float3 I, const float3 omega_in, ccl_private float *pdf)
ccl_device int bsdf_glossy_toon_setup(ccl_private 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
@ CLOSURE_BSDF_DIFFUSE_TOON_ID
@ CLOSURE_BSDF_GLOSSY_TOON_ID
T dot(const vec_base< T, Size > &a, const vec_base< T, Size > &b)
smooth(Type::FLOAT, "mask_weight")
ccl_device_inline void sample_uniform_cone(const float3 N, float angle, float randu, float randv, ccl_private float3 *omega_in, ccl_private float *pdf)
ccl_device_inline float saturatef(float a)