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