From ca252e39f59a0ca71aba06bf93e40b86029f0d72 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 6 Jul 2010 10:21:28 +0000 Subject: Correction to recent color balance compositor and sequencer changes. - In my changes lift was acting like a second gamma. - In blender 2.4x it was being added which gave ugly clipping. - in Magic Bullet Looks it scales the color about 1.0: (col - 1 * (2-lift)) + 1 Did more testing and made sure the order of applying lift/gamma/gain works the same as MagicBulletLooks (tested on Collin's mac laptop). --- source/blender/blenkernel/intern/sequencer.c | 8 ++++---- source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c | 9 +++++---- 2 files changed, 9 insertions(+), 8 deletions(-) (limited to 'source/blender') diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index a4c1527c3c5..bd3e0129bcc 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -1494,7 +1494,7 @@ static StripColorBalance calc_cb(StripColorBalance * cb_) int c; for (c = 0; c < 3; c++) { - cb.lift[c] = 2.0f - pow(cb.lift[c], 2); + cb.lift[c] = 2.0f - cb.lift[c]; } if(cb.flag & SEQ_COLOR_BALANCE_INVERSE_LIFT) { @@ -1526,10 +1526,10 @@ static StripColorBalance calc_cb(StripColorBalance * cb_) return cb; } -/* pow(p[c] * cb.gain[c] + cb.lift[c], cb.gamma[c]) * mul;*/ -MINLINE float color_balance_fl(const float v, const float lift, const float gain, const float gamma, const float mul) +/* note: lift is actually 2-lift */ +MINLINE float color_balance_fl(float v, const float lift, const float gain, const float gamma, const float mul) { - return powf(powf(v * gain, lift), gamma) * mul; + return powf((((v - 1.0f) * lift) + 1.0f) * gain, gamma) * mul; } static void make_cb_table_byte(float lift, float gain, float gamma, diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c b/source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c index f2e5815dfeb..cd614b12794 100644 --- a/source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c +++ b/source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c @@ -54,9 +54,10 @@ DO_INLINE float colorbalance_cdl(float in, float offset, float power, float slop return powf(x, 1.f/power); } -DO_INLINE float colorbalance_lgg(float in, float lift, float gamma, float gain) -{ - float x= powf(in * gain, lift); +/* note: lift_lgg is just 2-lift */ +DO_INLINE float colorbalance_lgg(float in, float lift_lgg, float gamma, float gain) +{ + float x= (((in - 1.0f) * lift_lgg) + 1.0f) * gain; /* prevent NaN */ if (x < 0.f) x = 0.f; @@ -124,7 +125,7 @@ static void node_composit_exec_colorbalance(void *data, bNode *node, bNodeStack NodeColorBalance *n= (NodeColorBalance *)node->storage; int c; for (c = 0; c < 3; c++) { - n->lift_lgg[c] = 2.0f - pow(n->lift[c], 2); + n->lift_lgg[c] = 2.0f - n->lift[c]; } } -- cgit v1.2.3