diff --git a/binaries/data/mods/mod/shaders/effects/resolve_pbr.xml b/binaries/data/mods/mod/shaders/effects/resolve_pbr.xml new file mode 100644 index 0000000000..83a45e6534 --- /dev/null +++ b/binaries/data/mods/mod/shaders/effects/resolve_pbr.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/binaries/data/mods/mod/shaders/glsl/common/tone_mapper.h b/binaries/data/mods/mod/shaders/glsl/common/tone_mapper.h new file mode 100644 index 0000000000..addb812462 --- /dev/null +++ b/binaries/data/mods/mod/shaders/glsl/common/tone_mapper.h @@ -0,0 +1,12 @@ +#ifndef INCLUDED_COMMON_TONE_MAPPING +#define INCLUDED_COMMON_TONE_MAPPING + +vec3 applyTonemapper(vec3 color) +{ + float whitePoint = 10.0; + // Extendend Reinhard: + // https://www-old.cs.utah.edu/docs/techreports/2002/pdf/UUCS-02-001.pdf + return color * (vec3(1.0) + color / (whitePoint * whitePoint)) / (vec3(1.0) + color); +} + +#endif // INCLUDED_COMMON_TONE_MAPPING diff --git a/binaries/data/mods/mod/shaders/glsl/compute_resolve_pbr.cs b/binaries/data/mods/mod/shaders/glsl/compute_resolve_pbr.cs index 382218c546..3dc922c1ec 100644 --- a/binaries/data/mods/mod/shaders/glsl/compute_resolve_pbr.cs +++ b/binaries/data/mods/mod/shaders/glsl/compute_resolve_pbr.cs @@ -1,6 +1,7 @@ #version 430 #include "common/compute.h" +#include "common/tone_mapper.h" BEGIN_DRAW_TEXTURES TEXTURE_2D(0, inTex) @@ -14,14 +15,6 @@ END_DRAW_UNIFORMS STORAGE_2D(0, rgba8, outTex); -vec3 applyTonemapper(vec3 color) -{ - float whitePoint = 10.0; - // Extendend Reinhard: - // https://www-old.cs.utah.edu/docs/techreports/2002/pdf/UUCS-02-001.pdf - return color * (vec3(1.0) + color / (whitePoint * whitePoint)) / (vec3(1.0) + color); -} - layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in; void main() { diff --git a/binaries/data/mods/mod/shaders/glsl/resolve_pbr.fs b/binaries/data/mods/mod/shaders/glsl/resolve_pbr.fs new file mode 100644 index 0000000000..3b8fc2e85b --- /dev/null +++ b/binaries/data/mods/mod/shaders/glsl/resolve_pbr.fs @@ -0,0 +1,23 @@ +#version 120 + +#include "common/fragment.h" +#include "common/stage.h" +#include "common/tone_mapper.h" + +BEGIN_DRAW_TEXTURES + TEXTURE_2D(0, inTex) +END_DRAW_TEXTURES + +BEGIN_DRAW_UNIFORMS + // Premultiplied exposure, already contains 2^exposure. + UNIFORM(float, exposure) +END_DRAW_UNIFORMS + +VERTEX_OUTPUT(0, vec2, v_tex); + +void main() +{ + vec3 hdrColor = SAMPLE_2D(GET_DRAW_TEXTURE_2D(inTex), v_tex).rgb; + vec3 sdrColor = applyTonemapper(hdrColor * exposure); + OUTPUT_FRAGMENT_SINGLE_COLOR(vec4(sdrColor, 1.0)); +} diff --git a/binaries/data/mods/mod/shaders/glsl/resolve_pbr.xml b/binaries/data/mods/mod/shaders/glsl/resolve_pbr.xml new file mode 100644 index 0000000000..cd8593f6f5 --- /dev/null +++ b/binaries/data/mods/mod/shaders/glsl/resolve_pbr.xml @@ -0,0 +1,9 @@ + + + + + + + + +