Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[MANTA] r1265 - in trunk: Engine/Shadows Interface Model/Instances SCIRun/Core


Chronological Thread 
  • From: bigler@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [MANTA] r1265 - in trunk: Engine/Shadows Interface Model/Instances SCIRun/Core
  • Date: Fri, 22 Dec 2006 07:57:04 -0700 (MST)

Author: bigler
Date: Fri Dec 22 07:57:02 2006
New Revision: 1265

Modified:
   trunk/Engine/Shadows/HardShadows.cc
   trunk/Interface/RayPacket.cc
   trunk/Interface/RayPacket.h
   trunk/Model/Instances/InstanceRT.cc
   trunk/SCIRun/Core/CMakeLists.txt
Log:

Engine/Shadows/HardShadows.cc
Interface/RayPacket.cc
Interface/RayPacket.h

  Got rid of RayPacket::HaveHitRecords.  It is no longer used.  It
  wasn't being maintained as a feature of the RayPacket, hense its
  removal.

Model/Instances/InstanceRT.cc

  If the instance_rays directions were normalize, we need to normalize
  our own rays to make t values consistent.  This needs to be thought
  about a bit more as there are other issues with instances such as
  primitives that copy texture values during intersection.

SCIRun/Core/CMakeLists.txt

  Turn off forced verbose makefiles.  This one got missed from an
  earlier checkin.  Use "make VERBOSE=1" to see verbose output.


Modified: trunk/Engine/Shadows/HardShadows.cc
==============================================================================
--- trunk/Engine/Shadows/HardShadows.cc (original)
+++ trunk/Engine/Shadows/HardShadows.cc Fri Dec 22 07:57:02 2006
@@ -172,7 +172,7 @@
   } while(last == -1 && j < nlights);
       
   // Send the shadow rays.
-  shadowRays.setFlag( 
RayPacket::NormalizedDirections|RayPacket::HaveHitRecords );
+  shadowRays.setFlag( RayPacket::NormalizedDirections );
   shadowRays.resize ( last + 1);
   context.scene->getObject()->intersect(context, shadowRays);
 

