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:
authorTon Roosendaal <ton@blender.org>2004-07-03 02:29:06 +0400
committerTon Roosendaal <ton@blender.org>2004-07-03 02:29:06 +0400
commit90d4f7a3c1f6f789df61f348f974813a260014f5 (patch)
treebc22ac2605ab65f5a09b7e49fe97127cb6f0de3c /source/blender
parent326f3c3d6a40a5d31189d903c87e5fe23f132b40 (diff)
Added new operators for "MapTo" panel as suggested & partially coded by
Kent Mein. So next to the mix, mult, add, sub we have now: - Div: divides by texture color - Screen: is like Mult, but works opposite (makes lighter) - Diff: the difference between texture color and material - Light: if texture is lighter it shows (per component) - Dark: if texture is darker it shows (per component) Next step: add this for specular and mirror, and the other channels... I commit it now because it also fixes error in previous commit.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/makesdna/DNA_texture_types.h5
-rw-r--r--source/blender/render/intern/source/texture.c69
-rw-r--r--source/blender/src/buttons_shading.c16
3 files changed, 80 insertions, 10 deletions
diff --git a/source/blender/makesdna/DNA_texture_types.h b/source/blender/makesdna/DNA_texture_types.h
index c637a5e1e76..8e6ec495f52 100644
--- a/source/blender/makesdna/DNA_texture_types.h
+++ b/source/blender/makesdna/DNA_texture_types.h
@@ -272,6 +272,11 @@ typedef struct Tex {
#define MTEX_MUL 1
#define MTEX_ADD 2
#define MTEX_SUB 3
+#define MTEX_DIV 4
+#define MTEX_DARK 5
+#define MTEX_DIFF 6
+#define MTEX_LIGHT 7
+#define MTEX_SCREEN 8
/* **************** EnvMap ********************* */
diff --git a/source/blender/render/intern/source/texture.c b/source/blender/render/intern/source/texture.c
index 229935ab7fe..de7bb59c359 100644
--- a/source/blender/render/intern/source/texture.c
+++ b/source/blender/render/intern/source/texture.c
@@ -1118,7 +1118,7 @@ int multitex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex)
/* fact = texture strength, facg = button strength value */
static void texture_rgb_blend(float *in, float *tex, float *out, float fact, float facg, int blendtype, int alphatype)
{
- float facm;
+ float facm, col;
switch(blendtype) {
case MTEX_BLEND:
@@ -1139,6 +1139,7 @@ static void texture_rgb_blend(float *in, float *tex, float *out, float fact, flo
in[1]= (fact*tex[1] + facm*out[1]);
in[2]= (fact*tex[2] + facm*out[2]);
break;
+
case MTEX_MUL:
fact*= facg;
facm= 1.0-facg;
@@ -1146,6 +1147,15 @@ static void texture_rgb_blend(float *in, float *tex, float *out, float fact, flo
in[1]= (facm+fact*tex[1])*out[1];
in[2]= (facm+fact*tex[2])*out[2];
break;
+
+ case MTEX_SCREEN:
+ fact*= facg;
+ facm= 1.0-facg;
+ in[0]= 1.0-(facm+fact*(1.0-tex[0]))*(1.0-out[0]);
+ in[1]= 1.0-(facm+fact*(1.0-tex[1]))*(1.0-out[1]);
+ in[2]= 1.0-(facm+fact*(1.0-tex[2]))*(1.0-out[2]);
+ break;
+
case MTEX_SUB:
fact= -fact;
case MTEX_ADD:
@@ -1153,6 +1163,52 @@ static void texture_rgb_blend(float *in, float *tex, float *out, float fact, flo
in[0]= (fact*tex[0] + out[0]);
in[1]= (fact*tex[1] + out[1]);
in[2]= (fact*tex[2] + out[2]);
+ break;
+
+ case MTEX_DIV:
+ fact*= facg;
+ facm= 1.0-fact;
+
+ if(tex[0]!=0.0)
+ in[0]= facm*out[0] + fact*out[0]/tex[0];
+ if(tex[1]!=0.0)
+ in[1]= facm*out[1] + fact*out[1]/tex[1];
+ if(tex[2]!=0.0)
+ in[2]= facm*out[2] + fact*out[2]/tex[2];
+
+ break;
+
+ case MTEX_DIFF:
+ fact*= facg;
+ facm= 1.0-fact;
+ in[0]= facm*out[0] + fact*fabs(tex[0]-out[0]);
+ in[1]= facm*out[1] + fact*fabs(tex[1]-out[1]);
+ in[2]= facm*out[2] + fact*fabs(tex[2]-out[2]);
+ break;
+
+ case MTEX_DARK:
+ fact*= facg;
+ facm= 1.0-fact;
+
+ col= fact*tex[0];
+ if(col < out[0]) in[0]= col; else in[0]= out[0];
+ col= fact*tex[1];
+ if(col < out[1]) in[1]= col; else in[1]= out[1];
+ col= fact*tex[2];
+ if(col < out[2]) in[2]= col; else in[2]= out[2];
+ break;
+
+ case MTEX_LIGHT:
+ fact*= facg;
+ facm= 1.0-fact;
+
+ col= fact*tex[0];
+ if(col > out[0]) in[0]= col; else in[0]= out[0];
+ col= fact*tex[1];
+ if(col > out[1]) in[1]= col; else in[1]= out[1];
+ col= fact*tex[2];
+ if(col > out[2]) in[2]= col; else in[2]= out[2];
+ break;
}
@@ -1165,8 +1221,8 @@ void do_material_tex(ShadeInput *shi)
Material *mat_spec, *mat_har, *mat_emit, *mat_alpha, *mat_ray_mirr, *mat_translu;
MTex *mtex;
Tex *tex;
- float *co = NULL, *dx = NULL, *dy = NULL, fact,
- facm, factt, facmm, facmul = 0.0, stencilTin=1.0;
+ float *co = NULL, *dx = NULL, *dy = NULL;
+ float fact, facm, factt, facmm, facmul = 0.0, stencilTin=1.0;
float texvec[3], dxt[3], dyt[3], tempvec[3], norvec[3], Tnor=1.0;
int tex_nr, rgbnor= 0;
@@ -1383,10 +1439,11 @@ void do_material_tex(ShadeInput *shi)
else if(mtex->mapto & MAP_ALPHA) {
alphatype= T_ALPHA_TRANSP;
}
- if(Talpha) alphatype |= T_ALPHA_PREMUL;
+ else Tin= Ta;
- Tin= Ta;
-
+ if(Talpha) {
+ alphatype |= T_ALPHA_PREMUL;
+ }
if(mtex->mapto & MAP_COL) {
texture_rgb_blend(&shi->matren->r, tcol, &mat_col->r, Tin, mtex->colfac, mtex->blendtype, alphatype);
mat_col= shi->matren;
diff --git a/source/blender/src/buttons_shading.c b/source/blender/src/buttons_shading.c
index 5d36112a635..25c63218abe 100644
--- a/source/blender/src/buttons_shading.c
+++ b/source/blender/src/buttons_shading.c
@@ -2403,10 +2403,18 @@ static void material_panel_map_to(Material *ma)
uiDefButS(block, TOG3|BIT|12, B_MATPRV, "Disp", 1205,160,55,19, &(mtex->mapto), 0, 0, 0, 0, "Let the texture displace the surface");
uiBlockBeginAlign(block);
- uiDefButS(block, ROW, B_MATPRV, "Mix", 1087,120,48,18, &(mtex->blendtype), 9.0, (float)MTEX_BLEND, 0, 0, "Sets texture to blend the values or colour");
- uiDefButS(block, ROW, B_MATPRV, "Mul", 1136,120,44,18, &(mtex->blendtype), 9.0, (float)MTEX_MUL, 0, 0, "Sets texture to multiply the values or colour");
- uiDefButS(block, ROW, B_MATPRV, "Add", 1182,120,41,18, &(mtex->blendtype), 9.0, (float)MTEX_ADD, 0, 0, "Sets texture to add the values or colour");
- uiDefButS(block, ROW, B_MATPRV, "Sub", 1226,120,40,18, &(mtex->blendtype), 9.0, (float)MTEX_SUB, 0, 0, "Sets texture to subtract the values or colour");
+ uiDefButS(block, ROW, B_MATPRV, "Mix", 1087,133,48,18, &(mtex->blendtype), 9.0, (float)MTEX_BLEND, 0, 0, "Sets texture to blend the values or colour");
+ uiDefButS(block, ROW, B_MATPRV, "Mul", 1136,133,44,18, &(mtex->blendtype), 9.0, (float)MTEX_MUL, 0, 0, "Sets texture to multiply the values or colour");
+ uiDefButS(block, ROW, B_MATPRV, "Add", 1182,133,41,18, &(mtex->blendtype), 9.0, (float)MTEX_ADD, 0, 0, "Sets texture to add the values or colour");
+ uiDefButS(block, ROW, B_MATPRV, "Sub", 1226,133,40,18, &(mtex->blendtype), 9.0, (float)MTEX_SUB, 0, 0, "Sets texture to subtract the values or colour");
+
+ uiDefButS(block, ROW, B_MATPRV, "Div", 1087,115,60,18, &(mtex->blendtype), 9.0, (float)MTEX_DIV, 0, 0, "Sets texture to divide the values or colour");
+ uiDefButS(block, ROW, B_MATPRV, "Screen", 1147,115,60,18, &(mtex->blendtype), 9.0, (float)MTEX_SCREEN, 0, 0, "Sets texture to screen the values or colour");
+ uiDefButS(block, ROW, B_MATPRV, "Diff", 1207,115,59,18, &(mtex->blendtype), 9.0, (float)MTEX_DIFF, 0, 0, "Sets texture to difference the values or colour");
+
+ uiDefButS(block, ROW, B_MATPRV, "Light", 1087,98,90,18, &(mtex->blendtype), 9.0, (float)MTEX_LIGHT, 0, 0, "Sets texture to choose the lighter value");
+ uiDefButS(block, ROW, B_MATPRV, "Dark", 1177,98,89,18, &(mtex->blendtype), 9.0, (float)MTEX_DARK, 0, 0, "Sets texture to choose the darker");
+
uiBlockBeginAlign(block);
uiDefButF(block, NUMSLI, B_MATPRV, "Col ", 1087,70,179,18, &(mtex->colfac), 0.0, 1.0, 0, 0, "Sets the amount the texture affects colour values");
/* newnoise: increased range to 25, the constant offset for bumpmapping quite often needs a higher nor setting */