Skip to content
Snippets Groups Projects
Commit 90d47f0b authored by Yoel's avatar Yoel
Browse files

Diffuse Refactor

parent 8e01b223
No related branches found
No related tags found
No related merge requests found
...@@ -12,24 +12,38 @@ namespace material { ...@@ -12,24 +12,38 @@ namespace material {
DiffuseMaterial::DiffuseMaterial( DiffuseMaterial::DiffuseMaterial(
const std::shared_ptr<util::Sampler>& albedo_texture, const std::shared_ptr<util::Sampler>& albedo_texture,
const std::shared_ptr<util::Sampler>& emission_texture) const std::shared_ptr<util::Sampler>& emission_texture)
: albedo_texture(albedo_texture), emission_texture(emission_texture) { : albedo_texture(albedo_texture), emission_profile({emission_texture}) {
}
DiffuseMaterial::DiffuseMaterial(
const std::shared_ptr<util::Sampler>& albedo_texture,
const std::shared_ptr<util::Sampler>& emission_texture,
const util::Image& distribution)
: albedo_texture(albedo_texture),
emission_profile({emission_texture, distribution}) {
} }
DiffuseMaterial::DiffuseMaterial( DiffuseMaterial::DiffuseMaterial(
const std::shared_ptr<util::Sampler>& albedo_texture) const std::shared_ptr<util::Sampler>& albedo_texture)
: albedo_texture(albedo_texture), : albedo_texture(albedo_texture),
emission_texture( emission_profile(
std::make_shared<Constant>(Constant(util::Vec3(0, 0, 0)))) { {std::make_shared<Constant>(Constant(util::Vec3(0, 0, 0)))}) {
} }
DiffuseMaterial::DiffuseMaterial(const util::Vec3& color) DiffuseMaterial::DiffuseMaterial(const util::Vec3& color)
: albedo_texture(std::make_shared<Constant>(Constant(color))), : albedo_texture(std::make_shared<Constant>(Constant(color))),
emission_texture( emission_profile(
std::make_shared<Constant>(Constant(util::Vec3(0, 0, 0)))) { {std::make_shared<Constant>(Constant(util::Vec3(0, 0, 0)))}) {
} }
util::Vec3 DiffuseMaterial::albedo(const std::pair<float, float>& uv) const { util::Vec3 DiffuseMaterial::albedo(const std::pair<float, float>& uv) const {
return albedo_texture->color(uv.first, uv.second); return albedo_texture->color(uv.first, uv.second);
} }
util::Vec3 DiffuseMaterial::emission(const std::pair<float, float>& uv) const { util::Vec3 DiffuseMaterial::emission(const std::pair<float, float>& uv) const {
return emission_texture->color(uv.first, uv.second); return emission_profile.color(uv.first, uv.second);
}
std::pair<float, float> DiffuseMaterial::sampleEmissionProfile() const {
return emission_profile.sample();
}
std::optional<float> DiffuseMaterial::emission_pdf(float u, float v) const {
return emission_profile.pdf(u, v);
} }
util::Vec3 DiffuseMaterial::scattered_d(const util::Vec3& d, util::Vec3 DiffuseMaterial::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 {
...@@ -7,11 +8,15 @@ class DiffuseMaterial : public Material { ...@@ -7,11 +8,15 @@ class DiffuseMaterial : public Material {
public: public:
DiffuseMaterial(const std::shared_ptr<util::Sampler>& albedo_texture, DiffuseMaterial(const std::shared_ptr<util::Sampler>& albedo_texture,
const std::shared_ptr<util::Sampler>& emission_texture); const std::shared_ptr<util::Sampler>& emission_texture);
DiffuseMaterial(const std::shared_ptr<util::Sampler>& albedo_texture,
const std::shared_ptr<util::Sampler>& emission_texture,
const util::Image& distribution);
DiffuseMaterial(const std::shared_ptr<util::Sampler>& albedo); DiffuseMaterial(const std::shared_ptr<util::Sampler>& albedo);
DiffuseMaterial(const util::Vec3& color); DiffuseMaterial(const util::Vec3& color);
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;
...@@ -19,9 +24,10 @@ class DiffuseMaterial : public Material { ...@@ -19,9 +24,10 @@ class DiffuseMaterial : 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> albedo_texture; std::shared_ptr<util::Sampler> albedo_texture;
std::shared_ptr<util::Sampler> emission_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