Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2020-03-20 17:22:29 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2020-03-20 17:23:39 +0300
commitdb65a6e0fb1c1294ab4a6141293416c9d57fb108 (patch)
tree93b8eae6616ac3dd25b4b6927f1720f4fc20dde9 /intern/cycles/kernel/closure
parent0127e8522ae18d5a38a52ae9b6fda3552e165f34 (diff)
Fix T74345: missing albedo for Cycles principled hair BSDF
Diffstat (limited to 'intern/cycles/kernel/closure')
-rw-r--r--intern/cycles/kernel/closure/bsdf_hair_principled.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/intern/cycles/kernel/closure/bsdf_hair_principled.h b/intern/cycles/kernel/closure/bsdf_hair_principled.h
index 4db5a6cc830..f78bbeb5d9d 100644
--- a/intern/cycles/kernel/closure/bsdf_hair_principled.h
+++ b/intern/cycles/kernel/closure/bsdf_hair_principled.h
@@ -493,6 +493,36 @@ ccl_device void bsdf_principled_hair_blur(ShaderClosure *sc, float roughness)
bsdf->m0_roughness = fmaxf(roughness, bsdf->m0_roughness);
}
+/* Hair Albedo */
+
+ccl_device_inline float bsdf_principled_hair_albedo_roughness_scale(
+ const float azimuthal_roughness)
+{
+ const float x = azimuthal_roughness;
+ return (((((0.245f * x) + 5.574f) * x - 10.73f) * x + 2.532f) * x - 0.215f) * x + 5.969f;
+}
+
+ccl_device float3 bsdf_principled_hair_albedo(ShaderClosure *sc)
+{
+ PrincipledHairBSDF *bsdf = (PrincipledHairBSDF *)sc;
+ return exp3(-sqrt(bsdf->sigma) * bsdf_principled_hair_albedo_roughness_scale(bsdf->v));
+}
+
+ccl_device_inline float3
+bsdf_principled_hair_sigma_from_reflectance(const float3 color, const float azimuthal_roughness)
+{
+ const float3 sigma = log3(color) /
+ bsdf_principled_hair_albedo_roughness_scale(azimuthal_roughness);
+ return sigma * sigma;
+}
+
+ccl_device_inline float3 bsdf_principled_hair_sigma_from_concentration(const float eumelanin,
+ const float pheomelanin)
+{
+ return eumelanin * make_float3(0.506f, 0.841f, 1.653f) +
+ pheomelanin * make_float3(0.343f, 0.733f, 1.924f);
+}
+
CCL_NAMESPACE_END
#endif /* __BSDF_HAIR_PRINCIPLED_H__ */