diff --git a/source/blender/renderconverter/intern/convertBlenderScene.c b/source/blender/renderconverter/intern/convertBlenderScene.c index 175d9dd7ed1..4af8e8cd61c 100644 --- a/source/blender/renderconverter/intern/convertBlenderScene.c +++ b/source/blender/renderconverter/intern/convertBlenderScene.c @@ -1807,13 +1807,17 @@ void RE_add_render_lamp(Object *ob, int doshadbuf) } } - /* to make sure we can check ray shadow easily in the render code */ - if(lar->mode & LA_SHAD_RAY) { - if( (R.r.mode & R_RAYTRACE)==0) - lar->mode &= ~LA_SHAD_RAY; + /* yafray: shadow flag should not be cleared, only used with internal renderer */ + if ((R.r.mode & R_YAFRAY)==0) { + /* to make sure we can check ray shadow easily in the render code */ + if(lar->mode & LA_SHAD_RAY) { + if( (R.r.mode & R_RAYTRACE)==0) + lar->mode &= ~LA_SHAD_RAY; + } } lar->org= MEM_dupallocN(lar); + } /* ------------------------------------------------------------------------- */ diff --git a/source/blender/yafray/intern/export_File.cpp b/source/blender/yafray/intern/export_File.cpp index 0763bbdedca..49d7b2a2539 100755 --- a/source/blender/yafray/intern/export_File.cpp +++ b/source/blender/yafray/intern/export_File.cpp @@ -1007,11 +1007,10 @@ void yafrayFileRender_t::writeAreaLamp(LampRen* lamp, int num) ostr << "energy << "\" "; if (!R.r.GIphotons) { int psm=0, sm = lamp->ray_totsamp; - if (sm>=16) psm = sm/4; + if (sm>=64) psm = sm/4; ostr << "samples=\"" << sm << "\" psamples=\"" << psm << "\" "; } ostr << ">\n"; - ostr << "\t\n"; ostr << "\t\n"; ostr << "\t\n"; @@ -1046,8 +1045,8 @@ void yafrayFileRender_t::writeLamps() // color already premultiplied by energy, so only need distance here float pwr; if (lamp->mode & LA_SPHERE) { - // best approx. as used in LFexport script, however, in yafray it seems incorrect, so LF must use another model - pwr = lamp->dist*(lamp->dist+1)*0.125; + // best approx. as used in LFexport script (LF d.f.m. 4pi?) + pwr = lamp->dist*(lamp->dist+1)*0.25*M_1_PI; //decay = 2; } else { @@ -1059,7 +1058,9 @@ void yafrayFileRender_t::writeLamps() } ostr << "\" power=\"" << pwr; string lpmode="off"; - if ((lamp->mode & LA_SHAD) || (lamp->mode & LA_SHAD_RAY)) lpmode="on";; + // shadows only when Blender has shadow button enabled, only spots use LA_SHAD flag + if (R.r.mode & R_SHADOW) + if (((lamp->type==LA_SPOT) && (lamp->mode & LA_SHAD)) || (lamp->mode & LA_SHAD_RAY)) lpmode="on";; ostr << "\" cast_shadows=\"" << lpmode << "\""; // spot specific stuff if (lamp->type==LA_SPOT) {