UI: Add Color Temperature unit
The current temperature unit adjusts to Celsius or Fahrenheit based on unit system, but specifically for color temperatures the convention is to display them in Kelvin, and it'd be strange to e.g. see 11240°F when opening the white balance panel. Therefore, this adds a dedicated Color Temperature unit, and uses it for the two existing blackbody temperature inputs in shader nodes. Pull Request: https://projects.blender.org/blender/blender/pulls/123337
This commit is contained in:
committed by
Lukas Stockner
parent
0a38a8d56a
commit
25d4d645cd
@@ -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},
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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},
|
||||
};
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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},
|
||||
};
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -14,7 +14,11 @@ namespace blender::nodes::node_shader_blackbody_cc {
|
||||
static void node_declare(NodeDeclarationBuilder &b)
|
||||
{
|
||||
b.is_function_node();
|
||||
b.add_input<decl::Float>("Temperature").default_value(1500.0f).min(800.0f).max(12000.0f);
|
||||
b.add_input<decl::Float>("Temperature")
|
||||
.default_value(1500.0f)
|
||||
.min(800.0f)
|
||||
.max(12000.0f)
|
||||
.subtype(PROP_COLOR_TEMPERATURE);
|
||||
b.add_output<decl::Color>("Color");
|
||||
}
|
||||
|
||||
|
||||
@@ -38,7 +38,11 @@ static void node_declare(NodeDeclarationBuilder &b)
|
||||
#define SOCK_BLACKBODY_INTENSITY_ID 8
|
||||
b.add_input<decl::Color>("Blackbody Tint").default_value({1.0f, 1.0f, 1.0f, 1.0f});
|
||||
#define SOCK_BLACKBODY_TINT_ID 8
|
||||
b.add_input<decl::Float>("Temperature").default_value(1000.0f).min(0.0f).max(6500.0f);
|
||||
b.add_input<decl::Float>("Temperature")
|
||||
.default_value(1000.0f)
|
||||
.min(0.0f)
|
||||
.max(6500.0f)
|
||||
.subtype(PROP_COLOR_TEMPERATURE);
|
||||
b.add_input<decl::String>("Temperature Attribute").default_value("temperature");
|
||||
b.add_input<decl::Float>("Weight").unavailable();
|
||||
b.add_output<decl::Shader>("Volume").translation_context(BLT_I18NCONTEXT_ID_ID);
|
||||
|
||||
@@ -53,6 +53,7 @@ static const char *bpyunits_ucategories_items[] = {
|
||||
"POWER",
|
||||
"TEMPERATURE",
|
||||
"WAVELENGTH",
|
||||
"COLOR_TEMPERATURE",
|
||||
nullptr,
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user