Patch from Fred van Essen: six new blending modes.

http://mediawiki.blender.org/index.php/BlenderDev/BlendingModes

Functional in Node editor and Material Ramps.
This commit is contained in:
Ton Roosendaal
2006-06-03 13:26:39 +00:00
parent 71f349e9dd
commit 9ab30b4acb
5 changed files with 99 additions and 3 deletions

View File

@@ -48,6 +48,7 @@
#include "DNA_texture_types.h"
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
#include "BKE_bad_level_calls.h"
#include "BKE_blender.h"
@@ -892,7 +893,94 @@ void ramp_blend(int type, float *r, float *g, float *b, float fac, float *col)
tmp= fac*col[2];
if(tmp > *b) *b= tmp;
}
break;
break;
case MA_RAMP_DODGE:
tmp = 1.0 - fac*col[0];
if(tmp == 0.0)
*r = 1.0;
else if ((*r = (*r) / tmp)> 1.0)
*r = 1.0;
if(g) {
tmp = 1.0 - fac*col[1];
if(tmp == 0.0)
*g = 1.0;
else if ((*g = (*g) / tmp) > 1.0)
*g = 1.0;
tmp = 1.0 - fac*col[2];
if(tmp == 0.0)
*b = 1.0;
else if ((*b = (*b) / tmp) > 1.0)
*b = 1.0;
}
break;
case MA_RAMP_BURN:
tmp = facm + fac*col[0];
if(tmp == 0.0)
*r = 0.0;
else if (( (*r) = (1.0 - (1.0 - (*r)) / tmp )) < 0.0 )
*r = 0.0;
if(g) {
tmp = facm + fac*col[1];
if(tmp == 0.0)
*g = 0.0;
else if (( (*g) = (1.0 - (1.0 - (*g)) / tmp )) < 0.0 )
*g = 0.0;
tmp = facm + fac*col[2];
if(tmp == 0.0)
*b = 0.0;
else if (( (*b) = (1.0 - (1.0 - (*b)) / tmp )) < 0.0 )
*b = 0.0;
}
break;
case MA_RAMP_HUE:
if(g){
float rH,rS,rV;
float colH,colS,colV;
float tmpr,tmpg,tmpb;
rgb_to_hsv(*r,*g,*b,&rH,&rS,&rV);
rgb_to_hsv(col[0],col[1],col[2],&colH,&colS,&colV);
hsv_to_rgb( colH , rS, rV, &tmpr, &tmpg, &tmpb);
*r = facm*(*r) + fac*tmpr;
*g = facm*(*g) + fac*tmpg;
*b = facm*(*b) + fac*tmpb;
}
break;
case MA_RAMP_SAT:
if(g){
float rH,rS,rV;
float colH,colS,colV;
rgb_to_hsv(*r,*g,*b,&rH,&rS,&rV);
rgb_to_hsv(col[0],col[1],col[2],&colH,&colS,&colV);
hsv_to_rgb( rH, (facm*rS +fac*colS), rV, r, g, b);
}
break;
case MA_RAMP_VAL:
if(g){
float rH,rS,rV;
float colH,colS,colV;
rgb_to_hsv(*r,*g,*b,&rH,&rS,&rV);
rgb_to_hsv(col[0],col[1],col[2],&colH,&colS,&colV);
hsv_to_rgb( rH, rS, (facm*rV +fac*colV), r, g, b);
}
break;
case MA_RAMP_COLOR:
if(g){
float rH,rS,rV;
float colH,colS,colV;
float tmpr,tmpg,tmpb;
rgb_to_hsv(*r,*g,*b,&rH,&rS,&rV);
rgb_to_hsv(col[0],col[1],col[2],&colH,&colS,&colV);
hsv_to_rgb( colH, colS, rV, &tmpr, &tmpg, &tmpb);
*r = facm*(*r) + fac*tmpr;
*g = facm*(*g) + fac*tmpg;
*b = facm*(*b) + fac*tmpb;
}
break;
}
}

View File

@@ -200,6 +200,12 @@ typedef struct Material {
#define MA_RAMP_DARK 7
#define MA_RAMP_LIGHT 8
#define MA_RAMP_OVERLAY 9
#define MA_RAMP_DODGE 10
#define MA_RAMP_BURN 11
#define MA_RAMP_HUE 12
#define MA_RAMP_SAT 13
#define MA_RAMP_VAL 14
#define MA_RAMP_COLOR 15
/* texco */
#define TEXCO_ORCO 1

View File

@@ -3033,7 +3033,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|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)");
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|Dodge %x10|Burn %x11|Color %x15|Lightness %14|Saturation %13|Hue %12",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

@@ -270,7 +270,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|Overlay %x9|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|Dodge %x10|Burn %x11|Color %x15|Lightness %x14|Saturation %x13|Hue %x12",
butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20,
&node->custom1, 0, 0, 0, 0, "");
uiButSetFunc(bt, node_but_title_cb, node, bt);

View File

@@ -65,6 +65,7 @@
#include "BKE_action.h"
#include "BKE_constraint.h"
#include "BKE_global.h"
#include "BKE_ipo.h"
#include "BKE_key.h"
#include "BKE_main.h"
#include "BKE_material.h"
@@ -85,6 +86,7 @@
#include "BIF_resources.h"
#include "BIF_screen.h"
#include "BIF_space.h"
#include "BIF_toolbox.h"
#include "nla.h"