Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen Bakker <j.bakker@atmind.nl>2018-08-24 11:04:33 +0300
committerJeroen Bakker <j.bakker@atmind.nl>2018-08-24 11:04:33 +0300
commitb8c9df6f21587014cb6f11aa5bed6f9c1044e6ee (patch)
treeb106ebde0ac8edda4ec69ccc45f494a407bae5c4 /source/blender
parentf029aefe3e051d213292cf0d9be20d5438ca618f (diff)
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.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/intern/colortools.c44
-rw-r--r--source/blender/editors/interface/interface_templates.c2
-rw-r--r--source/blender/makesdna/DNA_color_types.h5
-rw-r--r--source/blender/makesrna/intern/rna_color.c5
4 files changed, 50 insertions, 6 deletions
diff --git a/source/blender/blenkernel/intern/colortools.c b/source/blender/blenkernel/intern/colortools.c
index c934adc8762..0684231480b 100644
--- a/source/blender/blenkernel/intern/colortools.c
+++ b/source/blender/blenkernel/intern/colortools.c
@@ -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) {
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index 9c4e7faa73e..27805f2cf1e 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -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 */
diff --git a/source/blender/makesdna/DNA_color_types.h b/source/blender/makesdna/DNA_color_types.h
index fe158f85cd9..def1a2bad91 100644
--- a/source/blender/makesdna/DNA_color_types.h
+++ b/source/blender/makesdna/DNA_color_types.h
@@ -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 */
diff --git a/source/blender/makesrna/intern/rna_color.c b/source/blender/makesrna/intern/rna_color.c
index 4cbe365167c..f91be9ae1e9 100644
--- a/source/blender/makesrna/intern/rna_color.c
+++ b/source/blender/makesrna/intern/rna_color.c
@@ -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}
};