5 #ifndef _SPICA_SUBSURFACE_INTEGRATOR_H_
6 #define _SPICA_SUBSURFACE_INTEGRATOR_H_
8 #include "../core/common.h"
9 #include "../core/forward_decl.h"
10 #include "../core/bounds3d.h"
11 #include "../core/interaction.h"
13 #include "integrator.h"
14 #include "photon_map.h"
24 Hierarchy(
double radius,
double maxError);
28 Spectrum irradiance(
const SurfaceInteraction& po)
const;
30 void samplePoints(
const Scene& scene,
const Point3d& pCamera);
32 void buildOctree(
const Scene& scene,
33 const RenderParams& params,
38 Spectrum Li(
const Scene& scene,
39 const RenderParams& params,
46 std::vector<Interaction> points_;
49 std::unique_ptr<Octree> octree_;
51 std::unique_ptr<PhotonMap> photonmap_;
57 class SPICA_EXPORTS HierarchicalIntegrator :
public SamplerIntegrator {
60 HierarchicalIntegrator(
const std::shared_ptr<const Camera>& camera,
61 const std::shared_ptr<Sampler>& smapler,
62 double maxError = 0.05);
63 ~HierarchicalIntegrator();
65 void initialize(
const Scene& scene,
66 const RenderParams& params,
67 Sampler& sampler)
override;
69 void loopStarted(
const Scene& scene,
70 const RenderParams& params,
71 Sampler& sampler)
override;
73 Spectrum Li(
const Scene& scene,
74 const RenderParams& params,
78 int depth = 0)
const override;
81 std::unique_ptr<Hierarchy> hi_;
87 #endif // _SPICA_SUBSURFACE_INTEGRATOR_H_