Modified: trunk/Interface/RayPacket.cc
==============================================================================
--- trunk/Interface/RayPacket.cc        (original)
+++ trunk/Interface/RayPacket.cc        Fri Dec 22 07:57:02 2006
@@ -6,62 +6,10 @@
 
 void RayPacket::actualNormalizeDirections()
 {
-  if(flags & HaveHitRecords || 1){
 #ifdef MANTA_SSE
-    int b = (rayBegin + 3) & (~3);
-    int e = rayEnd & (~3);
-    if(b == e){
-      for(int i=rayBegin;i<rayEnd;i++){
-        Real sum = 0;
-        for(int j=0;j<3;j++)
-          sum += data->direction[j][i] * data->direction[j][i];
-        Real length = SCIRun::Sqrt(sum);
-        if(data->hitMatl[i] != 0)
-          data->minT[i] *= length;
-        Real scale = 1/length;
-        for(int j=0;j<3;j++)
-          data->direction[j][i] *= scale;
-      }
-    } else {
-      int i = rayBegin;
-      for(;i<b;i++){
-        Real sum = 0;
-        for(int j=0;j<3;j++)
-          sum += data->direction[j][i] * data->direction[j][i];
-        Real length = SCIRun::Sqrt(sum);
-        if(data->hitMatl[i] != 0)
-          data->minT[i] *= length;
-        Real scale = 1/length;
-        for(int j=0;j<3;j++)
-          data->direction[j][i] *= scale;
-      }
-      for(;i<e;i+=4){
-        __m128 xd = _mm_load_ps(&data->direction[0][i]);
-        __m128 yd = _mm_load_ps(&data->direction[1][i]);
-        __m128 zd = _mm_load_ps(&data->direction[2][i]);
-        __m128 sum = _mm_add_ps(_mm_add_ps(_mm_mul_ps(xd, xd), 
_mm_mul_ps(yd, yd)), _mm_mul_ps(zd, zd));
-        __m128 scale =  _mm_rsqrt_ps(sum);
-        // Do one newton-raphson iteration to get the accuracy we need
-        scale = _mm_mul_ps(_mm_mul_ps(scale, _mm_sub_ps(_mm_set1_ps(3.f), 
_mm_mul_ps(sum, _mm_mul_ps(scale, scale)))), _mm_set1_ps(0.5f));
-        _mm_store_ps(&data->direction[0][i], _mm_mul_ps(xd, scale));
-        _mm_store_ps(&data->direction[1][i], _mm_mul_ps(yd, scale));
-        _mm_store_ps(&data->direction[2][i], _mm_mul_ps(zd, scale));
-
-        _mm_store_ps(&data->minT[i], _mm_div_ps(_mm_load_ps(&data->minT[i]), 
scale));
-      }
-      for(;i<rayEnd;i++){
-        Real sum = 0;
-        for(int j=0;j<3;j++)
-          sum += data->direction[j][i] * data->direction[j][i];
-        Real length = SCIRun::Sqrt(sum);
-        if(data->hitMatl[i] != 0)
-          data->minT[i] *= length;
-        Real scale = 1/length;
-        for(int j=0;j<3;j++)
-          data->direction[j][i] *= scale;
-      }
-    }
-#else
+  int b = (rayBegin + 3) & (~3);
+  int e = rayEnd & (~3);
+  if(b == e){
     for(int i=rayBegin;i<rayEnd;i++){
       Real sum = 0;
       for(int j=0;j<3;j++)
@@ -73,62 +21,60 @@
       for(int j=0;j<3;j++)
         data->direction[j][i] *= scale;
     }
-#endif
   } else {
-#ifdef MANTA_SSE
-    int b = (rayBegin + 3) & (~3);
-    int e = rayEnd & (~3);
-    if(b == e){
-      for(int i=rayBegin;i<rayEnd;i++){
-        Real sum = 0;
-        for(int j=0;j<3;j++)
-          sum += data->direction[j][i] * data->direction[j][i];
-        Real scale = 1/SCIRun::Sqrt(sum);
-        for(int j=0;j<3;j++)
-          data->direction[j][i] *= scale;
-      }
-    } else {
-      int i = rayBegin;
-      for(;i<b;i++){
-        Real sum = 0;
-        for(int j=0;j<3;j++)
-          sum += data->direction[j][i] * data->direction[j][i];
-        Real scale = 1/SCIRun::Sqrt(sum);
-        for(int j=0;j<3;j++)
-          data->direction[j][i] *= scale;
-      }
-      for(;i<e;i+=4){
-        __m128 xd = _mm_load_ps(&data->direction[0][i]);
-        __m128 yd = _mm_load_ps(&data->direction[1][i]);
-        __m128 zd = _mm_load_ps(&data->direction[2][i]);
-        __m128 sum = _mm_add_ps(_mm_add_ps(_mm_mul_ps(xd, xd), 
_mm_mul_ps(yd, yd)), _mm_mul_ps(zd, zd));
-        __m128 scale =  _mm_rsqrt_ps(sum);
-        // Do one newton-raphson iteration to get the accuracy we need
-        scale = _mm_mul_ps(_mm_mul_ps(scale, _mm_sub_ps(_mm_set1_ps(3.f), 
_mm_mul_ps(sum, _mm_mul_ps(scale, scale)))), _mm_set1_ps(0.5f));
-        _mm_store_ps(&data->direction[0][i], _mm_mul_ps(xd, scale));
-        _mm_store_ps(&data->direction[1][i], _mm_mul_ps(yd, scale));
-        _mm_store_ps(&data->direction[2][i], _mm_mul_ps(zd, scale));
-      }
-      for(;i<rayEnd;i++){
-        Real sum = 0;
-        for(int j=0;j<3;j++)
-          sum += data->direction[j][i] * data->direction[j][i];
-        Real scale = 1/SCIRun::Sqrt(sum);
-        for(int j=0;j<3;j++)
-          data->direction[j][i] *= scale;
-      }
+    int i = rayBegin;
+    for(;i<b;i++){
+      Real sum = 0;
+      for(int j=0;j<3;j++)
+        sum += data->direction[j][i] * data->direction[j][i];
+      Real length = SCIRun::Sqrt(sum);
+      if(data->hitMatl[i] != 0)
+        data->minT[i] *= length;
+      Real scale = 1/length;
+      for(int j=0;j<3;j++)
+        data->direction[j][i] *= scale;
     }
-#else
-    for(int i=rayBegin;i<rayEnd;i++){
+    for(;i<e;i+=4){
+      __m128 xd = _mm_load_ps(&data->direction[0][i]);
+      __m128 yd = _mm_load_ps(&data->direction[1][i]);
+      __m128 zd = _mm_load_ps(&data->direction[2][i]);
+      __m128 sum = _mm_add_ps(_mm_add_ps(_mm_mul_ps(xd, xd), _mm_mul_ps(yd, 
yd)), _mm_mul_ps(zd, zd));
+      __m128 scale =  _mm_rsqrt_ps(sum);
+      // Do one newton-raphson iteration to get the accuracy we need
+      scale = _mm_mul_ps(_mm_mul_ps(scale, _mm_sub_ps(_mm_set1_ps(3.f), 
_mm_mul_ps(sum, _mm_mul_ps(scale, scale)))), _mm_set1_ps(0.5f));
+      _mm_store_ps(&data->direction[0][i], _mm_mul_ps(xd, scale));
+      _mm_store_ps(&data->direction[1][i], _mm_mul_ps(yd, scale));
+      _mm_store_ps(&data->direction[2][i], _mm_mul_ps(zd, scale));
+
+      _mm_store_ps(&data->minT[i], _mm_div_ps(_mm_load_ps(&data->minT[i]), 
scale));
+    }
+    for(;i<rayEnd;i++){
       Real sum = 0;
       for(int j=0;j<3;j++)
         sum += data->direction[j][i] * data->direction[j][i];
-      Real scale = 1/SCIRun::Sqrt(sum);
+      Real length = SCIRun::Sqrt(sum);
+      if(data->hitMatl[i] != 0)
+        data->minT[i] *= length;
+      Real scale = 1/length;
       for(int j=0;j<3;j++)
         data->direction[j][i] *= scale;
     }
-#endif
   }
+#else
+  for(int i=rayBegin;i<rayEnd;i++){
+    Real sum = 0;
+    for(int j=0;j<3;j++)
+      sum += data->direction[j][i] * data->direction[j][i];
+    Real length = SCIRun::Sqrt(sum);
+    if(data->hitMatl[i] != 0) {
+      data->minT[i] *= length;
+    }
+    Real scale = 1/length;
+    for(int j=0;j<3;j++)
+      data->direction[j][i] *= scale;
+  }
+#endif
+
   flags |= NormalizedDirections;
 
   if (flags & HaveInverseDirections)

Modified: trunk/Interface/RayPacket.h
==============================================================================
--- trunk/Interface/RayPacket.h (original)
+++ trunk/Interface/RayPacket.h Fri Dec 22 07:57:02 2006
@@ -137,7 +137,7 @@
       HaveImageCoordinates  = 0x0004,
       NormalizedDirections  = 0x0008,
       HaveHitPositions      = 0x0010,
-      HaveHitRecords        = 0x0020,
+      // HaveHitRecords        = 0x0020,  Don't use this flag anymore
       HaveTexture3          = 0x0040,
       HaveTexture2          = 0x0080,
       HaveUnitNormals       = 0x0100, // Used by prims that set
@@ -408,7 +408,6 @@
         data->minT[i] = MAXT;
       }
 #endif
-      flags |= HaveHitRecords;
     }
     void resetHit(int which) {
       data->hitMatl[which] = 0;

Modified: trunk/Model/Instances/InstanceRT.cc
==============================================================================
--- trunk/Model/Instances/InstanceRT.cc (original)
+++ trunk/Model/Instances/InstanceRT.cc Fri Dec 22 07:57:02 2006
@@ -113,6 +113,10 @@
     }
   }
   instance->intersect(context, instance_rays);
+  // Now if our instance rays were rescaled by a primitive (call to
+  // normalizeDirections), we need to scale our rays too.
+  if (instance_rays.getFlag(RayPacket::NormalizedDirections))
+      rays.normalizeDirections();
   for(int i=rays.begin();i<rays.end();i++){
     if(instance_rays.wasHit(i)){
       // Instance was hit

Modified: trunk/SCIRun/Core/CMakeLists.txt
==============================================================================
--- trunk/SCIRun/Core/CMakeLists.txt    (original)
+++ trunk/SCIRun/Core/CMakeLists.txt    Fri Dec 22 07:57:02 2006
@@ -1,6 +1,3 @@
-
-SET (CMAKE_VERBOSE_MAKEFILE TRUE)
-
 SET (SCIRUN_SOURCES)
 SET (SCIRUN_SOURCES ${SCIRUN_SOURCES}
      Containers/StringUtil.cc




  • [MANTA] r1265 - in trunk: Engine/Shadows Interface Model/Instances SCIRun/Core, bigler, 12/22/2006

Archive powered by MHonArc 2.6.16.

Top of page