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).
This commit is contained in:
@@ -1494,7 +1494,7 @@ static StripColorBalance calc_cb(StripColorBalance * cb_)
|
|||||||
int c;
|
int c;
|
||||||
|
|
||||||
for (c = 0; c < 3; 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) {
|
if(cb.flag & SEQ_COLOR_BALANCE_INVERSE_LIFT) {
|
||||||
@@ -1526,10 +1526,10 @@ static StripColorBalance calc_cb(StripColorBalance * cb_)
|
|||||||
return cb;
|
return cb;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* pow(p[c] * cb.gain[c] + cb.lift[c], cb.gamma[c]) * mul;*/
|
/* note: lift is actually 2-lift */
|
||||||
MINLINE float color_balance_fl(const float v, const float lift, const float gain, const float gamma, const float mul)
|
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,
|
static void make_cb_table_byte(float lift, float gain, float gamma,
|
||||||
|
|||||||
@@ -54,9 +54,10 @@ DO_INLINE float colorbalance_cdl(float in, float offset, float power, float slop
|
|||||||
return powf(x, 1.f/power);
|
return powf(x, 1.f/power);
|
||||||
}
|
}
|
||||||
|
|
||||||
DO_INLINE float colorbalance_lgg(float in, float lift, float gamma, float gain)
|
/* note: lift_lgg is just 2-lift */
|
||||||
{
|
DO_INLINE float colorbalance_lgg(float in, float lift_lgg, float gamma, float gain)
|
||||||
float x= powf(in * gain, lift);
|
{
|
||||||
|
float x= (((in - 1.0f) * lift_lgg) + 1.0f) * gain;
|
||||||
|
|
||||||
/* prevent NaN */
|
/* prevent NaN */
|
||||||
if (x < 0.f) x = 0.f;
|
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;
|
NodeColorBalance *n= (NodeColorBalance *)node->storage;
|
||||||
int c;
|
int c;
|
||||||
for (c = 0; c < 3; 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];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user