BDPTIntegrator *CreateBDPTIntegrator(const ParamSet ¶ms, std::shared_ptr<Sampler> sampler, std::shared_ptr<const Camera> camera) { int maxDepth = params.FindOneInt("maxdepth", 5); bool visualizeStrategies = params.FindOneBool("visualizestrategies", false); bool visualizeWeights = params.FindOneBool("visualizeweights", false); if ((visualizeStrategies || visualizeWeights) && maxDepth > 5) { Warning( "visualizestrategies/visualizeweights was enabled, limiting " "maxdepth to 5"); maxDepth = 5; } int np; const int *pb = params.FindInt("pixelbounds", &np); Bounds2i pixelBounds = camera->film->GetSampleBounds(); if (pb) { if (np != 4) Error("Expected four values for \"pixelbounds\" parameter. Got %d.", np); else { pixelBounds = Intersect(pixelBounds, Bounds2i{{pb[0], pb[2]}, {pb[1], pb[3]}}); if (pixelBounds.Area() == 0) Error("Degenerate \"pixelbounds\" specified."); } } std::string lightStrategy = params.FindOneString("lightsamplestrategy", "power"); return new BDPTIntegrator(sampler, camera, maxDepth, visualizeStrategies, visualizeWeights, pixelBounds, lightStrategy); }
VolPathIntegrator *CreateVolPathIntegrator( const ParamSet ¶ms, std::shared_ptr<Sampler> sampler, std::shared_ptr<const Camera> camera) { int maxDepth = params.FindOneInt("maxdepth", 5); int np; const int *pb = params.FindInt("pixelbounds", &np); Bounds2i pixelBounds = camera->film->croppedPixelBounds; if (pb) { if (np != 4) Error("Expected four values for \"pixelbounds\" parameter. Got %d.", np); else { pixelBounds = Intersect(pixelBounds, Bounds2i{{pb[0], pb[2]}, {pb[1], pb[3]}}); if (pixelBounds.Area() == 0) Error("Degenerate \"pixelbounds\" specified."); } } return new VolPathIntegrator(maxDepth, camera, sampler, pixelBounds); }
VolPathIntegrator *CreateVolPathIntegrator( const ParamSet ¶ms, std::shared_ptr<Sampler> sampler, std::shared_ptr<const Camera> camera) { int maxDepth = params.FindOneInt("maxdepth", 5); int np; const int *pb = params.FindInt("pixelbounds", &np); Bounds2i pixelBounds = camera->film->GetSampleBounds(); if (pb) { if (np != 4) Error("Expected four values for \"pixelbounds\" parameter. Got %d.", np); else { pixelBounds = Intersect(pixelBounds, Bounds2i{{pb[0], pb[2]}, {pb[1], pb[3]}}); if (pixelBounds.Area() == 0) Error("Degenerate \"pixelbounds\" specified."); } } Float rrThreshold = params.FindOneFloat("rrthreshold", 1.); std::string lightStrategy = params.FindOneString("lightsamplestrategy", "spatial"); return new VolPathIntegrator(maxDepth, camera, sampler, pixelBounds, rrThreshold, lightStrategy); }