[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16307] branches/soc-2008-unclezeiv/source /blender/render/intern/source/lightcuts.c: Now using a narrower search radius during tree building for oriented lights , this can significantly improve performance when nearby directions are not coherent .

Davide Vercelli davide.vercelli at gmail.com
Sat Aug 30 14:20:45 CEST 2008


Revision: 16307
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16307
Author:   unclezeiv
Date:     2008-08-30 14:20:43 +0200 (Sat, 30 Aug 2008)

Log Message:
-----------
Now using a narrower search radius during tree building for oriented lights, this can significantly improve performance when nearby directions are not coherent.

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-08-30 11:27:27 UTC (rev 16306)
+++ branches/soc-2008-unclezeiv/source/blender/render/intern/source/lightcuts.c	2008-08-30 12:20:43 UTC (rev 16307)
@@ -230,7 +230,7 @@
 } SampleCoordInfo;
 
 typedef struct KDSearchCallbackData {
-	float c;
+	float c, mindir;
 	LightcutsCluster *one;
 	LightcutsCluster *array;
 } KDSearchCallbackData;
@@ -392,17 +392,24 @@
 {
 	KDSearchCallbackData *p = (KDSearchCallbackData*) data;
 	*val= lightcuts_compute_metric(p->c, p->one, &p->array[index]);
-	*dist= *val / p->one->luminance;
+	*dist= *val / p->one->luminance - p->mindir;
 }
 
 /* this one uses kd tree */
 static void find_and_insert_new_min2(Heap * heap, KDTree * tree, KDTreeNearest *nearest, LightcutsCluster * array, LightcutsClusterPair * pair, int id, float c)
 {
 	LightcutsCluster *one= &array[id];
-	KDSearchCallbackData data= {c, one, array};
+	KDSearchCallbackData data= {c, 0.0f, one, array};
+	int other;
 	
-	int other= BLI_kdtree_find_callback(tree, one->lar->co, NULL, one->id, cb_update_metric_max_dist, &data, nearest);
+	if (one->type == CLUSTER_SPOT) {
+		float cos_a= cosf(one->cone_angle);
+		cos_a= MAX2(0.0f, cos_a);
+		data.mindir= (1 - cos_a) * (1 - cos_a) * c;
+	}
 	
+	other= BLI_kdtree_find_callback(tree, one->lar->co, NULL, one->id, cb_update_metric_max_dist, &data, nearest);
+	
 	if (other != -1)
 	{
 		float metric= lightcuts_compute_metric(c, one, &array[other]);





More information about the Bf-blender-cvs mailing list