17 #ifndef __BSDF_PRINCIPLED_SHEEN_H__
18 #define __BSDF_PRINCIPLED_SHEEN_H__
33 "PrincipledSheenBsdf is too large!");
39 float NdotI =
dot(
N,
I);
50 float NdotL =
dot(
N,
L);
51 float NdotV =
dot(
N,
V);
53 if (NdotL < 0 || NdotV < 0) {
58 float LdotH =
dot(
L,
H);
85 if (
dot(
N, omega_in) > 0.0f) {
122 if (
dot(Ng, *omega_in) > 0) {
127 #ifdef __RAY_DIFFERENTIALS__
129 *domega_in_dx = -((2 *
dot(
N, dIdx)) *
N - dIdx);
130 *domega_in_dy = -((2 *
dot(
N, dIdy)) *
N - dIdy);
ccl_device int bsdf_principled_sheen_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_principled_sheen_eval_transmit(const ShaderClosure *sc, const float3 I, const float3 omega_in, float *pdf)
CCL_NAMESPACE_BEGIN typedef ccl_addr_space struct PrincipledSheenBsdf PrincipledSheenBsdf
ccl_device int bsdf_principled_sheen_setup(const ShaderData *sd, PrincipledSheenBsdf *bsdf)
ccl_device_inline float calculate_avg_principled_sheen_brdf(float3 N, float3 I)
ccl_device float3 calculate_principled_sheen_brdf(float3 N, float3 V, float3 L, float3 H, float *pdf)
ccl_device float3 bsdf_principled_sheen_eval_reflect(const ShaderClosure *sc, const float3 I, const float3 omega_in, float *pdf)
ccl_device float schlick_fresnel(float u)
#define ccl_device_inline
#define CCL_NAMESPACE_END
#define make_float3(x, y, z)
ccl_device_inline void sample_cos_hemisphere(const float3 N, float randu, float randv, float3 *omega_in, float *pdf)
@ CLOSURE_BSDF_PRINCIPLED_SHEEN_ID
ccl_device_inline float2 normalize(const float2 &a)
ccl_device_inline float dot(const float2 &a, const float2 &b)
CCL_NAMESPACE_BEGIN struct View V