wahn/rs_pbrt

Implement WhittedIntegrator

wahn opened this issue · 2 comments

wahn commented

Currently there is one integrator missing on the Rust side: The WhittedIntegrator. On the C++ side we have:

// WhittedIntegrator Declarations
class WhittedIntegrator : public SamplerIntegrator {
  public:
    // WhittedIntegrator Public Methods
    WhittedIntegrator(int maxDepth, std::shared_ptr<const Camera> camera,
                      std::shared_ptr<Sampler> sampler,
                      const Bounds2i &pixelBounds)
        : SamplerIntegrator(camera, sampler, pixelBounds), maxDepth(maxDepth) {}
    Spectrum Li(const RayDifferential &ray, const Scene &scene,
                Sampler &sampler, MemoryArena &arena, int depth) const;

  private:
    // WhittedIntegrator Private Data
    const int maxDepth;
};
wahn commented

Here an image rendered by the following test scene (using the C++ code):

> ~/builds/pbrt/release/pbrt pbrt_feature_demo_integrator_whitted.pbrt

pbrt_feature_demo_integrator_whitted

wahn commented

Since commit cf5235a the Rust code implements the WhittedIntegrator. One pixel difference to the C++ code:

> imf_diff pbrt.png pbrt_feature_demo_integrator_whitted.png
differing pixels:	  0.000% (1 of 518400)
average difference:	  1.480%
maximum difference:	  1.480%
Summary: 1 pixel differs slightly.