Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[MANTA] r518 - in branches/AFR/Engine/ImageTraversers: . AFR


Chronological Thread 
  • From: abhinav@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [MANTA] r518 - in branches/AFR/Engine/ImageTraversers: . AFR
  • Date: Tue, 30 Aug 2005 21:54:36 -0600 (MDT)

Author: abhinav
Date: Tue Aug 30 21:54:34 2005
New Revision: 518

Modified:
   branches/AFR/Engine/ImageTraversers/AFImageTraverser.h
   branches/AFR/Engine/ImageTraversers/AFR/kdtree.cc
   branches/AFR/Engine/ImageTraversers/AFR/sample.h
   branches/AFR/Engine/ImageTraversers/AFR/tiles.cc
   branches/AFR/Engine/ImageTraversers/AFR/tiles.h
Log:
added rgb variance rather than single intensity variance, made t hings a tad 
slower but much better tiling.
added #define COARSE_UPDATES in kdtree.cc. it disabple leaf updates and 
recomputing during split/merge. seems to work okay with slightly poor tiling 
but with some speedup. comment it if it is not suitable.



Modified: branches/AFR/Engine/ImageTraversers/AFImageTraverser.h
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFImageTraverser.h      (original)
+++ branches/AFR/Engine/ImageTraversers/AFImageTraverser.h      Tue Aug 30 
21:54:34 2005
@@ -62,7 +62,7 @@
                        void write_Tile_and_Camera(RenderContext& context);
                        inline int setSamplingRate(unsigned int srate)
             {
-                         static int numUpdates=0;
+                         static unsigned int numUpdates=0;
                          //cout << "srate = " << srate << endl;
                          float rate = (float)srate/(float)num_clients;
                          if(numUpdates==0)
@@ -72,8 +72,11 @@
                            samplingrate = 
(int)(((float)samplingrate*numUpdates + rate)/(float)(numUpdates+1));
                          }
                          numUpdates++;
-                         qSize = (int)(samplingrate*0.1);
-                         if(qSize>maxQSize) qSize = maxQSize;
+                         if(numUpdates%1000==0)
+                         {
+                           qSize = (int)(samplingrate*0.1);
+                           if(qSize>maxQSize) qSize = maxQSize;
+                         }  
                        }
                        static ImageTraverser* create(const vector<string>& 
args);
                        

Modified: branches/AFR/Engine/ImageTraversers/AFR/kdtree.cc
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFR/kdtree.cc   (original)
+++ branches/AFR/Engine/ImageTraversers/AFR/kdtree.cc   Tue Aug 30 21:54:34 
2005
@@ -9,6 +9,7 @@
 #include <Engine/ImageTraversers/AFR/kdtree.h>
 #include <assert.h>
 #define ONLY_NODE_UPDATE
+#define COARSE_UPDATES
 using namespace Manta;
 using namespace Manta::Afr;
 KDTree::KDTree()
@@ -201,9 +202,12 @@
        tile[index*2].setValidTile();
        tile[index*2].setTimeLastDerivativeSet(currenttime);
 #ifdef ONLY_NODE_UPDATE
-       //tile[index*2].copystats(tile[index]);
+#ifdef COARSE_UPDATES
+       tile[index*2].copystats(tile[index]);
+#else
        tile[index*2].recomputeStats(tile);
 #endif
+#endif
        tile[index*2].updateCommon(currenttime, tile, numTiles, samplingrate);
        // insert right child in the random list; we do it first because we 
do not want it to be valid yet
        insertRandom(index*2+1);
@@ -211,9 +215,12 @@
        tile[index*2+1].setValidTile();
        tile[index*2+1].setTimeLastDerivativeSet(currenttime);
 #ifdef ONLY_NODE_UPDATE
-       //tile[index*2+1].copystats(tile[index]);
+#ifdef COARSE_UPDATES
+       tile[index*2+1].copystats(tile[index]);
+#else
        tile[index*2+1].recomputeStats(tile);
 #endif
+#endif
        tile[index*2+1].updateCommon(currenttime, tile, numTiles, 
samplingrate);
        numTiles+=2; // update valid tile counter
        
@@ -272,8 +279,12 @@
        // set parent as a valid tile
        tile[index].setValidTile();
 #ifdef ONLY_NODE_UPDATE
+#ifdef COARSE_UPDATES
+       tile[index/2].copystats(tile[index]);
+#else
        tile[index/2].recomputeStats(tile);
 #endif
+#endif
        tile[index].setTimeLastDerivativeSet(currenttime);
        // increment valid tile counter
        numTiles++;
@@ -496,16 +507,19 @@
        else
          updateMinMax(vtileindex);
 #else
+#ifndef COARSE_UPDATES
        int x, y;
        x = (int)newsampleset->viewX;
        y = (int)newsampleset->viewY;
        int index = Tile::leafMapping[x/2][y/2];
         if(!tile[index].checkBounds(x,y)) return;
        tile[index].updateStatsAddSampleSet(newsampleset, currenttime, A, B, 
tile, numTiles, samplingrate);
+#else
        tile[newsampleset->tileindex].updateStatsAddSampleSet(newsampleset, 
currenttime, A, B, tile, numTiles, samplingrate);
        tile[newsampleset->tileindex/2].updateStatsAddSampleSet(newsampleset, 
currenttime, A, B, tile, numTiles, samplingrate);
        updateMinMax(newsampleset->tileindex);
 #endif
