Revision: 21080
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21080
Author:   yukishiro
Date:     2009-06-22 18:34:37 +0200 (Mon, 22 Jun 2009)

Log Message:
-----------
start adding Matt's patch

Modified Paths:
--------------
    branches/soc-2009-yukishiro/source/blender/makesdna/DNA_meshdata_types.h
    branches/soc-2009-yukishiro/source/blender/makesdna/DNA_world_types.h
    branches/soc-2009-yukishiro/source/blender/makesrna/intern/rna_scene.c
    branches/soc-2009-yukishiro/source/blender/makesrna/intern/rna_world.c
    branches/soc-2009-yukishiro/source/blender/render/intern/source/occlusion.c
    branches/soc-2009-yukishiro/source/blender/render/intern/source/pipeline.c
    branches/soc-2009-yukishiro/source/blender/render/intern/source/rayshade.c
    branches/soc-2009-yukishiro/source/blender/render/intern/source/rendercore.c
    branches/soc-2009-yukishiro/source/blender/sh/SH_api.h
    branches/soc-2009-yukishiro/source/blender/sh/intern/compute.c

Modified: 
branches/soc-2009-yukishiro/source/blender/makesdna/DNA_meshdata_types.h
===================================================================
--- branches/soc-2009-yukishiro/source/blender/makesdna/DNA_meshdata_types.h    
2009-06-22 16:21:59 UTC (rev 21079)
+++ branches/soc-2009-yukishiro/source/blender/makesdna/DNA_meshdata_types.h    
2009-06-22 16:34:37 UTC (rev 21080)
@@ -102,14 +102,6 @@
        short mode, tile, unwrap;
 } MTFace;
 
-//typedef struct MShCoeffs2 {
-//        float val[9];
-//} MShCoeffs2;
-//
-//typedef struct MShCoeffs3 {
-//        float val[16];
-//} MShCoeffs3;
-
 typedef struct MShCoeffs {
         float val[25];
 } MShCoeffs;

Modified: branches/soc-2009-yukishiro/source/blender/makesdna/DNA_world_types.h
===================================================================
--- branches/soc-2009-yukishiro/source/blender/makesdna/DNA_world_types.h       
2009-06-22 16:21:59 UTC (rev 21079)
+++ branches/soc-2009-yukishiro/source/blender/makesdna/DNA_world_types.h       
2009-06-22 16:34:37 UTC (rev 21080)
@@ -138,12 +138,13 @@
 #define WO_ZENUP               16
 
 /* mode */
-#define WO_MIST                       1
-#define WO_STARS               2
-#define WO_DOF                 4
-#define WO_ACTIVITY_CULLING       8
-#define WO_AMB_OCC                       16
-#define WO_DBVT_CULLING                  32
+#define WO_MIST                        1
+#define WO_STARS               2
+#define WO_DOF                 4
+#define WO_ACTIVITY_CULLING    8
+#define WO_AMB_OCC             16
+#define WO_DBVT_CULLING                32
+#define WO_IBL                 64
 
 /* aomix */
 #define WO_AOADD       0
@@ -164,6 +165,7 @@
 #define WO_AOPLAIN     0
 #define WO_AOSKYCOL    1
 #define WO_AOSKYTEX    2
+#define WO_AOSH                3
 
 /* ao_gather_method */
 #define WO_AOGATHER_RAYTRACE   0

Modified: branches/soc-2009-yukishiro/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/makesrna/intern/rna_scene.c      
2009-06-22 16:21:59 UTC (rev 21079)
+++ branches/soc-2009-yukishiro/source/blender/makesrna/intern/rna_scene.c      
2009-06-22 16:34:37 UTC (rev 21080)
@@ -650,7 +650,7 @@
        RNA_def_property_boolean_negative_sdna(prop, NULL, "scemode", R_NO_TEX);
        RNA_def_property_ui_text(prop, "Render Textures", "Use textures to 
affect material properties.");
        RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-       
+
        prop= RNA_def_property(srna, "edge", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "mode", R_EDGE);
        RNA_def_property_ui_text(prop, "Edge", "Create a toon outline around 
the edges of geometry");

Modified: branches/soc-2009-yukishiro/source/blender/makesrna/intern/rna_world.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/makesrna/intern/rna_world.c      
2009-06-22 16:21:59 UTC (rev 21079)
+++ branches/soc-2009-yukishiro/source/blender/makesrna/intern/rna_world.c      
2009-06-22 16:34:37 UTC (rev 21080)
@@ -135,6 +135,7 @@
                {WO_AOPLAIN, "PLAIN", 0, "White", "Plain diffuse energy 
(white.)"},
                {WO_AOSKYCOL, "SKY_COLOR", 0, "Sky Color", "Use horizon and 
zenith color for diffuse energy."},
                {WO_AOSKYTEX, "SKY_TEXTURE", 0, "Sky Texture", "Does full Sky 
texture render for diffuse energy."},
+               {WO_AOSH, "DIFFUSE_SH", 0, "SH Diffuse", "Use spherical 
harmonics."},
                {0, NULL, 0, NULL, NULL}};
 
        static EnumPropertyItem prop_sample_method_items[] = {

Modified: 
branches/soc-2009-yukishiro/source/blender/render/intern/source/occlusion.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/render/intern/source/occlusion.c 
2009-06-22 16:21:59 UTC (rev 21079)
+++ branches/soc-2009-yukishiro/source/blender/render/intern/source/occlusion.c 
2009-06-22 16:34:37 UTC (rev 21080)
@@ -1297,7 +1297,14 @@
                        shadeSkyView(skycol, co, bn, dxyview);
                }
 #endif
+               else { /* WO_AODIFFUSESH */
+                       float bentnor[3];
 
+                       VECCOPY(bentnor, bn);
+                       Mat4Mul3Vecfl(re->viewinv, bentnor);
+                       SH_eval_color(skycol, re->scene->lightenv, bentnor);
+               }
+
                VecMulf(skycol, occlusion);
        }
        else {

Modified: 
branches/soc-2009-yukishiro/source/blender/render/intern/source/pipeline.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/render/intern/source/pipeline.c  
2009-06-22 16:21:59 UTC (rev 21079)
+++ branches/soc-2009-yukishiro/source/blender/render/intern/source/pipeline.c  
2009-06-22 16:34:37 UTC (rev 21080)
@@ -1653,7 +1653,7 @@
        if(render_scene_needs_vector(re))
                RE_Database_FromScene_Vectors(re, re->scene);
        else
-          RE_Database_FromScene(re, re->scene, 1);
+               RE_Database_FromScene(re, re->scene, 1);
        
        threaded_tile_processor(re);
        

Modified: 
branches/soc-2009-yukishiro/source/blender/render/intern/source/rayshade.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/render/intern/source/rayshade.c  
2009-06-22 16:21:59 UTC (rev 21079)
+++ branches/soc-2009-yukishiro/source/blender/render/intern/source/rayshade.c  
2009-06-22 16:34:37 UTC (rev 21080)
@@ -46,6 +46,8 @@
 
 #include "PIL_time.h"
 
+#include "SH_api.h"
+
 #include "render_types.h"
 #include "renderpipeline.h"
 #include "rendercore.h"
@@ -1545,6 +1547,8 @@
        
        float dxyview[3], skyadded=0, div;
        int aocolor;
+       float bentnor[3];
+       int noradded = 0;
        
        isec.faceorig= (RayFace*)shi->vlr;
        isec.oborig= RAY_OBJECT_SET(&R, shi->obi);
@@ -1554,6 +1558,7 @@
        isec.lay= -1;
        
        shadfac[0]= shadfac[1]= shadfac[2]= 0.0f;
+       bentnor[0]= bentnor[1]= bentnor[2]= 0.0f;
        
        /* prevent sky colors to be added for only shadow (shadow becomes 
alpha) */
        aocolor= R.wrld.aocolor;
@@ -1620,6 +1625,9 @@
                        view[1]= -dir[1];
                        view[2]= -dir[2];
                        Normalize(view);
+
+                       VecAddf(bentnor, bentnor, view);
+                       noradded++;
                        
                        if(aocolor==WO_AOSKYCOL) {
                                skyfac= 0.5*(1.0f+view[0]*R.grvec[0]+ 
view[1]*R.grvec[1]+ view[2]*R.grvec[2]);
@@ -1656,7 +1664,16 @@
                shadfac[0]*= div;       // average color times distances/hits 
formula
                shadfac[1]*= div;       // average color times distances/hits 
formula
                shadfac[2]*= div;       // average color times distances/hits 
formula
-       } else {
+       } 
+       else if(aocolor == WO_AOSH && noradded > 0) {
+               VecMulf(bentnor, (1.0f / (float)noradded));
+               Mat4Mul3Vecfl(R.viewinv, bentnor);
+               SH_eval_color(shadfac, R.scene->lightenv, bentnor);
+
+               div = (float)noradded / (float)samples * exp(R.wrld.aodistfac);
+               VecMulf(shadfac, div);
+       }
+       else {
                shadfac[0]= shadfac[1]= shadfac[2]= 1.0f - fac/(float)samples;
        }
        

Modified: 
branches/soc-2009-yukishiro/source/blender/render/intern/source/rendercore.c
===================================================================
--- 
branches/soc-2009-yukishiro/source/blender/render/intern/source/rendercore.c    
    2009-06-22 16:21:59 UTC (rev 21079)
+++ 
branches/soc-2009-yukishiro/source/blender/render/intern/source/rendercore.c    
    2009-06-22 16:34:37 UTC (rev 21080)
@@ -1162,7 +1162,7 @@
                                halo_tile(pa, rl);
 
                 // XXX: THIS IS TOTALLY A HACK NOW
-                if(G.f & G_LIGHTPAINT) {
+                if((R.r.scemode & R_PREVIEWBUTS) && (G.f & G_LIGHTPAINT)) {
                         float *fcol= rl->rectf; 
                         int width = R.disprect.xmax - R.disprect.xmin;
                         int height = R.disprect.ymax - R.disprect.ymin;

Modified: branches/soc-2009-yukishiro/source/blender/sh/SH_api.h
===================================================================
--- branches/soc-2009-yukishiro/source/blender/sh/SH_api.h      2009-06-22 
16:21:59 UTC (rev 21079)
+++ branches/soc-2009-yukishiro/source/blender/sh/SH_api.h      2009-06-22 
16:34:37 UTC (rev 21080)
@@ -48,6 +48,7 @@
 
 void SH_from_disc(int L, float *n, float area, float *shresult);
 float SH_eval(float *sh, float *v);
+void SH_eval_color(float *col, struct LightEnv *env, float *n);
 
 void SH_solve(float *P, float *I[3], int totvert, int num_sh, float *C[3]); 
 

Modified: branches/soc-2009-yukishiro/source/blender/sh/intern/compute.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/sh/intern/compute.c      
2009-06-22 16:21:59 UTC (rev 21079)
+++ branches/soc-2009-yukishiro/source/blender/sh/intern/compute.c      
2009-06-22 16:34:37 UTC (rev 21080)
@@ -707,6 +707,7 @@
         free_ShCoeffs(Y);
 }
 
+
 // size of shresult = (L + 1) * (L + 1)
 /* Use 2nd order SH => 9 coefficients, stored in this order:
    0 = (0,0),
@@ -746,7 +747,7 @@
        y= v[1];
        z= v[2];
 
-       sum= c1*sh[8]*(x*x - y*y);
+       sum  = c1*sh[8]*(x*x - y*y);
        sum += c3*sh[6]*z*z;
        sum += c4*sh[0];
        sum += -c5*sh[6];
@@ -756,3 +757,21 @@
        return sum;
 }
 
+
+void SH_eval_color(float *col, LightEnv *env, float *n)
+{
+       int channel, i;
+       float coeffs[9];
+
+       if (env == NULL) {
+               col[0] = col[1] = col[2];
+               return;
+       }
+
+       for (channel = 0; channel < 3; channel++) {
+               for (i = 0; i < 9; i++) { // TODO: remove constant 9 later
+                       coeffs[i] = env->shcoeffs[i][channel];
+               }
+               col[channel] = SH_eval(coeffs, n);
+       }
+}


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to