mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-25 17:14:59 +02:00
Adding Color filter to the tone mapper
This commit is contained in:
parent
99251bdd6d
commit
4089f8c5b0
4 changed files with 40 additions and 7 deletions
|
@ -40,6 +40,13 @@ void ToneMappingEffect::setExposure(float exposure) {
|
|||
}
|
||||
}
|
||||
|
||||
void ToneMappingEffect::setColorFilter(const glm::vec3& colorFilter) {
|
||||
auto& params = _parametersBuffer.get<Parameters>();
|
||||
if (params._colorFilter != colorFilter) {
|
||||
_parametersBuffer.edit<Parameters>()._colorFilter = colorFilter;
|
||||
}
|
||||
}
|
||||
|
||||
void ToneMappingEffect::setToneCurve(ToneCurve curve) {
|
||||
auto& params = _parametersBuffer.get<Parameters>();
|
||||
if (params._toneCurve != curve) {
|
||||
|
@ -62,9 +69,6 @@ void ToneMappingEffect::render(RenderArgs* args, const gpu::TexturePointer& ligh
|
|||
batch.enableStereo(false);
|
||||
batch.setFramebuffer(destinationFramebuffer);
|
||||
|
||||
// FIXME: Generate the Luminosity map
|
||||
//batch.generateTextureMips(lightingBuffer);
|
||||
|
||||
batch.setViewportTransform(args->_viewport);
|
||||
batch.setProjectionTransform(glm::mat4());
|
||||
batch.resetViewTransform();
|
||||
|
@ -79,8 +83,9 @@ void ToneMappingEffect::render(RenderArgs* args, const gpu::TexturePointer& ligh
|
|||
|
||||
|
||||
void ToneMappingDeferred::configure(const Config& config) {
|
||||
_toneMappingEffect.setExposure(config.exposure);
|
||||
_toneMappingEffect.setToneCurve((ToneMappingEffect::ToneCurve)config.curve);
|
||||
_toneMappingEffect.setExposure(config.exposure);
|
||||
_toneMappingEffect.setColorFilter(config.colorFilter);
|
||||
_toneMappingEffect.setToneCurve((ToneMappingEffect::ToneCurve)config.curve);
|
||||
}
|
||||
|
||||
void ToneMappingDeferred::run(const render::RenderContextPointer& renderContext, const Inputs& inputs) {
|
||||
|
|
|
@ -31,6 +31,9 @@ public:
|
|||
void setExposure(float exposure);
|
||||
float getExposure() const { return _parametersBuffer.get<Parameters>()._exposure; }
|
||||
|
||||
void setColorFilter(const glm::vec3& colorFilter);
|
||||
glm::vec3 getColorFIlter() const { return _parametersBuffer.get<Parameters>()._colorFilter; }
|
||||
|
||||
// Different tone curve available
|
||||
enum ToneCurve {
|
||||
None = 0,
|
||||
|
@ -51,8 +54,10 @@ private:
|
|||
float _exposure = 0.0f;
|
||||
float _twoPowExposure = 1.0f;
|
||||
glm::vec2 spareA;
|
||||
glm::vec3 _colorFilter{ 1.0f };
|
||||
float spareB;
|
||||
int _toneCurve = None;
|
||||
glm::vec3 spareB;
|
||||
glm::vec3 spareC;
|
||||
|
||||
Parameters() {}
|
||||
};
|
||||
|
@ -65,15 +70,18 @@ private:
|
|||
class ToneMappingConfig : public render::Job::Config {
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(float exposure MEMBER exposure WRITE setExposure);
|
||||
Q_PROPERTY(glm::vec3 colorFilter MEMBER colorFilter WRITE setColorFilter);
|
||||
Q_PROPERTY(int curve MEMBER curve WRITE setCurve);
|
||||
public:
|
||||
ToneMappingConfig() : render::Job::Config(true) {}
|
||||
|
||||
void setExposure(float newExposure) { exposure = newExposure; emit dirty(); }
|
||||
void setColorFilter(const glm::vec3& newColorFilter) { colorFilter = newColorFilter; emit dirty(); }
|
||||
void setCurve(int newCurve) { curve = std::max((int)ToneMappingEffect::None, std::min((int)ToneMappingEffect::Filmic, newCurve)); emit dirty(); }
|
||||
|
||||
|
||||
float exposure{ 0.0f };
|
||||
glm::vec3 colorFilter { 1.0f };
|
||||
int curve{ ToneMappingEffect::None };
|
||||
signals:
|
||||
void dirty();
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
struct ToneMappingParams {
|
||||
vec4 _exp_2powExp_s0_s1;
|
||||
vec4 _colorFilter_s0;
|
||||
ivec4 _toneCurve_s0_s1_s2;
|
||||
};
|
||||
|
||||
|
@ -32,6 +33,9 @@ LAYOUT(binding=RENDER_UTILS_BUFFER_TM_PARAMS) uniform toneMappingParamsBuffer {
|
|||
float getTwoPowExposure() {
|
||||
return params._exp_2powExp_s0_s1.y;
|
||||
}
|
||||
vec3 getColorFilter() {
|
||||
return params._colorFilter_s0.xyz;
|
||||
}
|
||||
int getToneCurve() {
|
||||
return params._toneCurve_s0_s1_s2.x;
|
||||
}
|
||||
|
@ -45,7 +49,7 @@ void main(void) {
|
|||
vec4 fragColorRaw = texture(colorMap, varTexCoord0);
|
||||
vec3 fragColor = fragColorRaw.xyz;
|
||||
|
||||
vec3 srcColor = fragColor * getTwoPowExposure();
|
||||
vec3 srcColor = fragColor * getColorFilter() * getTwoPowExposure();
|
||||
|
||||
int toneCurve = getToneCurve();
|
||||
vec3 tonedColor = srcColor;
|
||||
|
|
|
@ -14,6 +14,7 @@ import QtQuick.Layouts 1.3
|
|||
import stylesUit 1.0
|
||||
import controlsUit 1.0 as HifiControls
|
||||
import "configSlider"
|
||||
import "../lib/plotperf"
|
||||
|
||||
Rectangle {
|
||||
HifiConstants { id: hifi;}
|
||||
|
@ -123,7 +124,22 @@ Rectangle {
|
|||
anchors.right: parent.right
|
||||
}
|
||||
}
|
||||
Item {
|
||||
HifiControls.Label {
|
||||
text: "Color filter"
|
||||
anchors.left: parent.left
|
||||
}
|
||||
|
||||
Color {
|
||||
height: 20
|
||||
anchors.right: parent.right
|
||||
width: parent.width / 2
|
||||
_color: render.mainViewTask.getConfig("ToneMapping")["colorFilter"]
|
||||
onNewColor: {
|
||||
render.mainViewTask.getConfig("ToneMapping")["colorFilter"] = getXColor()
|
||||
}
|
||||
}
|
||||
}
|
||||
Item {
|
||||
height: childrenRect.height
|
||||
anchors.left: parent.left
|
||||
|
|
Loading…
Reference in a new issue