25 float sigma =
fmaxf(bsdf->sigma, 0.01f);
26 bsdf->invsigma2 = 1.0f / (sigma * sigma);
42 float cosNI =
dot(
N, wi);
43 float cosNO =
dot(
N, wo);
44 if (!(cosNI > 0 && cosNO > 0)) {
51 float cosNH =
dot(
N,
H);
54 if (!(
fabsf(cosNH) < 1.0f - 1e-5f && cosHI > 1e-5f)) {
58 float cosNHdivHI = cosNH / cosHI;
59 cosNHdivHI =
fmaxf(cosNHdivHI, 1e-5f);
61 float fac1 = 2 *
fabsf(cosNHdivHI * cosNI);
62 float fac2 = 2 *
fabsf(cosNHdivHI * cosNO);
64 float sinNH2 = 1 - cosNH * cosNH;
65 float sinNH4 = sinNH2 * sinNH2;
66 float cotangent2 = (cosNH * cosNH) / sinNH2;
68 float D =
expf(-cotangent2 * m_invsigma2) * m_invsigma2 * M_1_PI_F / sinNH4;
71 float out = 0.25f * (D *
G) / cosNI;
73 *pdf = 0.5f * M_1_PI_F;
93 if (!(
dot(Ng, *wo) > 0)) {
101 float cosNI =
dot(
N, wi);
102 float cosNO =
dot(
N, *wo);
104 float cosNH =
dot(
N,
H);
106 if (!(cosNI > 1e-5f &&
fabsf(cosNH) < 1.0f - 1e-5f && cosHI > 1e-5f)) {
112 float cosNHdivHI = cosNH / cosHI;
113 cosNHdivHI =
fmaxf(cosNHdivHI, 1e-5f);
115 float fac1 = 2 *
fabsf(cosNHdivHI * cosNI);
116 float fac2 = 2 *
fabsf(cosNHdivHI * cosNO);
118 float sinNH2 = 1 - cosNH * cosNH;
119 float sinNH4 = sinNH2 * sinNH2;
120 float cotangent2 = (cosNH * cosNH) / sinNH2;
122 float D =
expf(-cotangent2 * m_invsigma2) * m_invsigma2 * M_1_PI_F / sinNH4;
125 float power = 0.25f * (D *
G) / cosNI;
ccl_device int bsdf_ashikhmin_velvet_sample(ccl_private const ShaderClosure *sc, float3 Ng, float3 wi, const float2 rand, ccl_private Spectrum *eval, ccl_private float3 *wo, ccl_private float *pdf)
ccl_device int bsdf_ashikhmin_velvet_setup(ccl_private VelvetBsdf *bsdf)
ccl_device Spectrum bsdf_ashikhmin_velvet_eval(ccl_private const ShaderClosure *sc, const float3 wi, const float3 wo, ccl_private float *pdf)
CCL_NAMESPACE_BEGIN struct VelvetBsdf VelvetBsdf
SIMD_FORCE_INLINE btVector3 & normalize()
Normalize this vector x^2 + y^2 + z^2 = 1.
additional_info("compositor_sum_squared_difference_float_shared") .push_constant(Type output_img float dot(value.rgb, luminance_coefficients)") .define("LOAD(value)"
#define CCL_NAMESPACE_END
@ CLOSURE_BSDF_ASHIKHMIN_VELVET_ID
ccl_device_inline float2 power(float2 v, float e)
ccl_device_inline void sample_uniform_hemisphere(const float3 N, const float2 rand, ccl_private float3 *wo, ccl_private float *pdf)
SPECTRUM_DATA_TYPE Spectrum