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 @@
+
+
+
+
+
+
+
+
+