17 typedef struct DiffuseRampBsdf {
23 static_assert(
sizeof(
ShaderClosure) >=
sizeof(DiffuseRampBsdf),
"DiffuseRampBsdf is too large!");
29 float npos =
pos * (
float)(MAXCOLORS - 1);
33 if (ipos >= (MAXCOLORS - 1))
34 return colors[MAXCOLORS - 1];
36 return colors[ipos] * (1.0f -
offset) + colors[ipos + 1] *
offset;
39 ccl_device int bsdf_diffuse_ramp_setup(DiffuseRampBsdf *bsdf)
54 const DiffuseRampBsdf *bsdf = (
const DiffuseRampBsdf *)sc;
57 float cos_pi =
fmaxf(
dot(
N, omega_in), 0.0f);
59 return bsdf_diffuse_ramp_get_color(bsdf->colors, cos_pi) *
M_1_PI_F;
83 const DiffuseRampBsdf *bsdf = (
const DiffuseRampBsdf *)sc;
89 if (
dot(Ng, *omega_in) > 0.0f) {
90 *eval = bsdf_diffuse_ramp_get_color(bsdf->colors, *pdf *
M_PI_F) *
M_1_PI_F;
91 # ifdef __RAY_DIFFERENTIALS__
92 *domega_in_dx = (2 *
dot(
N, dIdx)) *
N - dIdx;
93 *domega_in_dy = (2 *
dot(
N, dIdy)) *
N - dIdy;
typedef float(TangentPoint)[2]
#define CCL_NAMESPACE_END
ccl_gpu_kernel_postfix ccl_global float int int int int float bool int offset
@ CLOSURE_BSDF_DIFFUSE_RAMP_ID
#define SHADER_CLOSURE_BASE
T dot(const vec_base< T, Size > &a, const vec_base< T, Size > &b)
static const pxr::TfToken roughness("roughness", pxr::TfToken::Immortal)
ccl_device_inline void sample_cos_hemisphere(const float3 N, float randu, float randv, ccl_private float3 *omega_in, ccl_private float *pdf)
ccl_device_inline int float_to_int(float f)