+#endif
 }
 
 void KDTree::updateStatsAddSample(Sample *newsample, Timestamp currenttime, 
@@ -532,6 +546,7 @@
        else
          updateMinMax(vtileindex);
 #else
+#ifndef COARSE_UPDATES
        int x, y;
        x = (int)newsample->viewCoord[0];
        y = (int)newsample->viewCoord[1];
@@ -539,9 +554,11 @@
        if(!tile[index].checkBounds(x,y)) return;
        tile[index].updateStatsAddSample(newsample, currenttime, A, B, tile, 
                                        numTiles, tgrad, occ, samplingrate);
+#else
        tile[newsample->tileindex].updateStatsAddSample(newsample, 
currenttime, A, B, tile, numTiles, tgrad, occ, samplingrate);
        tile[newsample->tileindex/2].updateStatsAddSample(newsample, 
currenttime, A, B, tile, numTiles, tgrad, occ, samplingrate);
        updateMinMax(newsample->tileindex);
+#endif
 #endif
 }
 

Modified: branches/AFR/Engine/ImageTraversers/AFR/sample.h
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFR/sample.h    (original)
+++ branches/AFR/Engine/ImageTraversers/AFR/sample.h    Tue Aug 30 21:54:34 
2005
@@ -285,6 +285,9 @@
                                }
                                
                                float      getIntensity(CrosshairSampleLoc 
sloc) { return sample[sloc].intensity(); }
+                               float      getR(CrosshairSampleLoc sloc) { 
return sample[sloc].c[0]; }
+                               float      getG(CrosshairSampleLoc sloc) { 
return sample[sloc].c[1]; }
+                               float      getB(CrosshairSampleLoc sloc) { 
return sample[sloc].c[2]; }
                                Timestamp  
getSampleTimeStamp(CrosshairSampleLoc sloc) { return sample[sloc].t; } 
                                inline bool isOccluded() { 
                                  const static float epsilon = 0.001;

Modified: branches/AFR/Engine/ImageTraversers/AFR/tiles.cc
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFR/tiles.cc    (original)
+++ branches/AFR/Engine/ImageTraversers/AFR/tiles.cc    Tue Aug 30 21:54:34 
2005
@@ -43,16 +43,16 @@
        nextrandom=prevrandom=0;
 }
 
-void Tile::initialize(int l, int b, int r, int t, 
+void Tile::initialize(int lft, int btm, int rht, int tp, 
                            int currlevel, int address, 
                       int width, int height, 
                       float A, float B)
 {
-       left = l;
-       right = r;
-       bottom = b;
-       top = t;
-       num_pixels = (r-l)*(t-b);
+       left = lft;
+       right = rht;
+       bottom = btm;
+       top = tp;
+       num_pixels = (right-left)*(top-bottom);
        //if(num_pixels==0) exit(1);
        if(num_pixels<=MIN_VALID_TILE_AREA) min_size_violation = true;
        else min_size_violation = false;
@@ -60,16 +60,17 @@
        index = address;
        max_index = index;
        min_index = index;
-       intensity.reset();
+       //intensity.reset();
+       r.reset(); g.reset(); b.reset();
        xGradient.reset();
        yGradient.reset();
        tGradient.reset();
        occlusion.reset();
        error = AMBIENT_ERROR;
        sum_tstamps.reset();
-  color[0] = drand48();
-  color[1] = drand48();
-  color[2] = drand48();
+       color[0] = drand48();
+       color[1] = drand48();
+       color[2] = drand48();
 }
 
 
@@ -126,7 +127,8 @@
        //error = (0.25*getUnderSampling(currenttime, samplingrate) 
        //      + 2.0*(intensity.getVariance()+AMBIENT_ERROR) 
        //      +0.25*getOcclusionMeasure(tree, nTiles))*num_pixels ;
-       error =  2.0*(intensity.getVariance()+AMBIENT_ERROR)*num_pixels; 
+       //error =        
2.0*(intensity.getVariance()+AMBIENT_ERROR)*num_pixels; 
+       error =  2.0*(r.getVariance() + g.getVariance() + b.getVariance() + 
AMBIENT_ERROR)*num_pixels; 
        //error += 0.25*getUnderSampling(currenttime, samplingrate, 
tree)*num_pixels; 
        error += 0.25*getOcclusionMeasure(tree, nTiles)*num_pixels;
 }
