Added blending type "Overlay" to options for Mix node & ramp shaders.

The description is here; it blends nicely bright parts.
http://www.pegtop.net/delphi/articles/blendmodes/overlay.htm
This commit is contained in:
Ton Roosendaal
2006-02-14 18:41:34 +00:00
parent acb5f6e79f
commit 1c7187f4fc
4 changed files with 19 additions and 2 deletions

View File

@@ -829,6 +829,22 @@ void ramp_blend(int type, float *r, float *g, float *b, float fac, float *col)
*b = 1.0 - (facm + fac*(1.0 - col[2])) * (1.0 - *b);
}
break;
case MA_RAMP_OVERLAY:
if(*r < 0.5f)
*r *= (facm + fac*col[0]);
else
*r = 1.0 - (facm + fac*(1.0 - col[0])) * (1.0 - *r);
if(g) {
if(*g < 0.5f)
*g *= (facm + fac*col[1]);
else
*g = 1.0 - (facm + fac*(1.0 - col[1])) * (1.0 - *g);
if(*b < 0.5f)
*b *= (facm + fac*col[2]);
else
*b = 1.0 - (facm + fac*(1.0 - col[2])) * (1.0 - *b);
}
break;
case MA_RAMP_SUB:
*r -= fac*col[0];
if(g) {

View File

@@ -199,6 +199,7 @@ typedef struct Material {
#define MA_RAMP_DIFF 6
#define MA_RAMP_DARK 7
#define MA_RAMP_LIGHT 8
#define MA_RAMP_OVERLAY 9
/* texco */
#define TEXCO_ORCO 1

View File

@@ -3019,7 +3019,7 @@ static void material_panel_ramps(Material *ma)
uiDefBut(block, LABEL, 0, "Factor",190,30,120,20, NULL, 0, 0, 0, 0, "");
uiBlockBeginAlign(block);
uiDefButC(block, MENU, B_MATPRV, "Shader %x0|Energy %x1|Normal %x2|Result %x3",10,10,90,20, inputc, 0, 0, 0, 0, "Input for Ramp");
uiDefButC(block, MENU, B_MATPRV, "Mix %x0|Add %x1|Subtract %x3|Multiply %x2|Screen %x4|Divide %x5|Difference %x6|Darken %x7|Lighten %x8",110,10,90,20, methodc, 0, 0, 0, 0, "Blending method for Ramp (uses alpha in Colorband)");
uiDefButC(block, MENU, B_MATPRV, "Mix %x0|Add %x1|Subtract %x3|Multiply %x2|Screen %x4|Overlay %x9|Divide %x5|Difference %x6|Darken %x7|Lighten %x8",110,10,90,20, methodc, 0, 0, 0, 0, "Blending method for Ramp (uses alpha in Colorband)");
uiDefButF(block, NUMSLI, B_MATPRV, "", 190,10,120,20, facp, 0.0, 1.0, 100, 0, "Blending factor (also uses alpha in Colorband)");
}
}

View File

@@ -248,7 +248,7 @@ static int node_buts_mix_rgb(uiBlock *block, bNodeTree *ntree, bNode *node, rctf
uiBut *bt;
/* blend type */
bt=uiDefButS(block, MENU, B_NODE_EXEC+node->nr, "Mix %x0|Add %x1|Subtract %x3|Multiply %x2|Screen %x4|Divide %x5|Difference %x6|Darken %x7|Lighten %x8",
bt=uiDefButS(block, MENU, B_NODE_EXEC+node->nr, "Mix %x0|Add %x1|Subtract %x3|Multiply %x2|Screen %x4|Overlay %x9|Divide %x5|Difference %x6|Darken %x7|Lighten %x8",
butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20,
&node->custom1, 0, 0, 0, 0, "");
uiButSetFunc(bt, node_but_title_cb, node, bt);