Index: blender/makesdna/DNA_material_types.h =================================================================== --- blender/makesdna/DNA_material_types.h (revision 12706) +++ blender/makesdna/DNA_material_types.h (working copy) @@ -191,6 +191,7 @@ #define MA_GROUP_NOLAY 0x10000000 #define MA_FACETEXTURE_ALPHA 0x20000000 #define MA_STR_B_UNITS 0x40000000 +#define MA_NO_USE_AO 0x80000000 #define MA_MODE_MASK 0x4fffffff /* all valid mode bits */ Index: blender/python/api2_2x/sceneRender.c =================================================================== --- blender/python/api2_2x/sceneRender.c (revision 12706) +++ blender/python/api2_2x/sceneRender.c (working copy) @@ -488,6 +488,14 @@ Py_RETURN_NONE; } +PyObject *RenderData_RenderBake( BPy_RenderData * self ) +{ + Scene *oldsce; + objects_bake_render(0); + + Py_RETURN_NONE; +} + /* * This will save the rendered image to an output file path already defined. */ @@ -2682,6 +2690,8 @@ "(filename) - save an image generated by a call to render() (set output path first)"}, {"renderAnim", ( PyCFunction ) RenderData_RenderAnim, METH_NOARGS, "() - render a sequence from start frame to end frame"}, + {"renderBake", ( PyCFunction ) RenderData_RenderBake, METH_NOARGS, + "() - render bake of the selected objects"}, {"play", ( PyCFunction ) RenderData_Play, METH_NOARGS, "() - play animation of rendered images/avi (searches Pics: field)"}, {"setRenderPath", ( PyCFunction ) RenderData_SetRenderPath, Index: blender/render/intern/source/convertblender.c =================================================================== --- blender/render/intern/source/convertblender.c (revision 12706) +++ blender/render/intern/source/convertblender.c (working copy) @@ -4923,6 +4923,11 @@ } } } + + if (re->r.renderer==R_INTERN) + if(!re->test_break()) + if(re->r.mode & R_RADIO) do_radio_render(re); + } void RE_DataBase_GetView(Render *re, float mat[][4]) Index: blender/render/intern/source/rayshade.c =================================================================== --- blender/render/intern/source/rayshade.c (revision 12706) +++ blender/render/intern/source/rayshade.c (working copy) @@ -1508,8 +1508,19 @@ prev = fac; if(RE_ray_tree_intersect(R.raytree, &isec)) { - if (R.wrld.aomode & WO_AODIST) fac+= exp(-isec.labda*R.wrld.aodistfac); - else fac+= 1.0f; + VlakRen *vlr= (VlakRen*)isec.face; + float transfact; + if (vlr->mat->mode & MA_RAYTRANSP){ + transfact=vlr->mat->alpha; + if (vlr->mat->mode & MA_RAYMIRROR) + transfact=(vlr->mat->ray_mirror+transfact)/2.0f; + } + else + transfact=1.0; + if (R.wrld.aomode & WO_AODIST) { + fac+= transfact*exp(-isec.labda*R.wrld.aodistfac); + } + else fac+= transfact*1.0f; } else if(aocolor!=WO_AOPLAIN) { float skycol[4]; @@ -1627,8 +1638,20 @@ /* do the trace */ if(RE_ray_tree_intersect(R.raytree, &isec)) { - if (R.wrld.aomode & WO_AODIST) sh+= exp(-isec.labda*R.wrld.aodistfac); - else sh+= 1.0f; + VlakRen *vlr= (VlakRen*)isec.face; + float transfact; + if (vlr->mat->mode & MA_RAYTRANSP){ + transfact=vlr->mat->alpha; + if (vlr->mat->mode & MA_RAYMIRROR) + transfact=(vlr->mat->ray_mirror+transfact)/2.0f; + } + else + transfact=1.0; + if (R.wrld.aomode & WO_AODIST){ + VlakRen *vlr= (VlakRen*)isec.face; + sh+= transfact*exp(-isec.labda*R.wrld.aodistfac); + } + else sh+= transfact*1.0f; } else if(aocolor!=WO_AOPLAIN) { float skycol[4]; @@ -1683,6 +1706,9 @@ ray_ao_qmc(shi, shadfac); else if (R.wrld.ao_samp_method == WO_AOSAMP_CONSTANT) ray_ao_spheresamp(shi, shadfac); + shadfac[0]*=(1.0-shi->mat->translucency); + shadfac[1]*=(1.0-shi->mat->translucency); + shadfac[2]*=(1.0-shi->mat->translucency); } Index: blender/render/intern/source/shadeoutput.c =================================================================== --- blender/render/intern/source/shadeoutput.c (revision 12706) +++ blender/render/intern/source/shadeoutput.c (working copy) @@ -975,7 +975,7 @@ void ambient_occlusion(ShadeInput *shi) { - if((R.r.mode & R_RAYTRACE) && shi->mat->amb!=0.0f) + if((R.r.mode & R_RAYTRACE) && shi->mat->amb!=0.0f && !(shi->mode & MA_NO_USE_AO)) ray_ao(shi, shi->ao); else shi->ao[0]= shi->ao[1]= shi->ao[2]= 1.0f; Index: blender/src/buttons_shading.c =================================================================== --- blender/src/buttons_shading.c (revision 12706) +++ blender/src/buttons_shading.c (working copy) @@ -3791,6 +3791,7 @@ uiDefButBitI(block, TOG, MA_SHADOW_TRA, B_MATPRV, "TraShadow", 245,120,65,19, &(ma->mode), 0, 0, 0, 0, "Receives transparent shadows based at material color and alpha"); uiDefButBitI(block, TOG, MA_ONLYSHADOW, B_MATPRV, "OnlyShad", 245,100,65,20, &(ma->mode), 0, 0, 0, 0, "Renders shadows on material as Alpha value"); uiDefButBitI(block, TOG, MA_RAYBIAS, B_MATPRV, "Bias", 245,80,65,19, &(ma->mode), 0, 0, 0, 0, "Prevents ray traced shadow errors with phong interpolated normals (terminator problem)"); + uiDefButBitI(block, TOG, MA_NO_USE_AO, B_MATPRV, "NO AO", 245,60,65,19, &(ma->mode), 0, 0, 0, 0, "Prevents AO"); uiBlockBeginAlign(block); uiDefIDPoinBut(block, test_grouppoin_but, ID_GR, B_MATPRV, "GR:", 9, 55, 150, 19, &ma->group, "Limit Lighting to Lamps in this Group");