[Bf-blender-cvs] [b08064d8672] microfacet_hair: Start with less parameters

Weizhen Huang noreply at git.blender.org
Mon Dec 19 20:12:04 CET 2022


Commit: b08064d867255533ae243ee7945452adfea6fc97
Author: Weizhen Huang
Date:   Mon Dec 19 11:19:41 2022 +0100
Branches: microfacet_hair
https://developer.blender.org/rBb08064d867255533ae243ee7945452adfea6fc97

Start with less parameters

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

M	intern/cycles/kernel/closure/bsdf_hair_microfacet.h
M	intern/cycles/kernel/svm/closure.h
M	intern/cycles/scene/shader_nodes.cpp
M	source/blender/nodes/shader/nodes/node_shader_bsdf_hair_microfacet.cc

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

diff --git a/intern/cycles/kernel/closure/bsdf_hair_microfacet.h b/intern/cycles/kernel/closure/bsdf_hair_microfacet.h
index 794c6930b96..92d32db6872 100644
--- a/intern/cycles/kernel/closure/bsdf_hair_microfacet.h
+++ b/intern/cycles/kernel/closure/bsdf_hair_microfacet.h
@@ -1169,14 +1169,11 @@ ccl_device int bsdf_microfacet_hair_sample_elliptic(const KernelGlobals kg,
   const float3 Y = safe_normalize(sd->dPdu);
   const float3 Z0 = safe_normalize(cross(X0, Y));
 
-  /* rotate (Z,X) around Y */
-  const float curve_parameter = bsdf->extra->attr_descr_intercept;
-  const float curve_length = bsdf->extra->attr_descr_length;
-  const float curve_twist_rate = bsdf->extra->twist_rate;
-  const float curve_twist_start = bsdf->extra->axis_rot;
+  /* const float curve_parameter = bsdf->extra->attr_descr_intercept; */
+  /* const float curve_length = bsdf->extra->attr_descr_length; */
 
-  const float twist_angle = M_2PI_F * (curve_twist_start +
-                                       curve_twist_rate * curve_parameter * curve_length);
+  /* TODO: compute the ellipse orientation based on the curve normal or user-defined normal? */
+  const float twist_angle = 0.0f;
   const float sin_twist_angle = sinf(twist_angle);
   const float cos_twist_angle = cosf(twist_angle);
 
diff --git a/intern/cycles/kernel/svm/closure.h b/intern/cycles/kernel/svm/closure.h
index 55deefd136b..2db8ccbfeee 100644
--- a/intern/cycles/kernel/svm/closure.h
+++ b/intern/cycles/kernel/svm/closure.h
@@ -1023,20 +1023,14 @@ ccl_device_noinline int svm_node_closure_bsdf(KernelGlobals kg,
         if (model_type == NODE_MICROFACET_HAIR_ELLIPTIC_GGX ||
             model_type == NODE_MICROFACET_HAIR_ELLIPTIC_BECKMANN) {
 
-          uint eccentricity_ofs, twist_rate_ofs, axis_ofs;
-          svm_unpack_node_uchar4(
-              data_node7.x, &eccentricity_ofs, &twist_rate_ofs, &axis_ofs, &temp);
+          uint eccentricity_ofs;
+          svm_unpack_node_uchar4(data_node7.x, &eccentricity_ofs, &temp, &temp, &temp);
 
           float eccentricity = stack_load_float_default(stack, eccentricity_ofs, data_node7.y);
-          float twist_rate = stack_load_float_default(stack, twist_rate_ofs, data_node7.z);
-          float axis_rot = stack_load_float_default(stack, axis_ofs, data_node7.w);
 
           /* Eccentricity */
           bsdf->extra->eccentricity = (eccentricity > 1.f) ? 1.f / eccentricity : eccentricity;
 
-          /* Angular twist rate per unit length */
-          bsdf->extra->twist_rate = twist_rate;
-
           const AttributeDescriptor attr_descr_intercept = find_attribute(kg, sd, data_node4.z);
           bsdf->extra->attr_descr_intercept = curve_attribute_float(
               kg, sd, attr_descr_intercept, NULL, NULL);
@@ -1044,10 +1038,6 @@ ccl_device_noinline int svm_node_closure_bsdf(KernelGlobals kg,
           const AttributeDescriptor attr_descr_length = find_attribute(kg, sd, data_node4.w);
           bsdf->extra->attr_descr_length = curve_attribute_float(
               kg, sd, attr_descr_length, NULL, NULL);
-
-          bsdf->extra->axis_rot = axis_rot > 0.0f ?
-                                      random * axis_rot :
-                                      -axis_rot;  // allowing this negative mode for debugging
         }
 
         sd->flag |= bsdf_microfacet_hair_setup(sd, bsdf);
diff --git a/intern/cycles/scene/shader_nodes.cpp b/intern/cycles/scene/shader_nodes.cpp
index 5b81c8dbe0c..345e8e8828b 100644
--- a/intern/cycles/scene/shader_nodes.cpp
+++ b/intern/cycles/scene/shader_nodes.cpp
@@ -3666,8 +3666,6 @@ NODE_DEFINE(MicrofacetHairBsdfNode)
                    SocketType::VECTOR);
 
   SOCKET_IN_FLOAT(eccentricity, "Eccentricity", 0.85f);
-  SOCKET_IN_FLOAT(random_axis, "Random Axis", 0.0f);
-  SOCKET_IN_FLOAT(twist_rate, "Twist Rate", 0.0f);
 
   SOCKET_IN_FLOAT(offset, "Offset", 2.f * M_PI_F / 180.f);
   SOCKET_IN_FLOAT(roughness, "Roughness", 0.3f);
@@ -3729,8 +3727,6 @@ void MicrofacetHairBsdfNode::compile(SVMCompiler &compiler)
   ShaderInput *Blur_in = input("Blur");
 
   ShaderInput *eccentricity_in = input("Eccentricity");
-  ShaderInput *random_axis_in = input("Random Axis");
-  ShaderInput *twist_rate_in = input("Twist Rate");
 
   int color_ofs = compiler.stack_assign(input("Color"));
   int tint_ofs = compiler.stack_assign(input("Tint"));
@@ -3809,12 +3805,12 @@ void MicrofacetHairBsdfNode::compile(SVMCompiler &compiler)
 
   /* data node 7 */
   compiler.add_node(compiler.encode_uchar4(compiler.stack_assign_if_linked(eccentricity_in),
-                                           compiler.stack_assign_if_linked(twist_rate_in),
-                                           compiler.stack_assign_if_linked(random_axis_in),
+                                           SVM_STACK_INVALID,
+                                           SVM_STACK_INVALID,
                                            SVM_STACK_INVALID),
                     __float_as_uint(eccentricity),
-                    __float_as_uint(twist_rate),
-                    __float_as_uint(random_axis));
+                    0,
+                    0);
 }
 
 /* Prepares the input data for the OSL shader. */
diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_hair_microfacet.cc b/source/blender/nodes/shader/nodes/node_shader_bsdf_hair_microfacet.cc
index 9e2d8d654ec..0ca3595d115 100644
--- a/source/blender/nodes/shader/nodes/node_shader_bsdf_hair_microfacet.cc
+++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_hair_microfacet.cc
@@ -32,15 +32,6 @@ static void node_declare(NodeDeclarationBuilder &b)
       .min(0.0f)
       .max(1.0f)
       .subtype(PROP_FACTOR);
-  b.add_input<decl::Float>(N_("Random Axis"))
-      .default_value(0.0f)
-      .min(-1.0f)
-      .max(1.0f);
-  b.add_input<decl::Float>(N_("Twist Rate"))
-      .default_value(0.0f)
-      .min(0.0f)
-      .max(2.0f)
-      .subtype(PROP_FACTOR);
   b.add_input<decl::Float>(N_("Roughness"))
       .default_value(0.3f)
       .min(0.0f)
@@ -106,9 +97,6 @@ static void node_shader_update_hair_microfacet(bNodeTree *ntree, bNode *node)
   int parametrization = node->custom1;
   int model_type = node->custom2;
 
-  bool circular = (model_type == SHD_MICROFACET_HAIR_CIRCULAR_GGX ||
-                   model_type == SHD_MICROFACET_HAIR_CIRCULAR_GGX_ANALYTIC ||
-                   model_type == SHD_MICROFACET_HAIR_CIRCULAR_BECKMANN);
   bool elliptical = (model_type == SHD_MICROFACET_HAIR_ELLIPTIC_GGX ||
                      model_type == SHD_MICROFACET_HAIR_ELLIPTIC_BECKMANN);
 
@@ -139,12 +127,6 @@ static void node_shader_update_hair_microfacet(bNodeTree *ntree, bNode *node)
     else if (STREQ(sock->name, "Eccentricity")) {
       nodeSetSocketAvailability(ntree, sock, elliptical);
     }
-    else if (STREQ(sock->name, "Random Axis")) {
-      nodeSetSocketAvailability(ntree, sock, elliptical);
-    }
-    else if (STREQ(sock->name, "Twist Rate")) {
-      nodeSetSocketAvailability(ntree, sock, elliptical);
-    }
   }
 }



More information about the Bf-blender-cvs mailing list