[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