Index: source/blender/blenkernel/intern/anim.c =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/blenkernel/intern/anim.c,v retrieving revision 1.29 diff -u -b -B -u -r1.29 anim.c --- source/blender/blenkernel/intern/anim.c 21 Nov 2005 11:30:53 -0000 1.29 +++ source/blender/blenkernel/intern/anim.c 9 Dec 2005 19:54:53 -0000 @@ -277,6 +277,7 @@ newob= MEM_mallocN(sizeof(Object), "newobj dupli"); + ob->serial++; memcpy(newob, ob, sizeof(Object)); newob->flag |= OB_FROMDUPLI; newob->id.newid= (ID *)par; /* store duplicator */ Index: source/blender/blenkernel/intern/material.c =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/blenkernel/intern/material.c,v retrieving revision 1.33 diff -u -b -B -u -r1.33 material.c --- source/blender/blenkernel/intern/material.c 27 Nov 2005 12:19:11 -0000 1.33 +++ source/blender/blenkernel/intern/material.c 9 Dec 2005 19:54:53 -0000 @@ -70,10 +70,13 @@ mtex= ma->mtex[a]; if(mtex && mtex->tex) mtex->tex->id.us--; if(mtex) MEM_freeN(mtex); + ma->mtex[a]= NULL; } if(ma->ramp_col) MEM_freeN(ma->ramp_col); + ma->ramp_col= NULL; if(ma->ramp_spec) MEM_freeN(ma->ramp_spec); + ma->ramp_spec= NULL; } void init_material(Material *ma) @@ -102,6 +105,9 @@ ma->param[3]= 0.1; ma->rms= 0.1; ma->darkness= 1.0; + + ma->diversity= 0.0; + ma->diversify= MA_DIVERSE_NONE; ma->strand_sta= ma->strand_end= 1.0f; Index: source/blender/makesdna/DNA_ipo_types.h =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/makesdna/DNA_ipo_types.h,v retrieving revision 1.17 diff -u -b -B -u -r1.17 DNA_ipo_types.h --- source/blender/makesdna/DNA_ipo_types.h 2 Oct 2005 20:51:35 -0000 1.17 +++ source/blender/makesdna/DNA_ipo_types.h 9 Dec 2005 19:54:53 -0000 @@ -111,7 +111,7 @@ /* ******************** */ #define MA_TOTIPO 40 -#define MA_TOTNAM 26 +#define MA_TOTNAM 27 #define MA_COL_R 1 #define MA_COL_G 2 @@ -139,6 +139,7 @@ #define MA_FRESTRA 24 #define MA_FRESTRAI 25 #define MA_ADD 26 +#define MA_DIVERSIT 27 #define MA_MAP1 0x20 #define MA_MAP2 0x40 Index: source/blender/makesdna/DNA_material_types.h =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/makesdna/DNA_material_types.h,v retrieving revision 1.31 diff -u -b -B -u -r1.31 DNA_material_types.h --- source/blender/makesdna/DNA_material_types.h 27 Nov 2005 12:19:12 -0000 1.31 +++ source/blender/makesdna/DNA_material_types.h 9 Dec 2005 19:54:53 -0000 @@ -69,6 +69,10 @@ short har; char seed1, seed2; + /* for duplimats */ + float diversity; + int diversify; + int mode; int mode2; /* even more material settings :) */ short flarec, starc, linec, ringc; @@ -232,6 +236,30 @@ /* pr_back */ #define MA_DARK 1 + +/* diversify (see buttons_shading.c) */ +#define MA_DIVERSE_NONE 0x0000 +#define MA_DIVERSE_DIFF_COLOR 0x0001 +#define MA_DIVERSE_SPEC_COLOR 0x0002 +#define MA_DIVERSE_MIRR_COLOR 0x0004 +#define MA_DIVERSE_DIFF 0x0008 +#define MA_DIVERSE_SPEC 0x0010 +#define MA_DIVERSE_MIRROR 0x0020 +#define MA_DIVERSE_TRANSLUC 0x0040 +#define MA_DIVERSE_ALPHA 0x0080 +#define MA_DIVERSE_EMIT 0x0100 +#define MA_DIVERSE_AMBIENT 0x0200 +#define TX_DIVERSE_NONE 0x0000 +#define TX_DIVERSE_COLOR 0x0001 +#define TX_DIVERSE_COLOR_AMOUNT 0x0002 +#define TX_DIVERSE_OFF_X 0x0004 +#define TX_DIVERSE_OFF_Y 0x0008 +#define TX_DIVERSE_OFF_Z 0x0010 +#define TX_DIVERSE_SCALE_X 0x0020 +#define TX_DIVERSE_SCALE_Y 0x0040 +#define TX_DIVERSE_SCALE_Z 0x0080 +#define TX_DIVERSE_NORMAL 0x0100 +#define TX_DIVERSE_OTHER 0x0200 #endif Index: source/blender/makesdna/DNA_object_types.h =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/makesdna/DNA_object_types.h,v retrieving revision 1.43 diff -u -b -B -u -r1.43 DNA_object_types.h --- source/blender/makesdna/DNA_object_types.h 17 Nov 2005 18:01:07 -0000 1.43 +++ source/blender/makesdna/DNA_object_types.h 9 Dec 2005 19:54:53 -0000 @@ -102,6 +102,7 @@ ListBase modifiers; /* list of ModifierData structures */ struct Material **mat; + int serial, serial2; /* for during render, incremented per duplivert, okay to wrap */ /* rot en drot have to be together! (transform('r' en 's')) */ float loc[3], dloc[3], orig[3]; Index: source/blender/makesdna/DNA_texture_types.h =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/makesdna/DNA_texture_types.h,v retrieving revision 1.20 diff -u -b -B -u -r1.20 DNA_texture_types.h --- source/blender/makesdna/DNA_texture_types.h 19 Sep 2005 13:00:44 -0000 1.20 +++ source/blender/makesdna/DNA_texture_types.h 9 Dec 2005 19:54:53 -0000 @@ -61,6 +61,8 @@ float dispfac; float warpfac; + float diversity; + int diversify; } MTex; #ifndef DNA_USHORT_FIX @@ -320,6 +322,21 @@ /* ok */ #define ENV_NORMAL 1 #define ENV_OSA 2 + +/* diversify (see buttons_shading.c) */ +#define MTEX_DIVERSE_NONE 0x0000 +#define MTEX_DIVERSE_COLOR 0x0001 +#define MTEX_DIVERSE_COLOR_FAC 0x0002 +#define MTEX_DIVERSE_OFF_X 0x0004 +#define MTEX_DIVERSE_OFF_Y 0x0008 +#define MTEX_DIVERSE_OFF_Z 0x0010 +#define MTEX_DIVERSE_SCALE_X 0x0020 +#define MTEX_DIVERSE_SCALE_Y 0x0040 +#define MTEX_DIVERSE_SCALE_Z 0x0080 +#define MTEX_DIVERSE_NORMAL 0x0100 +#define MTEX_DIVERSE_DISP 0x0200 +#define MTEX_DIVERSE_WARP 0x0400 +#define MTEX_DIVERSE_OTHER 0x0800 #endif Index: source/blender/render/extern/include/render.h =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/render/extern/include/render.h,v retrieving revision 1.18 diff -u -b -B -u -r1.18 render.h --- source/blender/render/extern/include/render.h 29 Sep 2005 13:19:06 -0000 1.18 +++ source/blender/render/extern/include/render.h 9 Dec 2005 19:54:54 -0000 @@ -115,6 +115,9 @@ void RE_make_existing_file(char *name); void RE_floatbuffer_to_output(void); +void RE_diversify_material(struct Material* ma, int hash); +void RE_free_matren_data(void); + /* ------------------------------------------------------------------------- */ /* zbuf (2) */ /* ------------------------------------------------------------------------- */ @@ -202,6 +205,7 @@ struct VlakRen *RE_findOrAddVlak(int nr); struct VertRen *RE_findOrAddVert(int nr); struct HaloRen *RE_findOrAddHalo(int nr); +struct MatRen *RE_findOrAddMat(struct Material *ma, short hash); HaloRen *RE_inithalo(struct Material *ma, float *vec, float *vec1, float *orco, float hasize, float vectsize, int seed); Index: source/blender/render/extern/include/render_types.h =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/render/extern/include/render_types.h,v retrieving revision 1.34 diff -u -b -B -u -r1.34 render_types.h --- source/blender/render/extern/include/render_types.h 23 Nov 2005 15:20:45 -0000 1.34 +++ source/blender/render/extern/include/render_types.h 9 Dec 2005 19:54:54 -0000 @@ -136,13 +136,17 @@ World wrld; ListBase parts; - int totvlak, totvert, tothalo, totlamp; + int totvlak, totvert, tothalo, totlamp, totmat, totmatren; - /* internal, fortunately */ + /* internal, fortunately + * The blovl,blove,bloha are growing arrays, allocated a block at a time. + * The hasma is an array of linked-lists, forming a growing hashtable. + */ struct LampRen **la; struct VlakRen **blovl; struct VertRen **blove; struct HaloRen **bloha; + struct MatRen **hasma; /* arena for allocating data for use during render, for * example dynamic TFaces to go in the VlakRen structure. @@ -182,6 +186,16 @@ long *zbuf; char *cbuf; } ShadBuf; + +/* ------------------------------------------------------------------------- */ + +typedef struct MatRen +{ + struct Material *original; /* material on which a duplimat was based */ + struct Material *material; /* derived material to be used */ + short hash; /* hash made by mashing unique string names */ + struct MatRen *next; /* hashtable chains built by findOrAddMat */ +} MatRen; /* ------------------------------------------------------------------------- */ Index: source/blender/render/intern/source/initrender.c =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/render/intern/source/initrender.c,v retrieving revision 1.69 diff -u -b -B -u -r1.69 initrender.c --- source/blender/render/intern/source/initrender.c 23 Nov 2005 15:20:45 -0000 1.69 +++ source/blender/render/intern/source/initrender.c 9 Dec 2005 19:54:54 -0000 @@ -511,6 +511,7 @@ R.blove= (VertRen **)MEM_callocN(sizeof(void *)*(TABLEINITSIZE),"Blove"); R.blovl= (VlakRen **)MEM_callocN(sizeof(void *)*(TABLEINITSIZE),"Blovl"); R.bloha= (HaloRen **)MEM_callocN(sizeof(void *)*(TABLEINITSIZE),"Bloha"); + R.hasma= (MatRen **)MEM_callocN(sizeof(void *)*(TABLEINITSIZE),"Hasma"); R.la= (LampRen **)MEM_mallocN(LAMPINITSIZE*sizeof(void *),"renderlamparray"); init_def_material(); @@ -535,7 +536,9 @@ R.rectftot= NULL; R.rectz= NULL; R.rectspare= NULL; - + RE_free_matren_data(); + MEM_freeN(R.hasma); + R.hasma= NULL; end_render_material(&defmaterial); free_filt_mask(); } @@ -1255,6 +1258,8 @@ set_mblur_offs(0); + RE_free_matren_data(); + /* mutexes free */ SDL_DestroyMutex(load_ibuf_lock); SDL_DestroyMutex(render_abuf_lock); Index: source/blender/render/intern/source/renderdatabase.c =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/render/intern/source/renderdatabase.c,v retrieving revision 1.12 diff -u -b -B -u -r1.12 renderdatabase.c --- source/blender/render/intern/source/renderdatabase.c 28 Mar 2005 21:49:48 -0000 1.12 +++ source/blender/render/intern/source/renderdatabase.c 9 Dec 2005 19:54:54 -0000 @@ -70,6 +70,12 @@ #include "BKE_texture.h" +#include "BKE_main.h" +#include "BKE_global.h" +#include "BKE_library.h" +#include "BKE_material.h" +#include "BLI_rand.h" + #include "render.h" /* ------------------------------------------------------------------------- */ @@ -172,6 +178,153 @@ } v+= (nr & 255); return v; +} + +/* ------------------------------------------------------------------------ */ + +MatRen *RE_findOrAddMat(Material *original, short hash) +{ + MatRen *mr; + short bin= hash % TABLEINITSIZE; + + /* find existing matren matching original and hash */ + mr= R.hasma[bin]; + while (mr) { + if (mr->original == original && mr->hash == hash) + return mr; + mr= mr->next; + } + + /* add a new matren at the head of its chain */ + mr= (MatRen*)MEM_callocN(sizeof(MatRen), "MatRen"); + mr->next = R.hasma[bin]; + R.hasma[bin]= mr; + R.totmatren++; + + /* keep the original for later checks */ + mr->original= original; + mr->hash= hash; + + /* for materials supporting diversity, clone the material and diversify it now */ + mr->material= copy_material(original); + if (mr->material) { + R.totmat++; + mr->material->id.us= 0; + RE_diversify_material(mr->material, hash); + } + + return mr; +} + +void RE_diversify_material(Material* ma, int hash) +{ +#define dTHREAD 2 + + BLI_thread_srandom(dTHREAD, hash); + float fash; + int channel; + +#define dBOUND(l, v, h) ( (v) < (l)? (l) : ( (v) > (h)? (h) : (v) ) ) +#define dFASH(d) { fash = (BLI_thread_frand(dTHREAD) - 0.5) * 2.0 * d; } + + /* diversify selected values in material itself ("MDiv") */ + if (ma->diversify && ma->diversity > 0.0) + { + if (ma->diversify & MA_DIVERSE_DIFF_COLOR) { + dFASH(ma->diversity); ma->r= dBOUND(0.0, ma->r + fash, 1.0); + dFASH(ma->diversity); ma->g= dBOUND(0.0, ma->g + fash, 1.0); + dFASH(ma->diversity); ma->b= dBOUND(0.0, ma->b + fash, 1.0); + } + if (ma->diversify & MA_DIVERSE_SPEC_COLOR) { + dFASH(ma->diversity); ma->specr= dBOUND(0.0, ma->specr + fash, 1.0); + dFASH(ma->diversity); ma->specg= dBOUND(0.0, ma->specg + fash, 1.0); + dFASH(ma->diversity); ma->specb= dBOUND(0.0, ma->specb + fash, 1.0); + } + if (ma->diversify & MA_DIVERSE_MIRR_COLOR) { + dFASH(ma->diversity); ma->mirr= dBOUND(0.0, ma->mirr + fash, 1.0); + dFASH(ma->diversity); ma->mirg= dBOUND(0.0, ma->mirg + fash, 1.0); + dFASH(ma->diversity); ma->mirb= dBOUND(0.0, ma->mirb + fash, 1.0); + } + if (ma->diversify & MA_DIVERSE_DIFF) + { dFASH(ma->diversity); ma->ref= dBOUND(0.0, ma->ref + fash, 1.0); } + if (ma->diversify & MA_DIVERSE_SPEC) + { dFASH(ma->diversity); ma->spec= dBOUND(0.0, ma->spec + fash, 2.0); } + if (ma->diversify & MA_DIVERSE_MIRROR) + { dFASH(ma->diversity); ma->ray_mirror= dBOUND(0.0, ma->ray_mirror + fash, 1.0); } + if (ma->diversify & MA_DIVERSE_ALPHA) + { dFASH(ma->diversity); ma->alpha= dBOUND(0.0, ma->alpha + fash, 1.0); } + if (ma->diversify & MA_DIVERSE_EMIT) + { dFASH(ma->diversity); ma->emit= dBOUND(0.0, ma->emit + fash, 1.0); } + if (ma->diversify & MA_DIVERSE_AMBIENT) + { dFASH(ma->diversity); ma->amb= dBOUND(0.0, ma->amb + fash, 1.0); } + } + + /* diversify selected values in each mtex channel ("TDiv") */ + for (channel= 0; channel < MAX_MTEX; channel++) + { + MTex* mtex = ma->mtex[channel]; + if (!mtex || !mtex->tex) continue; + if (!mtex->diversify || mtex->diversity <= 0.0) continue; + + if (mtex->diversify & MTEX_DIVERSE_COLOR) { + dFASH(mtex->diversity); mtex->r= dBOUND(0.0, mtex->r + fash, 1.0); + dFASH(mtex->diversity); mtex->g= dBOUND(0.0, mtex->g + fash, 1.0); + dFASH(mtex->diversity); mtex->b= dBOUND(0.0, mtex->b + fash, 1.0); + } + if (mtex->diversify & MTEX_DIVERSE_COLOR_FAC) + { dFASH(mtex->diversity); mtex->colfac= dBOUND(0.0, mtex->colfac + fash, 1.0); } + if (mtex->diversify & MTEX_DIVERSE_NORMAL) + { dFASH(mtex->diversity); mtex->norfac= dBOUND(0.0, mtex->norfac + fash, 25.0); } + if (mtex->diversify & MTEX_DIVERSE_DISP) + { dFASH(mtex->diversity); mtex->dispfac= dBOUND(0.0, mtex->dispfac + fash, 1.0); } + if (mtex->diversify & MTEX_DIVERSE_WARP) + { dFASH(mtex->diversity); mtex->warpfac= dBOUND(0.0, mtex->warpfac + fash, 1.0); } + if (mtex->diversify & MTEX_DIVERSE_OTHER) + { dFASH(mtex->diversity); mtex->varfac= dBOUND(0.0, mtex->varfac + fash, 1.0); } + + /* selected offsets change separately */ + if (mtex->diversify & MTEX_DIVERSE_OFF_X) + { dFASH(mtex->diversity); mtex->ofs[0]= dBOUND(-10.0, mtex->ofs[0] + fash, 10.0); } + if (mtex->diversify & MTEX_DIVERSE_OFF_Y) + { dFASH(mtex->diversity); mtex->ofs[1]= dBOUND(-10.0, mtex->ofs[1] + fash, 10.0); } + if (mtex->diversify & MTEX_DIVERSE_OFF_Z) + { dFASH(mtex->diversity); mtex->ofs[2]= dBOUND(-10.0, mtex->ofs[2] + fash, 10.0); } + + /* selected scales change in unison */ + dFASH(mtex->diversity); + if (mtex->diversify & MTEX_DIVERSE_SCALE_X) + { mtex->size[0]= dBOUND(-100.0, mtex->size[0] + fash, 100.0); } + if (mtex->diversify & MTEX_DIVERSE_SCALE_Y) + { mtex->size[1]= dBOUND(-100.0, mtex->size[1] + fash, 100.0); } + if (mtex->diversify & MTEX_DIVERSE_SCALE_Z) + { mtex->size[2]= dBOUND(-100.0, mtex->size[2] + fash, 100.0); } + } + +#undef dFASH +#undef dBOUND +#undef dTHREAD +} + +void RE_free_matren_data(void) +{ + MatRen *mr; + short bin; + /* unravel the R.hasma hashtable */ + for (bin= 0; bin < TABLEINITSIZE; bin++) { + mr= R.hasma[bin]; + while (mr) { + MatRen *next= mr->next; + if (mr->material) { + free_libblock(&(G.main->mat), mr->material); + mr->material= NULL; + R.totmat--; + } + MEM_freeN(mr); + R.totmatren--; + mr= next; + } + R.hasma[bin]= NULL; + } } /* ------------------------------------------------------------------------- */ Index: source/blender/renderconverter/intern/convertBlenderScene.c =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/renderconverter/intern/convertBlenderScene.c,v retrieving revision 1.181 diff -u -b -B -u -r1.181 convertBlenderScene.c --- source/blender/renderconverter/intern/convertBlenderScene.c 5 Dec 2005 13:22:16 -0000 1.181 +++ source/blender/renderconverter/intern/convertBlenderScene.c 9 Dec 2005 19:54:54 -0000 @@ -1247,6 +1247,23 @@ } +static short hash_string(short* hash, char* string) +{ + int b = 0; + if (!hash) + return 0x1234; + char* pash = (char*)hash; + while (string && *string) + { + pash[b] = pash[b] ^ *string; + string++; + b++; + if (b >= sizeof(*hash)) + b = 0; + } + return *hash; +} + static Material *give_render_material(Object *ob, int nr) { @@ -1264,6 +1281,26 @@ ma= give_current_material(ob, nr); if(ma==NULL) ma= &defmaterial; + if (ob && ma) + { + int diversify = ma->diversify; + int channel; + for (channel = 0; !diversify && channel < MAX_MTEX; channel++) + diversify = diversify || (ma->mtex[channel] && ma->mtex[channel]->diversify); + if (diversify) + { + short hash = (short)ob->serial; + hash_string(&hash, ob->id.name+2); + hash_string(&hash, ma->id.name+2); + MatRen *mr= RE_findOrAddMat(ma, hash); + /* printf("hash got 0x%04X for %d+OB:%s+MA:%s\n", + * hash, ob->serial, ob->id.name+2, ma->id.name+2); + */ + if (mr && mr->material) + ma= mr->material; + } + } + return ma; } @@ -2656,6 +2693,7 @@ ob= G.main->object.first; while(ob) { ob->flag &= ~OB_DONE; + ob->serial= 0; ob= ob->id.next; } Index: source/blender/src/buttons_shading.c =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/src/buttons_shading.c,v retrieving revision 1.158 diff -u -b -B -u -r1.158 buttons_shading.c --- source/blender/src/buttons_shading.c 27 Nov 2005 12:19:12 -0000 1.158 +++ source/blender/src/buttons_shading.c 9 Dec 2005 19:54:54 -0000 @@ -2856,26 +2856,66 @@ else id= (ID*) mtex->tex; IDnames_to_pupstring(&strp, NULL, "ADD NEW %x32767", &(G.main->tex), id, &(G.buts->texnr)); - uiDefButS(block, MENU, B_EXTEXBROWSE, strp, 100,130,20,20, &(G.buts->texnr), 0, 0, 0, 0, "Selects an existing texture or creates new"); + uiDefButS(block, MENU, B_EXTEXBROWSE, strp, 100,132,20,20, &(G.buts->texnr), 0, 0, 0, 0, "Selects an existing texture or creates new"); MEM_freeN(strp); if(id) { - uiDefBut(block, TEX, B_IDNAME, "TE:", 100,150,163,20, id->name+2, 0.0, 18.0, 0, 0, "Displays name of the texture block: click to change"); + uiDefBut(block, TEX, B_IDNAME, "TE:", 100,152,163,20, id->name+2, 0.0, 18.0, 0, 0, "Displays name of the texture block: click to change"); sprintf(str, "%d", id->us); - uiDefBut(block, BUT, 0, str, 196,130,21,20, 0, 0, 0, 0, 0, "Displays number of users of texture"); - uiDefIconBut(block, BUT, B_AUTOTEXNAME, ICON_AUTO, 241,130,21,20, 0, 0, 0, 0, 0, "Auto-assigns name to texture"); + uiDefBut(block, BUT, 0, str, 196,132,21,20, 0, 0, 0, 0, 0, "Displays number of users of texture"); + uiDefIconBut(block, BUT, B_AUTOTEXNAME, ICON_AUTO, 241,132,21,20, 0, 0, 0, 0, 0, "Auto-assigns name to texture"); if(id->lib) { - if(ma->id.lib) uiDefIconBut(block, BUT, 0, ICON_DATALIB, 219,130,21,20, 0, 0, 0, 0, 0, ""); - else uiDefIconBut(block, BUT, 0, ICON_PARLIB, 219,130,21,20, 0, 0, 0, 0, 0, ""); + if(ma->id.lib) uiDefIconBut(block, BUT, 0, ICON_DATALIB, 219,132,21,20, 0, 0, 0, 0, 0, ""); + else uiDefIconBut(block, BUT, 0, ICON_PARLIB, 219,132,21,20, 0, 0, 0, 0, 0, ""); } uiBlockSetCol(block, TH_AUTO); - uiDefBut(block, BUT, B_TEXCLEAR, "Clear", 122, 130, 72, 20, 0, 0, 0, 0, 0, "Erases link to texture"); + uiDefBut(block, BUT, B_TEXCLEAR, "Clear", 122, 132, 72, 20, 0, 0, 0, 0, 0, "Erases link to texture"); + } + else { + uiDefButS(block, TOG, B_EXTEXBROWSE, "Add New" ,100, 152, 163, 20, &(G.buts->texnr), -1.0, 32767.0, 0, 0, "Adds a new texture datablock"); + } + if (1) { + char *str1= + "Material's Diversified Values%t" + "|Nothing Varies %x0" + "|Vary Diffuse Color %x1" + "|Vary Specular Color %x2" + "|Vary Mirror Color%x4" + "|Vary Diffuse Reflect %x8" + "|Vary Specular Reflect %x16" + "|Vary Mirror Reflect %x32" + "|Vary Translucency %x64" + "|Vary Alpha %x128" + "|Vary Emittance %x256" + "|Vary Ambient %x512"; + + uiDefButF(block, NUMSLI, B_MATPRV, "MDiv ", 100,108,163,19, &(ma->diversity), 0.0, 10.0, 0, 0, "Sets the amount of diversity for the material's values"); + uiDefButS(block, MENU, B_MATPRV, str1, 100, 88,163,19, &(ma->diversify), 0.0, 0.0, 0, 0, "Selects which material values to diversify"); + } + + if (mtex && id) { + char *str1= + "Channel's Diversified Values%t" + "|Nothing Varies %x0" + "|Vary Color %x1" + "|Vary Max Color Amount %x2" + "|Vary Offset X %x4" + "|Vary Offset Y %x8" + "|Vary Offset Z %x16" + "|Offset X,Y,Z %x28" /* TX_DIVERSE_OFF_X | Y | Z */ + "|Vary Scale X %x32" + "|Vary Scale Y %x64" + "|Vary Scale Z %x128" + "|Scale X,Y,Z %x224" /* TX_DIVERSE_SCALE_X | Y | Z */ + "|Vary Max Normal Amount %x256" + "|Vary Max Displace Amount %x512" + "|Vary Warp Amount %x1024" + "|Vary Other Values %x2048"; + uiDefButF(block, NUMSLI, B_MATPRV, "TDiv ", 100,64,163,19, &(mtex->diversity), 0.0, 10.0, 0, 0, "Sets the amount of diversity for this channel's texture mapping values"); + uiDefButS(block, MENU, B_MATPRV, str1, 100,44,163,19, &(mtex->diversify), 0.0, 0.0, 0, 0, "Selects which of this channel's texture mapping values to diversify"); uiDefButBitS(block, TOG, MTEX_VIEWSPACE, B_DIFF, "Correct Nor Map", 100,18,163,19, &(mtex->texflag), 0, 0, 0, 0, "This channel will correct normal mapping for View space and Object space"); - } - else - uiDefButS(block, TOG, B_EXTEXBROWSE, "Add New" ,100, 150, 163, 20, &(G.buts->texnr), -1.0, 32767.0, 0, 0, "Adds a new texture datablock"); // force no centering uiDefBut(block, LABEL, 0, " ", 250, 10, 25, 20, 0, 0, 0, 0, 0, ""); @@ -3059,7 +3099,7 @@ uiDefButF(block, NUMSLI, B_MATPRV, "rms:", 90, 100,150,19, &(ma->rms), 0.0, 0.4, 0, 0, "Sets the standard deviation of surface slope"); /* default shading variables */ uiBlockBeginAlign(block); - uiDefButF(block, NUMSLI, B_DIFF, "Translucency ", 9,30,301,19, &(ma->translucency), 0.0, 1.0, 100, 2, "Amount of diffuse shading of the back side"); + uiDefButF(block, NUMSLI, B_DIFF, "Translucency ", 9,30,301,19, &(ma->translucency), 0.0, 1.0, 100, 2, "Amount of translucent diffuse shading of the back side"); uiDefButF(block, NUMSLI, B_MATPRV, "Amb ", 9,10,150,19, &(ma->amb), 0.0, 1.0, 0, 0, "Sets the amount of global ambient color the material receives"); uiDefButF(block, NUMSLI, B_MATPRV, "Emit ", 160,10,150,19, &(ma->emit), 0.0, 1.0, 0, 0, "Sets the amount of light the material emits"); uiBlockEndAlign(block);