@@ -165,7 +167,8 @@
   
   for(int i=lindex; i<rindex; i++)
   {
-    intensity += tree[i].intensity;
+    //intensity += tree[i].intensity;
+    r += tree[i].r; g += tree[i].g; b += tree[i].b;
     xGradient += tree[i].xGradient;
     yGradient += tree[i].yGradient;
     tGradient += tree[i].tGradient;
@@ -182,11 +185,29 @@
        float temptime = newsampleset->getSampleTimeStamp(TEMPORAL_SAMPLE);
        float stime = newsampleset->timestamp;
 
-       intensity.addElement(newsampleset->getIntensity(CENTER_SAMPLE), 
wt_new, ratio);
-       intensity.addElement(newsampleset->getIntensity(TOP_SAMPLE), wt_new, 
1.0);
-       intensity.addElement(newsampleset->getIntensity(BOTTOM_SAMPLE), 
wt_new, 1.0);
-       intensity.addElement(newsampleset->getIntensity(LEFT_SAMPLE), wt_new, 
1.0);
-       intensity.addElement(newsampleset->getIntensity(RIGHT_SAMPLE), 
wt_new, 1.0);
+       //intensity.addElement(newsampleset->getIntensity(CENTER_SAMPLE), 
wt_new, ratio);
+       //intensity.addElement(newsampleset->getIntensity(TOP_SAMPLE), 
wt_new, 1.0);
+       //intensity.addElement(newsampleset->getIntensity(BOTTOM_SAMPLE), 
wt_new, 1.0);
+       //intensity.addElement(newsampleset->getIntensity(LEFT_SAMPLE), 
wt_new, 1.0);
+       //intensity.addElement(newsampleset->getIntensity(RIGHT_SAMPLE), 
wt_new, 1.0);
+       
+       r.addElement(newsampleset->getR(CENTER_SAMPLE), wt_new, ratio);
+       r.addElement(newsampleset->getR(TOP_SAMPLE), wt_new, 1.0);
+       r.addElement(newsampleset->getR(BOTTOM_SAMPLE), wt_new, 1.0);
+       r.addElement(newsampleset->getR(LEFT_SAMPLE), wt_new, 1.0);
+       r.addElement(newsampleset->getR(RIGHT_SAMPLE), wt_new, 1.0);
+       
+       g.addElement(newsampleset->getG(CENTER_SAMPLE), wt_new, ratio);
+       g.addElement(newsampleset->getG(TOP_SAMPLE), wt_new, 1.0);
+       g.addElement(newsampleset->getG(BOTTOM_SAMPLE), wt_new, 1.0);
+       g.addElement(newsampleset->getG(LEFT_SAMPLE), wt_new, 1.0);
+       g.addElement(newsampleset->getG(RIGHT_SAMPLE), wt_new, 1.0);
+       
+       b.addElement(newsampleset->getB(CENTER_SAMPLE), wt_new, ratio);
+       b.addElement(newsampleset->getB(TOP_SAMPLE), wt_new, 1.0);
+       b.addElement(newsampleset->getB(BOTTOM_SAMPLE), wt_new, 1.0);
+       b.addElement(newsampleset->getB(LEFT_SAMPLE), wt_new, 1.0);
+       b.addElement(newsampleset->getB(RIGHT_SAMPLE), wt_new, 1.0);
        
        xGradient.addElement(newsampleset->xgrad, wt_new, ratio);
        yGradient.addElement(newsampleset->ygrad, wt_new, ratio);
@@ -206,7 +227,10 @@
 {
        float wt_new = 1.0;
        float ratio = getWeight(A, B, (currenttime - time_last_updated));
-       intensity.addElement(newsample->intensity(), wt_new, ratio);
+       //intensity.addElement(newsample->intensity(), wt_new, ratio);
+       r.addElement(newsample->c[0], wt_new, ratio);
+       g.addElement(newsample->c[1], wt_new, ratio);
+       b.addElement(newsample->c[2], wt_new, ratio);
        //sum_tstamps.addElement(newsample->t, wt_new, ratio);
        sum_tstamps.uniformDecrease(ratio);
        xGradient.uniformDecrease(ratio);

Modified: branches/AFR/Engine/ImageTraversers/AFR/tiles.h
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFR/tiles.h     (original)
+++ branches/AFR/Engine/ImageTraversers/AFR/tiles.h     Tue Aug 30 21:54:34 
2005
@@ -60,7 +60,8 @@
 
                Stats2 xGradient, yGradient, tGradient, 
                      sum_tstamps, occlusion;
-               Stats intensity;
+               //Stats intensity;
+               Stats r,g,b;
                float error, previous_error, total_error;
                Timestamp time_last_derivative_set, time_last_updated;
                int derivative_gap_count;
@@ -84,12 +85,16 @@
                  yGradient = t.yGradient;
                  tGradient = t.tGradient;
 
-                 intensity = t.intensity;
+                 //intensity = t.intensity;
+                 r = t.r;
+                 g = t.g;
+                 b = t.b;
+                       
                  sum_tstamps = t.sum_tstamps;
                  occlusion = t.occlusion;
                }
                void print( int nTiles, Tile *tree, Timestamp currenttime);
-               void initialize(int l, int b, int r, int t, 
+               void initialize(int lft, int btm, int rht, int top, 
                                                int currlevel, int address, 
                                                int width, int height,  
                                                float A, float B);




  • [MANTA] r518 - in branches/AFR/Engine/ImageTraversers: . AFR, abhinav, 08/30/2005

Archive powered by MHonArc 2.6.16.

Top of page