[Bf-blender-cvs] [a9156fef9a8] principled-v2: Move sheen to separate function

Lukas Stockner noreply at git.blender.org
Mon Jul 4 23:56:13 CEST 2022


Commit: a9156fef9a863d70a3d0272e62e9da3394c60d23
Author: Lukas Stockner
Date:   Mon Jul 4 23:31:47 2022 +0200
Branches: principled-v2
https://developer.blender.org/rBa9156fef9a863d70a3d0272e62e9da3394c60d23

Move sheen to separate function

===================================================================

M	intern/cycles/kernel/svm/closure_principled.h

===================================================================

diff --git a/intern/cycles/kernel/svm/closure_principled.h b/intern/cycles/kernel/svm/closure_principled.h
index 0dbd1206778..f3c685586c5 100644
--- a/intern/cycles/kernel/svm/closure_principled.h
+++ b/intern/cycles/kernel/svm/closure_principled.h
@@ -5,6 +5,38 @@
 
 CCL_NAMESPACE_BEGIN
 
+ccl_device_inline void principled_v1_sheen(KernelGlobals kg,
+                                           ccl_private ShaderData *sd,
+                                           float3 weight,
+                                           float3 base_color,
+                                           float3 N,
+                                           float sheen_weight,
+                                           float sheen_tint)
+{
+  if (sheen_weight <= CLOSURE_WEIGHT_CUTOFF) {
+    return;
+  }
+
+  // normalize lum. to isolate hue+sat
+  float m_cdlum = linear_rgb_to_gray(kg, base_color);
+  float3 m_ctint = m_cdlum > 0.0f ? base_color / m_cdlum : one_float3();
+
+  /* color of the sheen component */
+  float3 sheen_color = lerp(one_float3(), m_ctint, sheen_tint);
+
+  ccl_private PrincipledSheenBsdf *bsdf = (ccl_private PrincipledSheenBsdf *)bsdf_alloc(
+      sd, sizeof(PrincipledSheenBsdf), sheen_weight * sheen_color * weight);
+
+  if (bsdf == NULL) {
+    return;
+  }
+
+  bsdf->N = N;
+
+  /* setup bsdf */
+  sd->flag |= bsdf_principled_sheen_setup(sd, bsdf);
+}
+
 ccl_device_inline void principled_v1_clearcoat(ccl_private ShaderData *sd,
                                                float3 weight,
                                                float clearcoat,
@@ -205,28 +237,7 @@ ccl_device void svm_node_closure_principled(KernelGlobals kg,
 #endif
 
   /* sheen */
-  if (diffuse_weight > CLOSURE_WEIGHT_CUTOFF && sheen > CLOSURE_WEIGHT_CUTOFF) {
-    float m_cdlum = linear_rgb_to_gray(kg, base_color);
-    float3 m_ctint = m_cdlum > 0.0f ?
-                         base_color / m_cdlum :
-                         make_float3(1.0f, 1.0f, 1.0f);  // normalize lum. to isolate hue+sat
-
-    /* color of the sheen component */
-    float3 sheen_color = make_float3(1.0f, 1.0f, 1.0f) * (1.0f - sheen_tint) +
-                         m_ctint * sheen_tint;
-
-    float3 sheen_weight = weight * sheen * sheen_color * diffuse_weight;
-
-    ccl_private PrincipledSheenBsdf *bsdf = (ccl_private PrincipledSheenBsdf *)bsdf_alloc(
-        sd, sizeof(PrincipledSheenBsdf), sheen_weight);
-
-    if (bsdf) {
-      bsdf->N = N;
-
-      /* setup bsdf */
-      sd->flag |= bsdf_principled_sheen_setup(sd, bsdf);
-    }
-  }
+  principled_v1_sheen(kg, sd, weight, base_color, N, diffuse_weight * sheen, sheen_tint);
 
   /* specular reflection */
 #ifdef __CAUSTICS_TRICKS__



More information about the Bf-blender-cvs mailing list