Text archives Help
- From: abhinav@sci.utah.edu
- To: manta@sci.utah.edu
- Subject: [MANTA] r522 - in branches/AFR/Engine/ImageTraversers: . AFR
- Date: Tue, 30 Aug 2005 23:48:30 -0600 (MDT)
Author: abhinav
Date: Tue Aug 30 23:48:29 2005
New Revision: 522
Modified:
branches/AFR/Engine/ImageTraversers/AFImageTraverser.cc
branches/AFR/Engine/ImageTraversers/AFImageTraverser.h
branches/AFR/Engine/ImageTraversers/AFR/kdtree.cc
branches/AFR/Engine/ImageTraversers/AFR/tiles.cc
Log:
approximately fixed undersampling. not great but workable.
added jittering of samples always. may need to switch to conditional
jittering in future where we jitter only when tgrads are very low.
Abe mentioned tgrads were unusually high. However I could not reproduce that
on the simple scene I have.
Added spatial coherence, use commandline option -spatial.
still has unstability issues with multiple threads.
Modified: branches/AFR/Engine/ImageTraversers/AFImageTraverser.cc
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFImageTraverser.cc (original)
+++ branches/AFR/Engine/ImageTraversers/AFImageTraverser.cc Tue Aug 30
23:48:29 2005
@@ -54,6 +54,7 @@
displayClientId( 0 ),
visScale( 1.0 ),
outputStreams( false ),
+ spatialCoherence( false ),
//streamlock( "streamlock" ),
tmode(SOLID)
{
@@ -80,6 +81,9 @@
}
outputStreams = true;
}
+ if (args[i] == "-spatial") {
+ spatialCoherence = true;
+ }
if (args[i] == "-debug") {
debug_window = true;
}
@@ -578,10 +582,13 @@
RayPacketData raydata;
RayPacket rays(raydata, size, depth, flags);
+ int cx, cy;
+ //int tindex = kdtree[myID].getRandomSample(cx, cy,
myRandomNumber[myID]);
+ int tindex = kdtree[myID].getPseudoRandomTile();
+ int coherenceCount=0;
// Copy samples from the sampleQ into the fragment.
for(i=0;i<size;i++) {
- int cx, cy;
- int tindex = kdtree[myID].getRandomSample(cx, cy,
myRandomNumber[myID]);
+ kdtree[myID].getRandomSamplefromTile(tindex, cx, cy,
myRandomNumber[myID]);
// cout << "f+i = " << f+i << endl;
newSample[myID][f+i].viewCoord[0] = cx;
newSample[myID][f+i].viewCoord[1] = cy;
@@ -592,22 +599,33 @@
// cout << "raytracing: " << cx << ", " << cy << endl;
// we will jitter later, now just add 0.5 <TODO>
+ double jitterx, jittery;
+ jitterx = myRandomNumber[myID].genfrand();
+ jittery = myRandomNumber[myID].genfrand();
if(xres>yres) // let the smaller dimension be mapped to [-1,1]
{
- px = (double)(-1.0 +
2.0*(double)newSample[myID][f+i].viewCoord[0]/(double)yres);
- py = (double)(-1.0 +
2.0*(double)newSample[myID][f+i].viewCoord[1]/(double)yres);
+ px = (double)(-1.0 +
2.0*((double)newSample[myID][f+i].viewCoord[0]+jitterx)/(double)yres);
+ py = (double)(-1.0 +
2.0*((double)newSample[myID][f+i].viewCoord[1]+jittery)/(double)yres);
}
else
{
- px = (double)(-1.0 +
2.0*(double)newSample[myID][f+i].viewCoord[0]/(double)xres);
- py = (double)(-1.0 +
2.0*(double)newSample[myID][f+i].viewCoord[1]/(double)xres);
+ px = (double)(-1.0 +
2.0*((double)newSample[myID][f+i].viewCoord[0]+jitterx)/(double)xres);
+ py = (double)(-1.0 +
2.0*((double)newSample[myID][f+i].viewCoord[1]+jittery)/(double)xres);
}
+ if(px<-1.0) px = -1.0; if(px>1.0) px = 1.0;
+ if(py<-1.0) py = -1.0; if(py>1.0) py = 1.0;
// samples_done[context.proc] ++;
samples_done[context.proc].addOne();
// Specify the position and color pointer for the packet element.
rays.setPixel(i, 0, px, py, &color[i]);
+ coherenceCount++;
+ if(!spatialCoherence ||
coherenceCount>=kdtree[myID].getTileSize(tindex)/10)
+ {
+ tindex = kdtree[myID].getPseudoRandomTile();
+ coherenceCount=0;
+ }
}
//////////////////////////////////////////////////////////////////////////
Modified: branches/AFR/Engine/ImageTraversers/AFImageTraverser.h
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFImageTraverser.h (original)
+++ branches/AFR/Engine/ImageTraversers/AFImageTraverser.h Tue Aug 30
23:48:29 2005
@@ -90,6 +90,7 @@
// number of fragments a chunk is divided into. It is
divided equally amongst all clients
int numFragments;
bool outputStreams;
+ bool spatialCoherence;
string streamfilename;
FILE **streamfile;
//SCIRun::Mutex streamlock;
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 23:48:29
2005
@@ -23,7 +23,7 @@
{
A = 1.0;
// B is calculated such that the oldest sample after 2/3rd sec
weight >=0.01
- float decaytime = 400000.0*1.0/((float)samplingrate*3.0);
+ float decaytime = 400000.0*2.0/((float)samplingrate*3.0);
B = -1.0*log(0.01)/decaytime;
//cout << "samplingrate = " << samplingrate << endl;
//B = -1.0*log(0.01)/(2.0/3.0);
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 23:48:29
2005
@@ -116,7 +116,7 @@
float Tile::getUnderSampling(float currenttime, int samplingrate, Tile *tree)
{
float meanGlobalAge =
0.5*(float)tree[1].num_pixels/(float)samplingrate;
- float uerror = (currenttime -
sum_tstamps.getMean())*0.16/meanGlobalAge - 1.0;
+ float uerror = (currenttime -
sum_tstamps.getMean())*0.33/meanGlobalAge - 1.0;
if(uerror>1.0) uerror = 1.0;
if(uerror<0.0) uerror = 0.0;
return uerror;
@@ -129,7 +129,7 @@
// +0.25*getOcclusionMeasure(tree, nTiles))*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*getUnderSampling(currenttime, samplingrate,
tree)*num_pixels;
error += 0.25*getOcclusionMeasure(tree, nTiles)*num_pixels;
}
@@ -214,7 +214,8 @@
tGradient.addElement(newsampleset->tgrad, wt_new, ratio);
sum_tstamps.addElement(stime, wt_new, ratio);
- sum_tstamps.addElement(4.0*stime, wt_new, 1.0);
+ //sum_tstamps.addElement(4.0*stime, wt_new, 1.0);
+ //sum_tstamps.addElement(temptime,
getWeight(A,B,currenttime-temptime), 1.0);
float occ = (newsampleset->isOccluded())? 1.0 : 0.0;
occlusion.addElement(occ, wt_new, ratio);
- [MANTA] r522 - in branches/AFR/Engine/ImageTraversers: . AFR, abhinav, 08/30/2005
Archive powered by MHonArc 2.6.16.