[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17532] branches/soc-2008-unclezeiv/source /blender/render/intern/source/lightcuts.c: Forgot to add indirect lighting for meshlights.
Davide Vercelli
davide.vercelli at gmail.com
Sat Nov 22 12:15:08 CET 2008
Revision: 17532
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17532
Author: unclezeiv
Date: 2008-11-22 12:15:07 +0100 (Sat, 22 Nov 2008)
Log Message:
-----------
Forgot to add indirect lighting for meshlights. (Still no support for textured materials.)
Modified Paths:
--------------
branches/soc-2008-unclezeiv/source/blender/render/intern/source/lightcuts.c
Modified: branches/soc-2008-unclezeiv/source/blender/render/intern/source/lightcuts.c
===================================================================
--- branches/soc-2008-unclezeiv/source/blender/render/intern/source/lightcuts.c 2008-11-21 19:14:38 UTC (rev 17531)
+++ branches/soc-2008-unclezeiv/source/blender/render/intern/source/lightcuts.c 2008-11-22 11:15:07 UTC (rev 17532)
@@ -1912,7 +1912,9 @@
void add_meshlight(Render *re, LightcutsData *lcd, ObjectRen *obr, VlakRen *vla, float *co, float weight)
{
LampRen *lar;
- Material *mat= vla->mat;
+ int i;
+ float col[3];
+
lar= MEM_callocN(sizeof(LampRen), "lampren");
lamp_init(re, lar);
lar->dist= lcd->indir_dist;
@@ -1933,12 +1935,25 @@
/* VECCOPY(lcd->dbg_vis_vpl + 3 * lcd->light_counter, lar->co); */
lar->ray_samp_method= LA_SAMP_CONSTANT;
- lar->energy= mat->emit * weight;
+ lar->energy= vla->mat->emit * weight;
+
+ col[0]= vla->mat->r;
+ col[1]= vla->mat->g;
+ col[2]= vla->mat->b;
- lar->r= lar->energy * mat->r;
- lar->g= lar->energy * mat->g;
- lar->b= lar->energy * mat->b;
+ lar->r= lar->energy * col[0];
+ lar->g= lar->energy * col[1];
+ lar->b= lar->energy * col[2];
+
+ /* indirect lighting */
+ for (i= 0; i < lcd->do_indir; i++)
+ add_virtual_point_light(re, lcd, lar, col, lcd->indir_bounces, 1.0f / lcd->do_indir);
+ if (lcd->do_indir > 0 && (lcd->options & LC_OPT_ONLY_INDIR)) {
+ lamp_delete(lar);
+ return;
+ }
+
BLI_addtail(&lcd->pointlights, lar);
lcd->trees[TREE_SPOT].counter++;
@@ -2073,6 +2088,9 @@
if (lcd->options & LC_OPT_ENV_LIGHT)
n_generated+= re->r.lightcuts_env_map;
+ /* TODO: here you could check if a meshlight is available... */
+ n_generated+= re->r.lightcuts_meshlights;
+
n_vpl= (n_orig + n_generated) * lcd->do_indir * lcd->indir_bounces;
/* allocate array to hold coordinates for all possible virtual point lights */
More information about the Bf-blender-cvs
mailing list