Manta Interactive Ray Tracer Development Mailing List

Text archives Help


Re: [Manta] Image degrades as more processors get involved!


Chronological Thread 
  • From: "Christian Odom" <cnsodom@gmail.com>
  • To: MANTA <manta@sci.utah.edu>
  • Subject: Re: [Manta] Image degrades as more processors get involved!
  • Date: Wed, 5 Sep 2007 00:49:02 -0400
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:references; b=XwYHWBHbsJH6TMRPCkPTehjyW8w23FqcEwtAbTI1nxHgyAQctBvOfqjOVVO46IIXYVjc32DB90WnCs1Y1j7khqO0Og1n9IsfTnjL4a0NWiqJXua3Wp0Bkz3PBX7kGAPta0Xl64+UMi39EXENcf6hQaOC8EIduyc2ieQhBl9qoUU=



On 9/5/07, Abe Stephens <abe@sci.utah.edu> wrote:
It looks like ray packets or fragments are being corrupted somehow (e.g. invalid directions or origins causing rays that should it the background to hit the plane).

Do you experience this problem when using the default pinhole camera? We don't experience the artifact on our systems, which suggests it could be a IA64 code path problem, a non-SSE code path problem, or an issue with your camera implementation. 

If it doesn't occur with the default camera we can eliminate the first two and we'll have a lot less of the code to deal with.

The default camera is fine. 

This is our makeRays implementation.

void MatrixCamera::makeRays(RayPacket& rays) const
{

ASSERT(rays.getFlag(RayPacket::HaveImageCoordinates));
ASSERT(rays.getFlag(RayPacket::ConstantEye));
rays.setFlag(RayPacket::ConstantOrigin);

float temp[4];
temp[0] = inverseProjView[0][3];
temp[1] = inverseProjView[1][3];
temp[2] = inverseProjView[2][3];
temp[3] = inverseProjView[3][3];

Vector tempEye;
tempEye = Vector((float)temp[0]/(float)temp[3],(float)temp[1]/(float)temp[3],(float)temp[2]/(float)temp[3]);


for(int i = rays.begin(); i < rays.end(); i++){
temp[0] = inverseProjView[0][0]* rays.getImageCoordinates(i, 0) + inverseProjView[0][1]*rays.getImageCoordinates(i,1 )
+ inverseProjView[0][2] + inverseProjView[0][3];
temp[1] = inverseProjView[1][0]*rays.getImageCoordinates(i, 0) + inverseProjView[1][1]* rays.getImageCoordinates(i,1 )
+ inverseProjView[1][2] + inverseProjView[1][3];
temp[2] = inverseProjView[2][0]*rays.getImageCoordinates(i, 0) + inverseProjView[2][1]*rays.getImageCoordinates(i,1 )
+ inverseProjView[2][2] + inverseProjView[2][3];
temp[3] = inverseProjView[3][0]*rays.getImageCoordinates(i, 0) + inverseProjView[3][1]*rays.getImageCoordinates(i,1 )
+ inverseProjView[3][2] + inverseProjView[3][3];


target = Vector((float)temp[0]/(float)temp[3],(float)temp[1]/(float)temp[3],(float)temp[2]/(float)temp[3]);
target.normalize();
rays.setRay(i, tempEye, target);
}


Abe

On Sep 4, 2007, at 9:26 PM, Christian Odom wrote:

Hi everybody.

I wanted to see if anybody had an idea about what is going on in the picture.
The "Left Screen" is running on an ia64 system using 3 processors.  The
"Right Screen" is also running on an ia64 system, but it is using 25 processors.
Both are using a custom camera class, which uses a matrix to generate the eye point and 
the raydir.

It seems that the "noise" in the image is related to the number of processors we use.  The
more processors the more "noise."

Any ideas would be awesome.

--
Christian Odom
Graduate Student
Center for Advanced Computer Studies
http://www.cacs.louisiana.edu
Louisiana Immersive Technologies Enterprise
http://www.lite3d.com
<snapshot1.png>




--
Christian Odom
Graduate Student
Center for Advanced Computer Studies
http://www.cacs.louisiana.edu
Louisiana Immersive Technologies Enterprise
http://www.lite3d.com


Archive powered by MHonArc 2.6.16.

Top of page