Text archives Help
- 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.