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]);


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to