[Bf-blender-cvs] [45cd4c9c829] principled-v2: Add Wavelength unit type for Thin Film and Wavelength sockets

Lukas Stockner noreply at git.blender.org
Sun Oct 30 16:35:31 CET 2022


Commit: 45cd4c9c829c903c2596c6c2054ebda5e31f7c44
Author: Lukas Stockner
Date:   Sun Oct 30 16:33:15 2022 +0100
Branches: principled-v2
https://developer.blender.org/rB45cd4c9c829c903c2596c6c2054ebda5e31f7c44

Add Wavelength unit type for Thin Film and Wavelength sockets

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

M	source/blender/blenkernel/BKE_unit.h
M	source/blender/blenkernel/intern/node.cc
M	source/blender/blenkernel/intern/scene.cc
M	source/blender/blenkernel/intern/unit.c
M	source/blender/makesrna/RNA_types.h
M	source/blender/makesrna/intern/makesrna.c
M	source/blender/makesrna/intern/rna_nodetree.c
M	source/blender/makesrna/intern/rna_rna.c
M	source/blender/nodes/intern/node_socket.cc
M	source/blender/nodes/shader/nodes/node_shader_bsdf_principled.cc
M	source/blender/nodes/shader/nodes/node_shader_wavelength.cc
M	source/blender/python/intern/bpy_utils_units.c

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

diff --git a/source/blender/blenkernel/BKE_unit.h b/source/blender/blenkernel/BKE_unit.h
index f051335fc41..8cf92d07037 100644
--- a/source/blender/blenkernel/BKE_unit.h
+++ b/source/blender/blenkernel/BKE_unit.h
@@ -110,7 +110,8 @@ enum {
   B_UNIT_CAMERA = 10,
   B_UNIT_POWER = 11,
   B_UNIT_TEMPERATURE = 12,
-  B_UNIT_TYPE_TOT = 13,
+  B_UNIT_WAVELENGTH = 13,
+  B_UNIT_TYPE_TOT = 14,
 };
 
 #ifdef __cplusplus
diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index 3e3a8355f98..a4437e8058e 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -1748,6 +1748,8 @@ const char *nodeStaticSocketType(int type, int subtype)
           return "NodeSocketFloatTimeAbsolute";
         case PROP_DISTANCE:
           return "NodeSocketFloatDistance";
+        case PROP_WAVELENGTH:
+          return "NodeSocketFloatWavelength";
         case PROP_NONE:
         default:
           return "NodeSocketFloat";
@@ -1825,6 +1827,8 @@ const char *nodeStaticSocketInterfaceType(int type, int subtype)
           return "NodeSocketInterfaceFloatTimeAbsolute";
         case PROP_DISTANCE:
           return "NodeSocketInterfaceFloatDistance";
+        case PROP_WAVELENGTH:
+          return "NodeSocketInterfaceFloatWavelength";
         case PROP_NONE:
         default:
           return "NodeSocketInterfaceFloat";
diff --git a/source/blender/blenkernel/intern/scene.cc b/source/blender/blenkernel/intern/scene.cc
index bd26075f81f..7cf7de1a593 100644
--- a/source/blender/blenkernel/intern/scene.cc
+++ b/source/blender/blenkernel/intern/scene.cc
@@ -3079,6 +3079,7 @@ double BKE_scene_unit_scale(const UnitSettings *unit, const int unit_type, doubl
     case B_UNIT_MASS:
       return value * pow(unit->scale_length, 3);
     case B_UNIT_CAMERA: /* *Do not* use scene's unit scale for camera focal lens! See T42026. */
+    case B_UNIT_WAVELENGTH:
     default:
       return value;
   }
diff --git a/source/blender/blenkernel/intern/unit.c b/source/blender/blenkernel/intern/unit.c
index f7ea4c81fbf..e84c7a3ccd4 100644
--- a/source/blender/blenkernel/intern/unit.c
+++ b/source/blender/blenkernel/intern/unit.c
@@ -42,6 +42,7 @@
 #define UN_SC_CM    0.01f
 #define UN_SC_MM    0.001f
 #define UN_SC_UM    0.000001f
+#define UN_SC_NM    0.000000001f
 
 #define UN_SC_MI    1609.344f
 #define UN_SC_FUR   201.168f
