diff --git a/RayTracer/material/Material.h b/RayTracer/material/Material.h index 63090e411fa2ede8085a82594324e77e309f4bad..14d4de0d026150aa782a1e4d3bd5015a5ff5c1fc 100644 --- a/RayTracer/material/Material.h +++ b/RayTracer/material/Material.h @@ -1,5 +1,6 @@ #pragma once +#include <optional> #include <random> #include "../sampling/Sampler.h" @@ -11,12 +12,14 @@ class Material { public: virtual util::Vec3 albedo(const std::pair<float, float>& uv) const = 0; virtual util::Vec3 emission(const std::pair<float, float>& uv) const = 0; + virtual std::pair<float, float> sampleEmissionProfile() const = 0; virtual util::Vec3 scattered_d(const util::Vec3& d, const util::Vec3& n) const = 0; virtual bool scatter(const util::Vec3& d, const util::Vec3& n) const = 0; virtual float calculateLightMultiplier(const util::Vec3& d_in, const util::Vec3& d_out, const util::Vec3& n) const = 0; + virtual std::optional<float> emission_pdf(float u, float v) const = 0; }; util::Vec3 reflection(const util::Vec3& d, const util::Vec3& n); } // namespace material