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

Reply via email to