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 @@
namespace material {
BackgroundMaterial::BackgroundMaterial(
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)
: texture(std::make_shared<Constant>(albedo)) {
: emission_profile({std::make_shared<Constant>(albedo)}) {
}
util::Vec3 BackgroundMaterial::albedo(const std::pair<float, float>& uv) const {
return util::Vec3(1, 1, 1);
}
util::Vec3 BackgroundMaterial::emission(
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,
const util::Vec3& n) const {
......
#pragma once
#include "../tools/EmissionProfile.h"
#include "Material.h"
namespace material {
class BackgroundMaterial : public Material {
public:
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);
util::Vec3 albedo(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,
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 {
float calculateLightMultiplier(const util::Vec3& d_in,
const util::Vec3& d_out,
const util::Vec3& n) const override;
std::optional<float> emission_pdf(float u, float v) const override;
private:
std::shared_ptr<util::Sampler> texture;
util::EmissionProfile emission_profile;
};
} // 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