Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[Manta] r1919 - in trunk: Engine/SampleGenerators Interface Model/Materials


Chronological Thread 
  • From: boulos@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [Manta] r1919 - in trunk: Engine/SampleGenerators Interface Model/Materials
  • Date: Tue, 11 Dec 2007 23:24:46 -0700 (MST)

Author: boulos
Date: Tue Dec 11 23:24:44 2007
New Revision: 1919

Modified:
   trunk/Engine/SampleGenerators/ConstantSampleGenerator.cc
   trunk/Engine/SampleGenerators/ConstantSampleGenerator.h
   trunk/Engine/SampleGenerators/Stratified2D.cc
   trunk/Engine/SampleGenerators/Stratified2D.h
   trunk/Engine/SampleGenerators/UniformRandomGenerator.cc
   trunk/Engine/SampleGenerators/UniformRandomGenerator.h
   trunk/Interface/SampleGenerator.h
   trunk/Model/Materials/Dielectric.cc
   trunk/Model/Materials/ThinDielectric.cc
Log:
Engine/SampleGenerators/ConstantSampleGenerator.cc
Engine/SampleGenerators/ConstantSampleGenerator.h
Engine/SampleGenerators/Stratified2D.cc
Engine/SampleGenerators/Stratified2D.h
Engine/SampleGenerators/UniformRandomGenerator.cc
Engine/SampleGenerators/UniformRandomGenerator.h
Interface/SampleGenerator.h
Model/Materials/Dielectric.cc
Model/Materials/ThinDielectric.cc

 Our Dielectric and ThinDielectric use a packet mapping that is
 non-standard for Manta (that's my fault, but I still think it's a
 good idea) where the packets aren't one to one. This requires that
 the sample generator be able to still setup the parent-child
 relationship between rays for this case. setupChildRay is now
 provided for this usage and implemented in the 3 sample generators.

 This commit fixes the bug Austin sent out with r1916.


Modified: trunk/Engine/SampleGenerators/ConstantSampleGenerator.cc
==============================================================================
--- trunk/Engine/SampleGenerators/ConstantSampleGenerator.cc    (original)
+++ trunk/Engine/SampleGenerators/ConstantSampleGenerator.cc    Tue Dec 11 
23:24:44 2007
@@ -24,6 +24,9 @@
 void ConstantSampleGenerator::setupChildPacket(const RenderContext& context, 
RayPacket& parent, RayPacket& child) {
 }
 
+void ConstantSampleGenerator::setupChildRay(const RenderContext& context, 
RayPacket& parent, RayPacket& child, int i, int j) {
+}
+
 void ConstantSampleGenerator::nextSeeds(const RenderContext& context, 
Packet<float>& results, RayPacket& rays) {
 #ifdef MANTA_SSE
   int b = (rays.rayBegin + 3) & (~3);

Modified: trunk/Engine/SampleGenerators/ConstantSampleGenerator.h
==============================================================================
--- trunk/Engine/SampleGenerators/ConstantSampleGenerator.h     (original)
+++ trunk/Engine/SampleGenerators/ConstantSampleGenerator.h     Tue Dec 11 
23:24:44 2007
@@ -15,6 +15,7 @@
 
     virtual void setupPacket(const RenderContext& context, RayPacket& rays);
     virtual void setupChildPacket(const RenderContext& context, RayPacket& 
parent, RayPacket& child);
+    virtual void setupChildRay(const RenderContext& context, RayPacket& 
parent, RayPacket& child, int i, int j);
     virtual void nextSeeds(const RenderContext& context, Packet<float>& 
results, RayPacket& rays);
     virtual void nextSeeds(const RenderContext& context, Packet<double>& 
results, RayPacket& rays);
 

Modified: trunk/Engine/SampleGenerators/Stratified2D.cc
==============================================================================
--- trunk/Engine/SampleGenerators/Stratified2D.cc       (original)
+++ trunk/Engine/SampleGenerators/Stratified2D.cc       Tue Dec 11 23:24:44 
2007
@@ -222,6 +222,15 @@
   }
 }
 
