17 #ifndef __BSDF_PRINCIPLED_DIFFUSE_H__
18 #define __BSDF_PRINCIPLED_DIFFUSE_H__
34 "PrincipledDiffuseBsdf is too large!");
42 if (NdotL < 0 || NdotV < 0) {
47 float LdotH =
dot(
L,
H);
50 const float Fd90 = 0.5f + 2.0f * LdotH * LdotH * bsdf->
roughness;
51 float Fd = (1.0f * (1.0f - FL) + Fd90 * FL) * (1.0f * (1.0f - FV) + Fd90 * FV);
84 if (
dot(
N, omega_in) > 0.0f) {
121 if (
dot(Ng, *omega_in) > 0) {
126 #ifdef __RAY_DIFFERENTIALS__
128 *domega_in_dx = -((2 *
dot(
N, dIdx)) *
N - dIdx);
129 *domega_in_dy = -((2 *
dot(
N, dIdy)) *
N - dIdy);
ccl_device float3 bsdf_principled_diffuse_eval_reflect(const ShaderClosure *sc, const float3 I, const float3 omega_in, float *pdf)
ccl_device float3 bsdf_principled_diffuse_eval_transmit(const ShaderClosure *sc, const float3 I, const float3 omega_in, float *pdf)
ccl_device bool bsdf_principled_diffuse_merge(const ShaderClosure *a, const ShaderClosure *b)
ccl_device int bsdf_principled_diffuse_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_NAMESPACE_BEGIN typedef ccl_addr_space struct PrincipledDiffuseBsdf PrincipledDiffuseBsdf
ccl_device int bsdf_principled_diffuse_setup(PrincipledDiffuseBsdf *bsdf)
ccl_device float3 calculate_principled_diffuse_brdf(const PrincipledDiffuseBsdf *bsdf, float3 N, float3 V, float3 L, float3 H, float *pdf)
ccl_device float schlick_fresnel(float u)
#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_DIFFUSE_ID
ccl_device_inline float2 normalize(const float2 &a)
ccl_device_inline float dot(const float2 &a, const float2 &b)
ccl_device_inline bool isequal_float3(const float3 a, const float3 b)
CCL_NAMESPACE_BEGIN struct View V