[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