Revision: 16611 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16611 Author: ton Date: 2008-09-19 18:01:22 +0200 (Fri, 19 Sep 2008)
Log Message: ----------- Patch #13422, By Roland Hess, Shadow Color Finally, after a long time new render candy for the non-game peoples! :) Good doc is here: (url splits in two) http://www.harkyman.com/2008/08/06/controllable-shadow-intensity- and-color/ Note the colorpicker for shadow is in "Shadow and Spot" panel. A bit hidden, could get more attention. For later. :) Modified Paths: -------------- trunk/blender/source/blender/makesdna/DNA_lamp_types.h trunk/blender/source/blender/render/intern/include/render_types.h trunk/blender/source/blender/render/intern/include/texture.h trunk/blender/source/blender/render/intern/source/convertblender.c trunk/blender/source/blender/render/intern/source/pixelshading.c trunk/blender/source/blender/render/intern/source/shadeoutput.c trunk/blender/source/blender/render/intern/source/texture.c trunk/blender/source/blender/src/buttons_shading.c Modified: trunk/blender/source/blender/makesdna/DNA_lamp_types.h =================================================================== --- trunk/blender/source/blender/makesdna/DNA_lamp_types.h 2008-09-19 14:18:41 UTC (rev 16610) +++ trunk/blender/source/blender/makesdna/DNA_lamp_types.h 2008-09-19 16:01:22 UTC (rev 16611) @@ -50,6 +50,7 @@ short colormodel, totex; float r, g, b, k; + float shdwr, shdwg, shdwb, shdwpad; float energy, dist, spotsize, spotblend; float haint; @@ -138,6 +139,7 @@ /* Since it is used with LOCAL lamp, can't use LA_SHAD */ #define LA_YF_SOFT 16384 #define LA_LAYER_SHADOW 32768 +#define LA_SHAD_TEX (1<<16) /* layer_shadow */ #define LA_LAYER_SHADOW_BOTH 0 @@ -190,6 +192,7 @@ /* mapto */ #define LAMAP_COL 1 +#define LAMAP_SHAD 2 #endif /* DNA_LAMP_TYPES_H */ Modified: trunk/blender/source/blender/render/intern/include/render_types.h =================================================================== --- trunk/blender/source/blender/render/intern/include/render_types.h 2008-09-19 14:18:41 UTC (rev 16610) +++ trunk/blender/source/blender/render/intern/include/render_types.h 2008-09-19 16:01:22 UTC (rev 16611) @@ -421,6 +421,7 @@ short type; int mode; float r, g, b, k; + float shdwr, shdwg, shdwb; float energy, haint; int lay; float spotsi,spotbl; Modified: trunk/blender/source/blender/render/intern/include/texture.h =================================================================== --- trunk/blender/source/blender/render/intern/include/texture.h 2008-09-19 14:18:41 UTC (rev 16610) +++ trunk/blender/source/blender/render/intern/include/texture.h 2008-09-19 16:01:22 UTC (rev 16611) @@ -55,7 +55,7 @@ void do_halo_tex(struct HaloRen *har, float xn, float yn, float *colf); void do_sky_tex(float *rco, float *lo, float *dxyview, float *hor, float *zen, float *blend, int skyflag); void do_material_tex(struct ShadeInput *shi); -void do_lamp_tex(LampRen *la, float *lavec, struct ShadeInput *shi, float *colf); +void do_lamp_tex(LampRen *la, float *lavec, struct ShadeInput *shi, float *colf, short effect); void init_render_textures(Render *re); Modified: trunk/blender/source/blender/render/intern/source/convertblender.c =================================================================== --- trunk/blender/source/blender/render/intern/source/convertblender.c 2008-09-19 14:18:41 UTC (rev 16610) +++ trunk/blender/source/blender/render/intern/source/convertblender.c 2008-09-19 16:01:22 UTC (rev 16611) @@ -3566,6 +3566,9 @@ lar->r= lar->energy*la->r; lar->g= lar->energy*la->g; lar->b= lar->energy*la->b; + lar->shdwr= la->shdwr; + lar->shdwg= la->shdwg; + lar->shdwb= la->shdwb; lar->k= la->k; // area @@ -3718,7 +3721,10 @@ for(c=0; c<MAX_MTEX; c++) { if(la->mtex[c] && la->mtex[c]->tex) { - lar->mode |= LA_TEXTURE; + if (la->mtex[c]->mapto & LAMAP_COL) + lar->mode |= LA_TEXTURE; + if (la->mtex[c]->mapto & LAMAP_SHAD) + lar->mode |= LA_SHAD_TEX; if(G.rendering) { if(re->osa) { Modified: trunk/blender/source/blender/render/intern/source/pixelshading.c =================================================================== --- trunk/blender/source/blender/render/intern/source/pixelshading.c 2008-09-19 14:18:41 UTC (rev 16610) +++ trunk/blender/source/blender/render/intern/source/pixelshading.c 2008-09-19 16:01:22 UTC (rev 16611) @@ -141,7 +141,7 @@ VECCOPY(shi.co, rco); shi.osatex= 0; - do_lamp_tex(lar, lv, &shi, lacol); + do_lamp_tex(lar, lv, &shi, lacol, LA_TEXTURE); } if(lar->type==LA_SPOT) { Modified: trunk/blender/source/blender/render/intern/source/shadeoutput.c =================================================================== --- trunk/blender/source/blender/render/intern/source/shadeoutput.c 2008-09-19 14:18:41 UTC (rev 16610) +++ trunk/blender/source/blender/render/intern/source/shadeoutput.c 2008-09-19 16:01:22 UTC (rev 16611) @@ -1179,7 +1179,7 @@ { Material *ma= shi->mat; VlakRen *vlr= shi->vlr; - float lv[3], lampdist, lacol[3], shadfac[4]; + float lv[3], lampdist, lacol[3], shadfac[4], lashdw[3]; float i, is, i_noshad, inp, *vn, *view, vnor[3], phongcorr=1.0f; float visifac; @@ -1219,7 +1219,12 @@ lacol[1]= lar->g; lacol[2]= lar->b; - if(lar->mode & LA_TEXTURE) do_lamp_tex(lar, lv, shi, lacol); + lashdw[0]= lar->shdwr; + lashdw[1]= lar->shdwg; + lashdw[2]= lar->shdwb; + + if(lar->mode & LA_TEXTURE) do_lamp_tex(lar, lv, shi, lacol, LA_TEXTURE); + if(lar->mode & LA_SHAD_TEX) do_lamp_tex(lar, lv, shi, lashdw, LA_SHAD_TEX); /* tangent case; calculate fake face normal, aligned with lampvector */ /* note, vnor==vn is used as tangent trigger for buffer shadow */ @@ -1342,13 +1347,13 @@ if((lar->mode & LA_ONLYSHADOW) && i>0.0) { shadfac[3]= i*lar->energy*(1.0f-shadfac[3]); - shr->shad[0] -= shadfac[3]*shi->r; - shr->shad[1] -= shadfac[3]*shi->g; - shr->shad[2] -= shadfac[3]*shi->b; + shr->shad[0] -= shadfac[3]*shi->r*(1.0f-lashdw[0]); + shr->shad[1] -= shadfac[3]*shi->g*(1.0f-lashdw[1]); + shr->shad[2] -= shadfac[3]*shi->b*(1.0f-lashdw[2]); - shr->spec[0] -= shadfac[3]*shi->specr; - shr->spec[1] -= shadfac[3]*shi->specg; - shr->spec[2] -= shadfac[3]*shi->specb; + shr->spec[0] -= shadfac[3]*shi->specr*(1.0f-lashdw[0]); + shr->spec[1] -= shadfac[3]*shi->specg*(1.0f-lashdw[1]); + shr->spec[2] -= shadfac[3]*shi->specb*(1.0f-lashdw[2]); return; } @@ -1366,6 +1371,10 @@ else add_to_diffuse(shr->shad, shi, is, i*lacol[0], i*lacol[1], i*lacol[2]); } + /* add light for colored shadow */ + if (i_noshad>i && !(lashdw[0]==0 && lashdw[1]==0 && lashdw[2]==0)) { + add_to_diffuse(shr->shad, shi, is, lashdw[0]*(i_noshad-i)*lacol[0], lashdw[1]*(i_noshad-i)*lacol[1], lashdw[2]*(i_noshad-i)*lacol[2]); + } if(i_noshad>0.0f) { if(passflag & (SCE_PASS_DIFFUSE|SCE_PASS_SHADOW)) { if(ma->mode & MA_SHADOW_TRA) Modified: trunk/blender/source/blender/render/intern/source/texture.c =================================================================== --- trunk/blender/source/blender/render/intern/source/texture.c 2008-09-19 14:18:41 UTC (rev 16610) +++ trunk/blender/source/blender/render/intern/source/texture.c 2008-09-19 16:01:22 UTC (rev 16611) @@ -2301,7 +2301,7 @@ /* ------------------------------------------------------------------------- */ /* colf supposed to be initialized with la->r,g,b */ -void do_lamp_tex(LampRen *la, float *lavec, ShadeInput *shi, float *colf) +void do_lamp_tex(LampRen *la, float *lavec, ShadeInput *shi, float *colf, short effect) { Object *ob; MTex *mtex; @@ -2440,7 +2440,7 @@ } /* mapping */ - if(mtex->mapto & LAMAP_COL) { + if(((mtex->mapto & LAMAP_COL) && (effect & LA_TEXTURE))||((mtex->mapto & LAMAP_SHAD) && (effect & LA_SHAD_TEX))) { float col[3]; if(rgb==0) { Modified: trunk/blender/source/blender/src/buttons_shading.c =================================================================== --- trunk/blender/source/blender/src/buttons_shading.c 2008-09-19 14:18:41 UTC (rev 16610) +++ trunk/blender/source/blender/src/buttons_shading.c 2008-09-19 16:01:22 UTC (rev 16611) @@ -2535,7 +2535,10 @@ uiDefButF(block, NUMSLI, B_LAMPPRV, "DVar ", 10,10,135,19, &(mtex->def_var), 0.0, 1.0, 0, 0, "Value to use for Ref, Spec, Amb, Emit, Alpha, RayMir, TransLu and Hard"); /* MAP TO */ - uiDefButBitS(block, TOG, MAP_COL, B_LAMPPRV, "Col", 10,180,135,19, &(mtex->mapto), 0, 0, 0, 0, "Lets the texture affect the basic color of the lamp"); + uiBlockBeginAlign(block); + uiDefButBitS(block, TOG, LAMAP_COL, B_LAMPPRV, "Col", 10,180,135,19, &(mtex->mapto), 0, 0, 0, 0, "Lets the texture affect the basic color of the lamp"); + uiDefButBitS(block, TOG, LAMAP_SHAD, B_LAMPPRV, "Shadow", 146,180,135,19, &(mtex->mapto), 0, 0, 0, 0, "Lets the texture affect the shadow color of the lamp"); + uiBlockEndAlign(block); uiBlockBeginAlign(block); uiDefButS(block, MENU, B_LAMPPRV, mapto_blendtype_pup(),155,125,155,19, &(mtex->blendtype), 0, 0, 0, 0, "Texture blending mode"); @@ -2669,6 +2672,12 @@ uiDefButBitI(block, TOG, LA_LAYER_SHADOW, B_LAMPPRV,"Layer", 10,90,80,19,&la->mode, 0, 0, 0, 0, "Causes only objects on the same layer to cast shadows"); uiBlockEndAlign(block); + if(ELEM4(la->type, LA_AREA, LA_SPOT, LA_SUN, LA_LOCAL) && ((la->mode & LA_SHAD_RAY)||(la->mode & LA_SHAD_BUF))) { + uiBlockBeginAlign(block); + uiDefButF(block, COL, 0, "Shadow ", 10,90,80,19,&la->shdwr, 0, 0, 0, B_COLLAMP, "Sets the shadow color; default is black (RGB 0,0,0)"); + uiBlockEndAlign(block); + } + if(la->type==LA_SPOT) { uiBlockBeginAlign(block); uiDefButBitI(block, TOG, LA_SQUARE, B_LAMPREDRAW,"Square", 10,60,80,19,&la->mode, 0, 0, 0, 0, "Sets square spotbundles"); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs