diff --git a/source/blender/blenkernel/BKE_node_tree_interface.hh b/source/blender/blenkernel/BKE_node_tree_interface.hh index bcd7d4901f7..4f364237bf0 100644 --- a/source/blender/blenkernel/BKE_node_tree_interface.hh +++ b/source/blender/blenkernel/BKE_node_tree_interface.hh @@ -128,6 +128,10 @@ static const bNodeSocketStaticTypeInfo node_socket_subtypes[] = { "NodeTreeInterfaceSocketFloatWavelength", SOCK_FLOAT, PROP_WAVELENGTH}, + {"NodeSocketFloatColorTemperature", + "NodeTreeInterfaceSocketFloatColorTemperature", + SOCK_FLOAT, + PROP_COLOR_TEMPERATURE}, {"NodeSocketInt", "NodeTreeInterfaceSocketInt", SOCK_INT, PROP_NONE}, {"NodeSocketIntUnsigned", "NodeTreeInterfaceSocketIntUnsigned", SOCK_INT, PROP_UNSIGNED}, {"NodeSocketIntPercentage", "NodeTreeInterfaceSocketIntPercentage", SOCK_INT, PROP_PERCENTAGE}, diff --git a/source/blender/blenkernel/BKE_unit.hh b/source/blender/blenkernel/BKE_unit.hh index a489f370cac..6dc88cb025d 100644 --- a/source/blender/blenkernel/BKE_unit.hh +++ b/source/blender/blenkernel/BKE_unit.hh @@ -117,5 +117,6 @@ enum { B_UNIT_POWER = 11, B_UNIT_TEMPERATURE = 12, B_UNIT_WAVELENGTH = 13, - B_UNIT_TYPE_TOT = 14, + B_UNIT_COLOR_TEMPERATURE = 14, + B_UNIT_TYPE_TOT = 15, }; diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index a3681e047ff..de11e8195d9 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -541,6 +541,8 @@ static StringRef get_legacy_socket_subtype_idname(StringRef idname, const void * return "NodeSocketFloatDistance"; case PROP_WAVELENGTH: return "NodeSocketFloatWavelength"; + case PROP_COLOR_TEMPERATURE: + return "NodeSocketFloatColorTemperature"; } } if (idname == "NodeSocketInt") { @@ -2118,6 +2120,8 @@ const char *nodeStaticSocketType(const int type, const int subtype) return "NodeSocketFloatDistance"; case PROP_WAVELENGTH: return "NodeSocketFloatWavelength"; + case PROP_COLOR_TEMPERATURE: + return "NodeSocketFloatColorTemperature"; case PROP_NONE: default: return "NodeSocketFloat"; @@ -2205,6 +2209,8 @@ const char *nodeStaticSocketInterfaceTypeNew(const int type, const int subtype) return "NodeTreeInterfaceSocketFloatDistance"; case PROP_WAVELENGTH: return "NodeTreeInterfaceSocketFloatWavelength"; + case PROP_COLOR_TEMPERATURE: + return "NodeTreeInterfaceSocketFloatColorTemperature"; case PROP_NONE: default: return "NodeTreeInterfaceSocketFloat"; diff --git a/source/blender/blenkernel/intern/unit.cc b/source/blender/blenkernel/intern/unit.cc index b9a981ac570..6022aa622c5 100644 --- a/source/blender/blenkernel/intern/unit.cc +++ b/source/blender/blenkernel/intern/unit.cc @@ -1459,6 +1459,29 @@ static bUnitCollection buImperialTempCollection = { /*length*/ UNIT_COLLECTION_LENGTH(buImperialTempDef), }; +/* Color Temperature */ +static bUnitDef buColorTempDef[] = { + /* Base unit. */ + { + /*name*/ "kelvin", + /*name_plural*/ "kelvin", + /*name_short*/ "K", + /*name_alt*/ nullptr, + /*name_display*/ "Kelvin", + /*identifier*/ "KELVIN", + /*scalar*/ 1.0f, + /*bias*/ 0.0, + /*flag*/ B_UNIT_DEF_NONE, + }, + NULL_UNIT, +}; +static bUnitCollection buColorTempCollection = { + /*units*/ buColorTempDef, + /*base_unit*/ 0, + /*flag*/ 0, + /*length*/ UNIT_COLLECTION_LENGTH(buColorTempDef), +}; + #define UNIT_SYSTEM_TOT (((sizeof(bUnitSystems) / B_UNIT_TYPE_TOT) / sizeof(void *)) - 1) static const bUnitCollection *bUnitSystems[][B_UNIT_TYPE_TOT] = { /* Natural. */ @@ -1477,6 +1500,7 @@ static const bUnitCollection *bUnitSystems[][B_UNIT_TYPE_TOT] = { /*B_UNIT_POWER*/ nullptr, /*B_UNIT_TEMPERATURE*/ nullptr, /*B_UNIT_WAVELENGTH*/ nullptr, + /*B_UNIT_COLOR_TEMPERATURE*/ nullptr, }, /* Metric. */ { @@ -1494,6 +1518,7 @@ static const bUnitCollection *bUnitSystems[][B_UNIT_TYPE_TOT] = { /*B_UNIT_POWER*/ &buPowerCollection, /*B_UNIT_TEMPERATURE*/ &buMetricTempCollection, /*B_UNIT_WAVELENGTH*/ &buWavelengthLenCollection, + /*B_UNIT_COLOR_TEMPERATURE*/ &buColorTempCollection, }, /* Imperial. */ { @@ -1511,6 +1536,7 @@ static const bUnitCollection *bUnitSystems[][B_UNIT_TYPE_TOT] = { /*B_UNIT_POWER*/ &buPowerCollection, /*B_UNIT_TEMPERATURE*/ &buImperialTempCollection, /*B_UNIT_WAVELENGTH*/ &buWavelengthLenCollection, + /*B_UNIT_COLOR_TEMPERATURE*/ &buColorTempCollection, }, {nullptr}, }; diff --git a/source/blender/makesrna/RNA_types.hh b/source/blender/makesrna/RNA_types.hh index 1b60aaf87af..aa84ffbca2c 100644 --- a/source/blender/makesrna/RNA_types.hh +++ b/source/blender/makesrna/RNA_types.hh @@ -74,19 +74,20 @@ enum PropertyType { /* also update rna_property_subtype_unit when you change this */ enum PropertyUnit { PROP_UNIT_NONE = (0 << 16), - PROP_UNIT_LENGTH = (1 << 16), /* m */ - PROP_UNIT_AREA = (2 << 16), /* m^2 */ - PROP_UNIT_VOLUME = (3 << 16), /* m^3 */ - PROP_UNIT_MASS = (4 << 16), /* kg */ - PROP_UNIT_ROTATION = (5 << 16), /* radians */ - PROP_UNIT_TIME = (6 << 16), /* frame */ - PROP_UNIT_TIME_ABSOLUTE = (7 << 16), /* time in seconds (independent of scene) */ - PROP_UNIT_VELOCITY = (8 << 16), /* m/s */ - PROP_UNIT_ACCELERATION = (9 << 16), /* m/(s^2) */ - PROP_UNIT_CAMERA = (10 << 16), /* mm */ - PROP_UNIT_POWER = (11 << 16), /* W */ - PROP_UNIT_TEMPERATURE = (12 << 16), /* C */ - PROP_UNIT_WAVELENGTH = (13 << 16), /* `nm` (independent of scene). */ + PROP_UNIT_LENGTH = (1 << 16), /* m */ + PROP_UNIT_AREA = (2 << 16), /* m^2 */ + PROP_UNIT_VOLUME = (3 << 16), /* m^3 */ + PROP_UNIT_MASS = (4 << 16), /* kg */ + PROP_UNIT_ROTATION = (5 << 16), /* radians */ + PROP_UNIT_TIME = (6 << 16), /* frame */ + PROP_UNIT_TIME_ABSOLUTE = (7 << 16), /* time in seconds (independent of scene) */ + PROP_UNIT_VELOCITY = (8 << 16), /* m/s */ + PROP_UNIT_ACCELERATION = (9 << 16), /* m/(s^2) */ + PROP_UNIT_CAMERA = (10 << 16), /* mm */ + PROP_UNIT_POWER = (11 << 16), /* W */ + PROP_UNIT_TEMPERATURE = (12 << 16), /* C */ + PROP_UNIT_WAVELENGTH = (13 << 16), /* `nm` (independent of scene). */ + PROP_UNIT_COLOR_TEMPERATURE = (14 << 16), /* K */ }; ENUM_OPERATORS(PropertyUnit, PROP_UNIT_TEMPERATURE) @@ -186,6 +187,9 @@ enum PropertySubType { /* wavelength */ PROP_WAVELENGTH = 44 | PROP_UNIT_WAVELENGTH, + + /* wavelength */ + PROP_COLOR_TEMPERATURE = 45 | PROP_UNIT_COLOR_TEMPERATURE, }; /* Make sure enums are updated with these */ diff --git a/source/blender/makesrna/intern/makesrna.cc b/source/blender/makesrna/intern/makesrna.cc index 8c3baccf077..40c4939c1c7 100644 --- a/source/blender/makesrna/intern/makesrna.cc +++ b/source/blender/makesrna/intern/makesrna.cc @@ -3632,6 +3632,8 @@ static const char *rna_property_subtypename(PropertySubType type) return "PROP_TEMPERATURE"; case PROP_WAVELENGTH: return "PROP_WAVELENGTH"; + case PROP_COLOR_TEMPERATURE: + return "PROP_COLOR_TEMPERATURE"; default: { /* in case we don't have a type preset that includes the subtype */ if (RNA_SUBTYPE_UNIT(type)) { @@ -3673,6 +3675,8 @@ static const char *rna_property_subtype_unit(PropertySubType type) return "PROP_UNIT_TEMPERATURE"; case PROP_UNIT_WAVELENGTH: return "PROP_UNIT_WAVELENGTH"; + case PROP_UNIT_COLOR_TEMPERATURE: + return "PROP_UNIT_COLOR_TEMPERATURE"; default: return "PROP_UNIT_UNKNOWN"; } diff --git a/source/blender/makesrna/intern/rna_node_socket.cc b/source/blender/makesrna/intern/rna_node_socket.cc index 082faeedf27..03e1972309a 100644 --- a/source/blender/makesrna/intern/rna_node_socket.cc +++ b/source/blender/makesrna/intern/rna_node_socket.cc @@ -1591,6 +1591,10 @@ static const bNodeSocketStaticTypeInfo node_socket_subtypes[] = { "NodeTreeInterfaceSocketFloatWavelength", SOCK_FLOAT, PROP_WAVELENGTH}, + {"NodeSocketFloatColorTemperature", + "NodeTreeInterfaceSocketFloatColorTemperature", + SOCK_FLOAT, + PROP_COLOR_TEMPERATURE}, {"NodeSocketInt", "NodeTreeInterfaceSocketInt", SOCK_INT, PROP_NONE}, {"NodeSocketIntUnsigned", "NodeTreeInterfaceSocketIntUnsigned", SOCK_INT, PROP_UNSIGNED}, {"NodeSocketIntPercentage", "NodeTreeInterfaceSocketIntPercentage", SOCK_INT, PROP_PERCENTAGE}, diff --git a/source/blender/makesrna/intern/rna_node_tree_interface.cc b/source/blender/makesrna/intern/rna_node_tree_interface.cc index e57c3293cac..f42ca176178 100644 --- a/source/blender/makesrna/intern/rna_node_tree_interface.cc +++ b/source/blender/makesrna/intern/rna_node_tree_interface.cc @@ -718,6 +718,7 @@ static const EnumPropertyItem *rna_NodeTreeInterfaceSocketFloat_subtype_itemf( PROP_TIME_ABSOLUTE, PROP_DISTANCE, PROP_WAVELENGTH, + PROP_COLOR_TEMPERATURE, PROP_NONE}, r_free); } diff --git a/source/blender/makesrna/intern/rna_rna.cc b/source/blender/makesrna/intern/rna_rna.cc index 7433d762f3a..62879057e50 100644 --- a/source/blender/makesrna/intern/rna_rna.cc +++ b/source/blender/makesrna/intern/rna_rna.cc @@ -79,7 +79,8 @@ const EnumPropertyItem rna_enum_property_type_items[] = { {PROP_DISTANCE_CAMERA, "DISTANCE_CAMERA", 0, "Camera Distance", ""}, \ {PROP_POWER, "POWER", 0, "Power", ""}, \ {PROP_TEMPERATURE, "TEMPERATURE", 0, "Temperature", ""}, \ - {PROP_WAVELENGTH, "WAVELENGTH", 0, "Wavelength", ""} + {PROP_WAVELENGTH, "WAVELENGTH", 0, "Wavelength", ""}, \ + {PROP_COLOR_TEMPERATURE, "COLOR_TEMPERATURE", 0, "Color Temperature", ""} #define RNA_ENUM_PROPERTY_SUBTYPE_NUMBER_ARRAY_ITEMS \ {PROP_COLOR, "COLOR", 0, "Color", ""}, \ @@ -152,6 +153,7 @@ const EnumPropertyItem rna_enum_property_unit_items[] = { {PROP_UNIT_POWER, "POWER", 0, "Power", ""}, {PROP_UNIT_TEMPERATURE, "TEMPERATURE", 0, "Temperature", ""}, {PROP_UNIT_WAVELENGTH, "WAVELENGTH", 0, "Wavelength", ""}, + {PROP_UNIT_COLOR_TEMPERATURE, "COLOR_TEMPERATURE", 0, "Color Temperature", ""}, {0, nullptr, 0, nullptr, nullptr}, }; diff --git a/source/blender/nodes/intern/node_socket.cc b/source/blender/nodes/intern/node_socket.cc index 278b520950e..09639bce56e 100644 --- a/source/blender/nodes/intern/node_socket.cc +++ b/source/blender/nodes/intern/node_socket.cc @@ -1164,6 +1164,7 @@ void register_standard_node_socket_types() bke::nodeRegisterSocketType(make_socket_type_float(PROP_TIME_ABSOLUTE)); bke::nodeRegisterSocketType(make_socket_type_float(PROP_DISTANCE)); bke::nodeRegisterSocketType(make_socket_type_float(PROP_WAVELENGTH)); + bke::nodeRegisterSocketType(make_socket_type_float(PROP_COLOR_TEMPERATURE)); bke::nodeRegisterSocketType(make_socket_type_int(PROP_NONE)); bke::nodeRegisterSocketType(make_socket_type_int(PROP_UNSIGNED)); diff --git a/source/blender/nodes/shader/nodes/node_shader_blackbody.cc b/source/blender/nodes/shader/nodes/node_shader_blackbody.cc index dd76cabfd0f..dc2418c5b80 100644 --- a/source/blender/nodes/shader/nodes/node_shader_blackbody.cc +++ b/source/blender/nodes/shader/nodes/node_shader_blackbody.cc @@ -14,7 +14,11 @@ namespace blender::nodes::node_shader_blackbody_cc { static void node_declare(NodeDeclarationBuilder &b) { b.is_function_node(); - b.add_input("Temperature").default_value(1500.0f).min(800.0f).max(12000.0f); + b.add_input("Temperature") + .default_value(1500.0f) + .min(800.0f) + .max(12000.0f) + .subtype(PROP_COLOR_TEMPERATURE); b.add_output("Color"); } diff --git a/source/blender/nodes/shader/nodes/node_shader_volume_principled.cc b/source/blender/nodes/shader/nodes/node_shader_volume_principled.cc index 7e4ddd26c90..a8361b3b7c6 100644 --- a/source/blender/nodes/shader/nodes/node_shader_volume_principled.cc +++ b/source/blender/nodes/shader/nodes/node_shader_volume_principled.cc @@ -38,7 +38,11 @@ static void node_declare(NodeDeclarationBuilder &b) #define SOCK_BLACKBODY_INTENSITY_ID 8 b.add_input("Blackbody Tint").default_value({1.0f, 1.0f, 1.0f, 1.0f}); #define SOCK_BLACKBODY_TINT_ID 8 - b.add_input("Temperature").default_value(1000.0f).min(0.0f).max(6500.0f); + b.add_input("Temperature") + .default_value(1000.0f) + .min(0.0f) + .max(6500.0f) + .subtype(PROP_COLOR_TEMPERATURE); b.add_input("Temperature Attribute").default_value("temperature"); b.add_input("Weight").unavailable(); b.add_output("Volume").translation_context(BLT_I18NCONTEXT_ID_ID); diff --git a/source/blender/python/intern/bpy_utils_units.cc b/source/blender/python/intern/bpy_utils_units.cc index 2cabc1d116f..67763505075 100644 --- a/source/blender/python/intern/bpy_utils_units.cc +++ b/source/blender/python/intern/bpy_utils_units.cc @@ -53,6 +53,7 @@ static const char *bpyunits_ucategories_items[] = { "POWER", "TEMPERATURE", "WAVELENGTH", + "COLOR_TEMPERATURE", nullptr, };