Skip to content
Snippets Groups Projects
Commit 8e01b223 authored by Yoel's avatar Yoel
Browse files

BackgroundMaterial Refactor

parent 78f8e56a
No related branches found
No related tags found
No related merge requests found
...@@ -5,17 +5,29 @@ ...@@ -5,17 +5,29 @@
namespace material { namespace material {
BackgroundMaterial::BackgroundMaterial( BackgroundMaterial::BackgroundMaterial(
const std::shared_ptr<util::Sampler>& texture) const std::shared_ptr<util::Sampler>& texture)
: texture(texture) { : emission_profile({texture}) {
}
BackgroundMaterial::BackgroundMaterial(
const std::shared_ptr<util::Sampler>& texture,
const util::Image& distribution)
: emission_profile({texture, distribution}) {
} }
BackgroundMaterial::BackgroundMaterial(const util::Vec3& albedo) BackgroundMaterial::BackgroundMaterial(const util::Vec3& albedo)
: texture(std::make_shared<Constant>(albedo)) { : emission_profile({std::make_shared<Constant>(albedo)}) {
} }
util::Vec3 BackgroundMaterial::albedo(const std::pair<float, float>& uv) const { util::Vec3 BackgroundMaterial::albedo(const std::pair<float, float>& uv) const {
return util::Vec3(1, 1, 1); return util::Vec3(1, 1, 1);
} }
util::Vec3 BackgroundMaterial::emission( util::Vec3 BackgroundMaterial::emission(
const std::pair<float, float>& uv) const { const std::pair<float, float>& uv) const {
return texture->color(uv.first, uv.second); return emission_profile.color(uv.first, uv.second);
}
std::pair<float, float> BackgroundMaterial::sampleEmissionProfile() const {
return emission_profile.sample();
}
std::optional<float> BackgroundMaterial::emission_pdf(float u, float v) const {
return emission_profile.pdf(u, v);
} }
util::Vec3 BackgroundMaterial::scattered_d(const util::Vec3& d, util::Vec3 BackgroundMaterial::scattered_d(const util::Vec3& d,
const util::Vec3& n) const { const util::Vec3& n) const {
......
#pragma once #pragma once
#include "../tools/EmissionProfile.h"
#include "Material.h" #include "Material.h"
namespace material { namespace material {
class BackgroundMaterial : public Material { class BackgroundMaterial : public Material {
public: public:
BackgroundMaterial(const std::shared_ptr<util::Sampler>& texture); BackgroundMaterial(const std::shared_ptr<util::Sampler>& texture);
BackgroundMaterial(const std::shared_ptr<util::Sampler>& texture,
const util::Image& distribution);
BackgroundMaterial(const util::Vec3& albedo); BackgroundMaterial(const util::Vec3& albedo);
util::Vec3 albedo(const std::pair<float, float>& uv) const override; util::Vec3 albedo(const std::pair<float, float>& uv) const override;
util::Vec3 emission(const std::pair<float, float>& uv) const override; util::Vec3 emission(const std::pair<float, float>& uv) const override;
std::pair<float, float> sampleEmissionProfile() const override;
util::Vec3 scattered_d(const util::Vec3& d, util::Vec3 scattered_d(const util::Vec3& d,
const util::Vec3& n) const override; const util::Vec3& n) const override;
bool scatter(const util::Vec3& d, const util::Vec3& n) const override; bool scatter(const util::Vec3& d, const util::Vec3& n) const override;
...@@ -17,8 +21,9 @@ class BackgroundMaterial : public Material { ...@@ -17,8 +21,9 @@ class BackgroundMaterial : public Material {
float calculateLightMultiplier(const util::Vec3& d_in, float calculateLightMultiplier(const util::Vec3& d_in,
const util::Vec3& d_out, const util::Vec3& d_out,
const util::Vec3& n) const override; const util::Vec3& n) const override;
std::optional<float> emission_pdf(float u, float v) const override;
private: private:
std::shared_ptr<util::Sampler> texture; util::EmissionProfile emission_profile;
}; };
} // namespace material } // namespace material
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment