Compositor: Added Weighted Standard Curve evaluation
Available in RGB Curve node in the compositor and as modifier in the sequencer. I reshuffled the values of the enum. But a the first commit is just 1 day old I think that the order is more important than the file compatibility.
This commit is contained in:
parent
f029aefe3e
commit
b8c9df6f21
Notes:
blender-bot
2023-02-14 07:45:38 +01:00
Referenced by commit 5d3c815c2f
, Revert "Compositor: Added Weighted Standard Curve evaluation"
Referenced by issue #56523, Enable/Disable Viewport Visibility Bug
Referenced by issue #56524, Navigate Gizmo obscured by objects
Referenced by issue #56525, Missing images in Texture Slots
|
@ -953,6 +953,28 @@ static void curvemapping_evaluateRGBF_filmlike(const CurveMapping *cumap, float
|
|||
vecout[channel_offset[1]] = v1;
|
||||
vecout[channel_offset[2]] = v2;
|
||||
}
|
||||
|
||||
static float curvemapping_weighted_standard_triangle(float a, float b, float a1)
|
||||
{
|
||||
if (a != b)
|
||||
{
|
||||
float b1;
|
||||
float a2 = a1 - a;
|
||||
|
||||
if (b < a)
|
||||
{
|
||||
b1 = b + a2 * b / a ;
|
||||
}
|
||||
else {
|
||||
b1 = b + a2 * (65535.f - b) / (65535.f - a);
|
||||
}
|
||||
|
||||
return b1;
|
||||
}
|
||||
|
||||
return a1;
|
||||
}
|
||||
|
||||
/** same as #curvemapping_evaluate_premulRGBF
|
||||
* but black/bwmul are passed as args for the compositor
|
||||
* where they can change per pixel.
|
||||
|
@ -970,7 +992,8 @@ void curvemapping_evaluate_premulRGBF_ex(
|
|||
const float g = (vecin[1] - black[1]) * bwmul[1];
|
||||
const float b = (vecin[2] - black[2]) * bwmul[2];
|
||||
|
||||
switch (cumap->tone) {
|
||||
switch (cumap->tone)
|
||||
{
|
||||
default:
|
||||
case CURVE_TONE_STANDARD:
|
||||
{
|
||||
|
@ -979,6 +1002,25 @@ void curvemapping_evaluate_premulRGBF_ex(
|
|||
vecout[2] = curvemap_evaluateF(&cumap->cm[2], b);
|
||||
break;
|
||||
}
|
||||
case CURVE_TONE_WEIGHTED_STANDARD:
|
||||
{
|
||||
float r1 = curvemap_evaluateF(&cumap->cm[0], r);
|
||||
float g1 = curvemapping_weighted_standard_triangle(r, r1, g);
|
||||
float b1 = curvemapping_weighted_standard_triangle(r, r1, b);
|
||||
|
||||
float g2 = curvemap_evaluateF(&cumap->cm[1], g);
|
||||
float r2 = curvemapping_weighted_standard_triangle(g, g2, r);
|
||||
float b2 = curvemapping_weighted_standard_triangle(g, g2, b);
|
||||
|
||||
float b3 = curvemap_evaluateF(&cumap->cm[2], b);
|
||||
float r3 = curvemapping_weighted_standard_triangle(b, b3, r);
|
||||
float g3 = curvemapping_weighted_standard_triangle(b, b3, g);
|
||||
|
||||
vecout[0] = r1 * 0.50f + r2 * 0.25f + r3 * 0.25f;
|
||||
vecout[1] = g1 * 0.25f + g2 * 0.50f + g3 * 0.25f;
|
||||
vecout[2] = b1 * 0.25f + b2 * 0.25f + b3 * 0.50f;
|
||||
break;
|
||||
}
|
||||
case CURVE_TONE_FILMLIKE:
|
||||
{
|
||||
if (r >= g) {
|
||||
|
|
|
@ -2965,7 +2965,7 @@ static void curvemap_buttons_layout(
|
|||
|
||||
if (tone) {
|
||||
split = uiLayoutSplit(layout, 0.0f, false);
|
||||
uiItemR(uiLayoutRow(split, false), ptr, "tone", UI_ITEM_R_EXPAND, NULL, ICON_NONE);
|
||||
uiItemR(uiLayoutRow(split, false), ptr, "tone", 0, NULL, ICON_NONE);
|
||||
}
|
||||
|
||||
/* curve chooser */
|
||||
|
|
|
@ -107,8 +107,9 @@ typedef enum eCurveMappingPreset {
|
|||
|
||||
/* CurveMapping->tone */
|
||||
typedef enum eCurveMappingTone {
|
||||
CURVE_TONE_STANDARD = 0,
|
||||
CURVE_TONE_FILMLIKE = 1,
|
||||
CURVE_TONE_STANDARD = 0,
|
||||
CURVE_TONE_WEIGHTED_STANDARD = 1,
|
||||
CURVE_TONE_FILMLIKE = 2,
|
||||
} eCurveMappingTone;
|
||||
|
||||
/* histogram->mode */
|
||||
|
|
|
@ -764,8 +764,9 @@ static void rna_def_curvemapping(BlenderRNA *brna)
|
|||
FunctionRNA *func;
|
||||
|
||||
static const EnumPropertyItem tone_items[] = {
|
||||
{CURVE_TONE_STANDARD, "STANDARD", 0, "Standard", ""},
|
||||
{CURVE_TONE_FILMLIKE, "FILMLIKE", 0, "Film like", ""},
|
||||
{CURVE_TONE_STANDARD, "STANDARD", 0, "Standard", ""},
|
||||
{CURVE_TONE_WEIGHTED_STANDARD, "WEIGHTED", 0, "Weighted Standard", ""},
|
||||
{CURVE_TONE_FILMLIKE, "FILMLIKE", 0, "Film like", ""},
|
||||
{0, NULL, 0, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue