Revision: 30266
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30266
Author:   blendix
Date:     2010-07-13 14:27:44 +0200 (Tue, 13 Jul 2010)

Log Message:
-----------
Render Branch: restore behavior that when material ambient is zero, the
material is also skipped in the AO pass. Not really correct but avoids
performance bottleneck rendering AO for hair.

Modified Paths:
--------------
    branches/render25/source/blender/render/intern/source/material.c
    branches/render25/source/blender/render/intern/source/shadeoutput.c

Modified: branches/render25/source/blender/render/intern/source/material.c
===================================================================
--- branches/render25/source/blender/render/intern/source/material.c    
2010-07-13 11:50:04 UTC (rev 30265)
+++ branches/render25/source/blender/render/intern/source/material.c    
2010-07-13 12:27:44 UTC (rev 30266)
@@ -664,6 +664,12 @@
                return 0;
        if(!((re->params.r.mode & R_RAYTRACE) || re->db.wrld.ao_gather_method 
== WO_LIGHT_GATHER_APPROX))
                return 0;
+
+       /* some materials don't need it */
+       if(ma->mode & MA_SHLESS)
+               return 0;
+       else if(ma->amb == 0.0f && !(ma->mapto & MAP_AMB))
+               return 0;
        
        /* if requested for passes, always render it */
        if(shi->shading.passflag & 
(SCE_PASS_AO|SCE_PASS_ENVIRONMENT|SCE_PASS_INDIRECT))
@@ -674,11 +680,13 @@
                if(!(shi->shading.combinedflag & 
(SCE_PASS_AO|SCE_PASS_ENVIRONMENT|SCE_PASS_INDIRECT)))
                        return 0;
 
+#if 0
                /* some materials don't need it */
                if(ma->mode & MA_SHLESS)
                        return 0;
                else if(ma->amb == 0.0f && !(ma->mapto & MAP_AMB))
                        return 0;
+#endif
 
                return 1;
        }

Modified: branches/render25/source/blender/render/intern/source/shadeoutput.c
===================================================================
--- branches/render25/source/blender/render/intern/source/shadeoutput.c 
2010-07-13 11:50:04 UTC (rev 30265)
+++ branches/render25/source/blender/render/intern/source/shadeoutput.c 
2010-07-13 12:27:44 UTC (rev 30266)
@@ -115,6 +115,13 @@
 
 /***************************** AO / Env / Indirect 
*****************************/
 
+static void default_ao_env_indirect(ShadeInput *shi)
+{
+       shi->shading.ao[0]= shi->shading.ao[1]= shi->shading.ao[2]= 1.0f;
+       shi->shading.env[0]= shi->shading.env[1]= shi->shading.env[2]= 0.0f;
+       shi->shading.indirect[0]= shi->shading.indirect[1]= 
shi->shading.indirect[2]= 0.0f;
+}
+
 void shade_ao_env_indirect(Render *re, ShadeInput *shi)
 {
        if(re->db.wrld.ao_gather_method == WO_LIGHT_GATHER_APPROX) {
@@ -154,11 +161,6 @@
                if(ao)
                        ao[1]= ao[2]= ao[0];
        }
-       else {
-               shi->shading.ao[0]= shi->shading.ao[1]= shi->shading.ao[2]= 
1.0f;
-               shi->shading.env[0]= shi->shading.env[1]= shi->shading.env[2]= 
0.0f;
-               shi->shading.indirect[0]= shi->shading.indirect[1]= 
shi->shading.indirect[2]= 0.0f;
-       }
 }
 
 /* wrld mode was checked for */
@@ -309,6 +311,8 @@
                        shr->alpha= (shr->alpha + f)*f;
                }
        }
+       else
+               default_ao_env_indirect(shi);
 }
 
 /**************************** Color & Alpha Pass *****************************/
@@ -689,18 +693,19 @@
        int post_sss= ((ma->sss_flag & MA_DIFF_SSS) && sss_pass_done(re, ma));
 
        if(!post_sss || (passflag & 
(SCE_PASS_AO|SCE_PASS_ENVIRONMENT|SCE_PASS_INDIRECT))) {
-               if(mat_need_ao_env_indirect(re, shi)) {
+               if(mat_need_ao_env_indirect(re, shi))
                        shade_ao_env_indirect(re, shi);
+               else
+                       default_ao_env_indirect(shi);
 
-                       if(re->db.wrld.mode & WO_ENV_LIGHT)
-                               environment_lighting_apply(re, shi, shr);
+               if(re->db.wrld.mode & WO_ENV_LIGHT)
+                       environment_lighting_apply(re, shi, shr);
 
-                       if(re->db.wrld.mode & WO_INDIRECT_LIGHT)
-                               indirect_lighting_apply(re, shi, shr);
+               if(re->db.wrld.mode & WO_INDIRECT_LIGHT)
+                       indirect_lighting_apply(re, shi, shr);
 
-                       if(re->db.wrld.mode & WO_AMB_OCC)
-                               ambient_occlusion_apply(re, shi, shr);
-               }
+               if(re->db.wrld.mode & WO_AMB_OCC)
+                       ambient_occlusion_apply(re, shi, shr);
                        
                /* ambient light */
                madd_v3_v3fl(shr->diff, &re->db.wrld.ambr, shi->material.amb);


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to