@@ -332,6 +333,16 @@ static struct bUnitDef buImperialTempDef[] = {
 static struct bUnitCollection buImperialTempCollection = {
     buImperialTempDef, 1, 0, UNIT_COLLECTION_LENGTH(buImperialTempDef)};
 
+/* Wavelengths (separate from distance and Camera to be scene-independent and to have nm as base unit). */
+static struct bUnitDef buWavelengthLenDef[] = {
+  {"millimeter", "millimeters", "mm",  NULL, "Millimeters",    NULL, 1e6f,  0.0, B_UNIT_DEF_NONE},
+  {"micrometer", "micrometers", "µm",  "um", "Micrometers",    NULL, 1e3f,  0.0, B_UNIT_DEF_NONE},
+  {"nanometer",  "nanometers",  "nm",  NULL, "Nanometers",     NULL, 1.0f,  0.0, B_UNIT_DEF_NONE}, /* Base unit. */
+  {"picometer",  "picometers",  "pm",  NULL, "Picometers",     NULL, 1e-3f, 0.0, B_UNIT_DEF_NONE},
+  NULL_UNIT,
+};
+static const struct bUnitCollection buWavelengthLenCollection = {buWavelengthLenDef, 3, 0, UNIT_COLLECTION_LENGTH(buWavelengthLenDef)};
+
 /* clang-format on */
 
 #define UNIT_SYSTEM_TOT (((sizeof(bUnitSystems) / B_UNIT_TYPE_TOT) / sizeof(void *)) - 1)
@@ -363,7 +374,8 @@ static const struct bUnitCollection *bUnitSystems[][B_UNIT_TYPE_TOT] = {
      &buMetricAclCollection,
      &buCameraLenCollection,
      &buPowerCollection,
-     &buMetricTempCollection},
+     &buMetricTempCollection,
+     &buWavelengthLenCollection},
     /* Imperial. */
     {NULL,
      &buImperialLenCollection,
@@ -377,7 +389,8 @@ static const struct bUnitCollection *bUnitSystems[][B_UNIT_TYPE_TOT] = {
      &buImperialAclCollection,
      &buCameraLenCollection,
      &buPowerCollection,
-     &buImperialTempCollection},
+     &buImperialTempCollection,
+     &buWavelengthLenCollection},
     {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
 };
 
@@ -523,7 +536,7 @@ static size_t unit_as_string(char *str,
 
 static bool unit_should_be_split(int type)
 {
-  return ELEM(type, B_UNIT_LENGTH, B_UNIT_MASS, B_UNIT_TIME, B_UNIT_CAMERA);
+  return ELEM(type, B_UNIT_LENGTH, B_UNIT_MASS, B_UNIT_TIME, B_UNIT_CAMERA, B_UNIT_WAVELENGTH);
 }
 
 typedef struct {
diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h
index b9556a411cf..4448f77e1ec 100644
--- a/source/blender/makesrna/RNA_types.h
+++ b/source/blender/makesrna/RNA_types.h
@@ -80,6 +80,7 @@ typedef enum PropertyUnit {
   PROP_UNIT_CAMERA = (10 << 16),       /* mm */
   PROP_UNIT_POWER = (11 << 16),        /* W */
   PROP_UNIT_TEMPERATURE = (12 << 16),  /* C */
+  PROP_UNIT_WAVELENGTH = (13 << 16),   /* nm */
 } PropertyUnit;
 
 /**
@@ -175,6 +176,9 @@ typedef enum PropertySubType {
 
   /* temperature */
   PROP_TEMPERATURE = 43 | PROP_UNIT_TEMPERATURE,
+
+  /* wavelength */
+  PROP_WAVELENGTH = 44 | PROP_UNIT_WAVELENGTH,
 } PropertySubType;
 
 /* Make sure enums are updated with these */
diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c
index 3592ecd84c8..e30b829b936 100644
--- a/source/blender/makesrna/intern/makesrna.c
+++ b/source/blender/makesrna/intern/makesrna.c
@@ -3368,6 +3368,8 @@ static const char *rna_property_subtypename(PropertySubType type)
       return "PROP_POWER";
     case PROP_TEMPERATURE:
       return "PROP_TEMPERATURE";
+    case PROP_WAVELENGTH:
+      return "PROP_WAVELENGTH";
     default: {
       /* in case we don't have a type preset that includes the subtype */
       if (RNA_SUBTYPE_UNIT(type)) {
@@ -3407,6 +3409,8 @@ static const char *rna_property_subtype_unit(PropertySubType type)
       return "PROP_UNIT_POWER";
     case PROP_UNIT_TEMPERATURE:
       return "PROP_UNIT_TEMPERATURE";
+    case PROP_UNIT_WAVELENGTH:
+      return "PROP_UNIT_WAVELENGTH";
     default:
       return "PROP_UNIT_UNKNOWN";
   }
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index 9ae6b25360a..a7ddb55a4a6 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -11930,6 +11930,10 @@ static void rna_def_node_socket_standard_types(BlenderRNA *brna)
                             PROP_TIME_ABSOLUTE);
   rna_def_node_socket_float(
       brna, "NodeSocketFloatDistance", "NodeSocketInterfaceFloatDistance", PROP_DISTANCE);
+  rna_def_node_socket_float(brna,
+                            "NodeSocketFloatWavelength",
+                            "NodeSocketInterfaceFloatWavelength",
+                            PROP_WAVELENGTH);
 
   rna_def_node_socket_int(brna, "NodeSocketInt", "NodeSocketInterfaceInt", PROP_NONE);
   rna_def_node_socket_int(
diff --git a/source/blender/makesrna/intern/rna_rna.c b/source/blender/makesrna/intern/rna_rna.c
index 54ccba24247..312cf702254 100644
--- a/source/blender/makesrna/intern/rna_rna.c
+++ b/source/blender/makesrna/intern/rna_rna.c
@@ -74,7 +74,8 @@ const EnumPropertyItem rna_enum_property_type_items[] = {
   {PROP_DISTANCE, "DISTANCE", 0, "Distance", ""}, \
   {PROP_DISTANCE_CAMERA, "DISTANCE_CAMERA", 0, "Camera Distance", ""}, \
   {PROP_POWER, "POWER", 0, "Power", ""}, \
-  {PROP_TEMPERATURE, "TEMPERATURE", 0, "Temperature", ""}
+  {PROP_TEMPERATURE, "TEMPERATURE", 0, "Temperature", ""}, \
+  {PROP_WAVELENGTH, "WAVELENGTH", 0, "Wavelength", ""}
 
 #define RNA_ENUM_PROPERTY_SUBTYPE_NUMBER_ARRAY_ITEMS \
   {PROP_COLOR, "COLOR", 0, "Color", ""}, \
@@ -146,6 +147,7 @@ const EnumPropertyItem rna_enum_property_unit_items[] = {
     {PROP_UNIT_CAMERA, "CAMERA", 0, "Camera", ""},
     {PROP_UNIT_POWER, "POWER", 0, "Power", ""},
     {PROP_UNIT_TEMPERATURE, "TEMPERATURE", 0, "Temperature", ""},
+    {PROP_UNIT_WAVELENGTH, "WAVELENGTH", 0, "Wavelength", ""},
     {0, NULL, 0, NULL, NULL},
 };
 
diff --git a/source/blender/nodes/intern/node_socket.cc b/source/blender/nodes/intern/node_socket.cc
index f2f4519625a..b22b1b7e3c4 100644
--- a/source/blender/nodes/intern/node_socket.cc
+++ b/source/blender/nodes/intern/node_socket.cc
@@ -869,6 +869,7 @@ void register_standard_node_socket_types()
   nodeRegisterSocketType(make_socket_type_float(PROP_TIME));
   nodeRegisterSocketType(make_socket_type_float(PROP_TIME_ABSOLUTE));
   nodeRegisterSocketType(make_socket_type_float(PROP_DISTANCE));
+  nodeRegisterSocketType(make_socket_type_float(PROP_WAVELENGTH));
 
   nodeRegisterSocketType(make_socket_type_int(PROP_NONE));
   nodeRegisterSocketType(make_socket_type_int(PROP_UNSIGNED));
diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.cc b/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.cc
index 13165bf11be..e228be74d77 100644
--- a/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.cc
+++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.cc
@@ -98,7 +98,7 @@ static void node_declare(NodeDeclarationBuilder &b)
       .subtype(PROP_FACTOR);
   /* TODO: Also add support to Principled v1? Would remain compatible and reduce differences. */
   b.add_input<decl::Color>(N_("Clearcoat Tint")).default_value({1.0f, 1.0f, 1.0f, 1.0f});
-  b.add_input<decl::Float>(N_("Thin Film Thickness")).default_value(0.0f).min(0.0f).max(10000.0f);
+  b.add_input<decl::Float>(N_("Thin Film Thickness")).default_value(0.0f).min(0.0f).max(10000.0f).subtype(PROP_WAVELENGTH);
   b.add_input<decl::Float>(N_("Thin Film IOR")).default_value(1.5f).min(1.0f).max(10.0f);
   /* TODO: Restrict min/max (e.g. 0.1 to 10) */
   b.add_input<decl::Float>(N_("IOR")).default_value(1.45f).min(0.0f).max(1000.0f);
diff --git a/source/blender/nodes/shader/nodes/node_shader_wavelength.cc b/source/blender/nodes/shader/nodes/node_shader_wavelength.cc
index 43bb4798e3f..5e3062d0eb9 100644
--- a/source/blender/nodes/shader/nodes/node_shader_wavelength.cc
+++ b/source/blender/nodes/shader/nodes/node_shader_wavelength.cc
@@ -9,7 +9,7 @@ namespace blender::nodes::node_shader_wavelength_cc {
 
 static void node_declare(NodeDeclarat

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list