36 "PrincipledDiffuseBsdf is too large!");
52 const float NdotL =
dot(
N,
L);
58 const float NdotV =
dot(
N,
V);
67 f += (1.0f - 0.5f * FV) * (1.0f - 0.5f * FL);
70 f += (1.0f - 0.5f * FL);
78 const float LH2 =
dot(
L,
V) + 1;
79 const float RR = bsdf->roughness * LH2;
80 f += RR * (FL + FV + FL * FV * (RR - 1.0f));
93 return (1.0f - 0.5f * FV);
108 bsdf->components = components;
123 if (
dot(
N, omega_in) > 0.0f) {
161 if (
dot(Ng, *omega_in) > 0) {
164 #ifdef __RAY_DIFFERENTIALS__
166 *domega_in_dx = -((2 *
dot(
N, dIdx)) *
N - dIdx);
167 *domega_in_dy = -((2 *
dot(
N, dIdy)) *
N - dIdy);
ccl_device float3 bsdf_principled_diffuse_eval_reflect(ccl_private const ShaderClosure *sc, const float3 I, const float3 omega_in, ccl_private float *pdf)
ccl_device int bsdf_principled_diffuse_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_inline float bsdf_principled_diffuse_retro_reflection_sample_weight(ccl_private PrincipledDiffuseBsdf *bsdf, const float3 I)
ccl_device float3 bsdf_principled_diffuse_eval_transmit(ccl_private const ShaderClosure *sc, const float3 I, const float3 omega_in, ccl_private float *pdf)
ccl_device int bsdf_principled_diffuse_setup(ccl_private PrincipledDiffuseBsdf *bsdf)
PrincipledDiffuseBsdfComponents
@ PRINCIPLED_DIFFUSE_RETRO_REFLECTION
@ PRINCIPLED_DIFFUSE_LAMBERT_EXIT
@ PRINCIPLED_DIFFUSE_LAMBERT
@ PRINCIPLED_DIFFUSE_FULL
ccl_device_inline float bsdf_principled_diffuse_compute_entry_fresnel(const float NdotV)
struct PrincipledDiffuseBsdf PrincipledDiffuseBsdf
ccl_device float3 bsdf_principled_diffuse_compute_brdf(ccl_private const PrincipledDiffuseBsdf *bsdf, float3 N, float3 V, float3 L, ccl_private float *pdf)
ccl_device float schlick_fresnel(float u)
#define ccl_device_inline
#define CCL_NAMESPACE_END
@ CLOSURE_BSDF_PRINCIPLED_DIFFUSE_ID
T dot(const vec_base< T, Size > &a, const vec_base< T, Size > &b)
ccl_device_inline void sample_cos_hemisphere(const float3 N, float randu, float randv, ccl_private float3 *omega_in, ccl_private float *pdf)
CCL_NAMESPACE_BEGIN struct Window V