[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