Skip to content

Commit

Permalink
try to use sampled spectrum
Browse files Browse the repository at this point in the history
  • Loading branch information
GraphicsEnthusiast committed Jan 11, 2024
1 parent a1dcc87 commit 55f7984
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 14 deletions.
2 changes: 1 addition & 1 deletion core/Integrator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ void VolumetricPathTracing::RenderImage(const PostProcessing& post, Spectrum* im
assert(0);
}

image[j * width + i] = const_cast<PostProcessing&>(post).GetScreenColor(radiance);
image[j * width + i] = const_cast<PostProcessing&>(post).GetScreenColor(radiance.ToRGBSpectrum());
}
}
sampler->NextSample();
Expand Down
12 changes: 6 additions & 6 deletions core/PostProcessing.cpp
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
#include "PostProcessing.h"

Spectrum Reinhard::ToneMapping(const Spectrum& color) {
RGBSpectrum Reinhard::ToneMapping(const RGBSpectrum& color) {
float luminance = Luminance(color);

return color / (1.0f + luminance / limit);
}

Spectrum Uncharted2::ToneMapping(const Spectrum& color) {
auto F = [](const Spectrum &x) noexcept {
RGBSpectrum Uncharted2::ToneMapping(const RGBSpectrum& color) {
auto F = [](const RGBSpectrum &x) noexcept {
return (x * (a * x + c * b) + d * e) / (x * (a * x + b) + d * f) - e / f;
};

return F(1.6f * color) / F(white);
}

Spectrum ACES::ToneMapping(const Spectrum& color) {
RGBSpectrum ACES::ToneMapping(const RGBSpectrum& color) {
return (color * (a * color + b)) / (color * (c * color + d) + e);
}

Spectrum PostProcessing::GetScreenColor(const Spectrum& color) {
Spectrum screenColor = LinearToSRGB(toneMapper->ToneMapping(color * std::exp2(exposure)));
RGBSpectrum PostProcessing::GetScreenColor(const RGBSpectrum& color) {
RGBSpectrum screenColor = LinearToSRGB(toneMapper->ToneMapping(color * std::exp2(exposure)));

return screenColor;
}
14 changes: 7 additions & 7 deletions core/PostProcessing.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ inline float LinearToSRGB(float linear) {
}
}

inline Spectrum LinearToSRGB(const Spectrum& linear) {
Spectrum srgb;
inline RGBSpectrum LinearToSRGB(const RGBSpectrum& linear) {
RGBSpectrum srgb;
srgb[0] = LinearToSRGB(linear[0]);
srgb[1] = LinearToSRGB(linear[1]);
srgb[2] = LinearToSRGB(linear[2]);
Expand All @@ -31,7 +31,7 @@ class ToneMapper {
public:
ToneMapper(ToneMapperType type) : m_type(type) {}

virtual Spectrum ToneMapping(const Spectrum& color) = 0;
virtual RGBSpectrum ToneMapping(const RGBSpectrum& color) = 0;

inline ToneMapperType GetType() const {
return m_type;
Expand All @@ -45,7 +45,7 @@ class Reinhard : public ToneMapper {
public:
Reinhard() : ToneMapper(ToneMapperType::ReinhardToneMapper) {}

virtual Spectrum ToneMapping(const Spectrum& color) override;
virtual RGBSpectrum ToneMapping(const RGBSpectrum& color) override;

private:
static constexpr float limit = 1.5f;
Expand All @@ -55,7 +55,7 @@ class Uncharted2 : public ToneMapper {
public:
Uncharted2() : ToneMapper(ToneMapperType::Uncharted2ToneMapper) {}

virtual Spectrum ToneMapping(const Spectrum& color) override;
virtual RGBSpectrum ToneMapping(const RGBSpectrum& color) override;

private:
static constexpr float a = 0.15f;
Expand All @@ -71,7 +71,7 @@ class ACES : public ToneMapper {
public:
ACES() : ToneMapper(ToneMapperType::ACESToneMapper) {}

virtual Spectrum ToneMapping(const Spectrum& color) override;
virtual RGBSpectrum ToneMapping(const RGBSpectrum& color) override;

private:
static constexpr float a = 2.51f;
Expand All @@ -87,7 +87,7 @@ class PostProcessing {

PostProcessing(std::shared_ptr<ToneMapper> t, float e = 0.0f) : toneMapper(t), exposure(e) {}

Spectrum GetScreenColor(const Spectrum& color);
RGBSpectrum GetScreenColor(const RGBSpectrum& color);

private:
std::shared_ptr<ToneMapper> toneMapper;
Expand Down

0 comments on commit 55f7984

Please sign in to comment.