+void Stratified2D::setupChildRay(const RenderContext& context, RayPacket& 
parent, RayPacket& child, int i, int j) {
+  child.sample_depth = parent.sample_depth;
+  child.data->sample_id[j] = parent.data->sample_id[i];
+  child.data->region_id[j] = parent.data->region_id[i];
+  if (parent.getFlag(RayPacket::ConstantSampleRegion)) {
+    child.setFlag(RayPacket::ConstantSampleRegion);
+  }
+}
+
 void Stratified2D::nextSeeds(const RenderContext& context, Packet<float>& 
results, RayPacket& rays) {
   if (rays.sample_depth < max_depth) {
     for (int i = rays.begin(); i < rays.end(); i++) {

Modified: trunk/Engine/SampleGenerators/Stratified2D.h
==============================================================================
--- trunk/Engine/SampleGenerators/Stratified2D.h        (original)
+++ trunk/Engine/SampleGenerators/Stratified2D.h        Tue Dec 11 23:24:44 
2007
@@ -35,6 +35,7 @@
 
     virtual void setupPacket(const RenderContext& context, RayPacket& rays);
     virtual void setupChildPacket(const RenderContext& context, RayPacket& 
parent, RayPacket& child);
+    virtual void setupChildRay(const RenderContext& context, RayPacket& 
parent, RayPacket& child, int i, int j);
 
     virtual void nextSeeds(const RenderContext& context, Packet<float>& 
results, RayPacket& rays);
     virtual void nextSeeds(const RenderContext& context, Packet<double>& 
results, RayPacket& rays);

Modified: trunk/Engine/SampleGenerators/UniformRandomGenerator.cc
==============================================================================
--- trunk/Engine/SampleGenerators/UniformRandomGenerator.cc     (original)
+++ trunk/Engine/SampleGenerators/UniformRandomGenerator.cc     Tue Dec 11 
23:24:44 2007
@@ -28,6 +28,9 @@
 void UniformRandomGenerator::setupChildPacket(const RenderContext& context, 
RayPacket& parent, RayPacket& child) {
 }
 
+void UniformRandomGenerator::setupChildRay(const RenderContext& context, 
RayPacket& parent, RayPacket& child, int i, int j) {
+}
+
 void UniformRandomGenerator::nextSeeds(const RenderContext& context, 
Packet<float>& results, RayPacket& rays) {
   context.rng->nextPacket(results, rays);
 }

Modified: trunk/Engine/SampleGenerators/UniformRandomGenerator.h
==============================================================================
--- trunk/Engine/SampleGenerators/UniformRandomGenerator.h      (original)
+++ trunk/Engine/SampleGenerators/UniformRandomGenerator.h      Tue Dec 11 
23:24:44 2007
@@ -15,6 +15,7 @@
 
     virtual void setupPacket(const RenderContext& context, RayPacket& rays);
     virtual void setupChildPacket(const RenderContext& context, RayPacket& 
parent, RayPacket& child);
+    virtual void setupChildRay(const RenderContext& context, RayPacket& 
parent, RayPacket& child, int i, int j);
 
     virtual void nextSeeds(const RenderContext& context, Packet<float>& 
results, RayPacket& rays);
     virtual void nextSeeds(const RenderContext& context, Packet<double>& 
results, RayPacket& rays);

Modified: trunk/Interface/SampleGenerator.h
==============================================================================
--- trunk/Interface/SampleGenerator.h   (original)
+++ trunk/Interface/SampleGenerator.h   Tue Dec 11 23:24:44 2007
@@ -36,6 +36,14 @@
     // sample_depth, etc, this is a good opportunity to do so.
     virtual void setupChildPacket(const RenderContext& context, RayPacket& 
parent, RayPacket& child) = 0;
 
+    // In some cases (notably Dielectric.cc as of 11-Dec-2007), the
+    // parent-child relationship is not a direct 1-to-1 mapping. This
+    // function asks the SampleGenerator to make child ray j a child
+    // of parent ray i. For now, however, do NOT setup a child packet
+    // from multiple parents as we are assuming that the region
+    // constant flag can be determined from the parent alone.
+    virtual void setupChildRay(const RenderContext& context, RayPacket& 
parent, RayPacket& child, int i, int j) = 0;
+
     // Grab a set of random seeds (float and double versions)
     virtual void nextSeeds(const RenderContext& context, Packet<float>& 
results, RayPacket& rays) = 0;
     virtual void nextSeeds(const RenderContext& context, Packet<double>& 
results, RayPacket& rays) = 0;

Modified: trunk/Model/Materials/Dielectric.cc
==============================================================================
--- trunk/Model/Materials/Dielectric.cc (original)
+++ trunk/Model/Materials/Dielectric.cc Tue Dec 11 23:24:44 2007
@@ -140,6 +140,7 @@
         reflected_rays.setImportance(num_refl, refl_importance);
         reflected_rays.setTime(num_refl, rays.getTime(i));
         reflected_rays.setRay(num_refl, hitpos, refl_dir);
+        context.sample_generator->setupChildRay(context, rays, 
reflected_rays, i, num_refl);
         refl_source[num_refl] = i;
         refl_attenuation[num_refl] = beers_color;
         num_refl++;
@@ -178,6 +179,7 @@
         reflected_rays.setImportance(num_refl, refl_importance);
         reflected_rays.setTime(num_refl, rays.getTime(i));
         reflected_rays.setRay(num_refl, hitpos, refl_dir);
+        context.sample_generator->setupChildRay(context, rays, 
reflected_rays, i, num_refl);
         refl_source[num_refl] = i;
         num_refl++;
       }
@@ -191,6 +193,7 @@
         refracted_rays.setTime(num_refr, rays.getTime(i));
         Vector refr_dir = (eta_inverse * rayD +
                            (eta_inverse * costheta - costheta2) * normal);
+        context.sample_generator->setupChildRay(context, rays, 
refracted_rays, i, num_refr);
         refracted_rays.setRay(num_refr, hitpos, refr_dir);
         if (debugFlag) { cerr << "refr_dir.length() = 
"<<refr_dir.length()<<"\n"; }
         refr_source[num_refr] = i;
@@ -205,11 +208,9 @@
 
   // Trace the rays.
   if(num_refl) {
-    context.sample_generator->setupChildPacket(context, rays, 
reflected_rays);
     context.renderer->traceRays(context, reflected_rays);
   }
   if(num_refr) {
-    context.sample_generator->setupChildPacket(context, rays, 
refracted_rays);
     context.renderer->traceRays(context, refracted_rays);
   }
 

Modified: trunk/Model/Materials/ThinDielectric.cc
==============================================================================
--- trunk/Model/Materials/ThinDielectric.cc     (original)
+++ trunk/Model/Materials/ThinDielectric.cc     Tue Dec 11 23:24:44 2007
@@ -164,6 +164,7 @@
       Color refl_importance = in_importance * refl_attenuation[num_refl];
       if(refl_importance.luminance() > cutoff){
         reflected_rays.setImportance(num_refl, refl_importance);
+        context.sample_generator->setupChildRay(context, rays, 
reflected_rays, i, num_refl);
         reflected_rays.setRay(num_refl, hitpos, refl_dir);
         refl_source[num_refl] = i;
         num_refl++;
@@ -181,6 +182,7 @@
         refracted_rays.setImportance(num_refr, refr_importance);
         refracted_rays.setTime(num_refr, rays.getTime(i));
         Vector refr_orig = hitpos + refr_dir * refraction_ray_length;
+        context.sample_generator->setupChildRay(context, rays, 
refracted_rays, i, num_refr);
         refracted_rays.setRay(num_refr, refr_orig, rayD);
         if (debugFlag) { cerr << "refr_dir.length() = 
"<<refr_dir.length()<<"\n"; }
         refr_source[num_refr] = i;
@@ -197,6 +199,7 @@
       if(refl_importance.luminance() > cutoff){
         reflected_rays.setImportance(num_refl, refl_importance);
         reflected_rays.setTime(num_refl, rays.getTime(i));
+        context.sample_generator->setupChildRay(context, rays, 
reflected_rays, i, num_refl);
         reflected_rays.setRay(num_refl, hitpos, refl_dir);
         refl_source[num_refl] = i;
         refl_attenuation[num_refl] = Color::white();




  • [Manta] r1919 - in trunk: Engine/SampleGenerators Interface Model/Materials, boulos, 12/12/2007

Archive powered by MHonArc 2.6.16.

Top of page