25static_assert(
sizeof(ShaderClosure) >=
sizeof(
SheenBsdf),
"SheenBsdf is too large!");
33 bsdf->roughness =
clamp(bsdf->roughness, 1e-3f, 1.0f);
35 const float cosNI =
dot(bsdf->N, sd->wi);
41 kg, cosNI, bsdf->roughness, offset + 2 * 32 * 32, 32, 32);
44 if (
fabsf(bsdf->transformA) < 1e-5f || albedo < 1e-5f) {
46 bsdf->sample_weight = 0.0f;
50 bsdf->weight *= albedo;
51 bsdf->sample_weight *= albedo;
65 const float a = bsdf->transformA;
66 const float b = bsdf->transformB;
70 const float lenSqr =
sqr(a * localO.
x +
b * localO.
z) +
sqr(a * localO.
y) +
sqr(localO.
z);
89 const float a = bsdf->transformA;
90 const float b = bsdf->transformB;
98 if (
dot(Ng, *wo) <= 0) {
104 const float lenSqr =
sqr(a * localO.
x +
b * localO.
z) +
sqr(a * localO.
y) +
sqr(localO.
z);
105 const float val =
M_1_PI_F * localO.
z *
sqr(a / lenSqr);
MINLINE float safe_sqrtf(float a)
ccl_device int bsdf_sheen_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_sheen_setup(KernelGlobals kg, const ccl_private ShaderData *sd, ccl_private SheenBsdf *bsdf)
ccl_device Spectrum bsdf_sheen_eval(const ccl_private ShaderClosure *sc, const float3, const float3 wo, ccl_private float *pdf)
dot(value.rgb, luminance_coefficients)") DEFINE_VALUE("REDUCE(lhs
ccl_device_inline T to_global(const float2 p, const T X, const T Y)
ccl_device_inline float2 to_local(const T p, const T X, const T Y)
const ThreadKernelGlobalsCPU * KernelGlobals
#define CCL_NAMESPACE_END
VecBase< float, D > normalize(VecOp< float, D >) RET
constexpr T clamp(T, U, U) RET
ccl_device float lookup_table_read_2D(KernelGlobals kg, const float x, float y, const int offset, const int xsize, const int ysize)
CCL_NAMESPACE_BEGIN ccl_device float2 sample_uniform_disk(const float2 rand)
ccl_device void make_orthonormals_safe_tangent(const float3 N, const float3 T, ccl_private float3 *a, ccl_private float3 *b)