From 2d8c648361defc6ad06b41a113b077feaeab779d Mon Sep 17 00:00:00 2001
From: Alexander Gauggel <agauggel@uni-koblenz.de>
Date: Mon, 21 Jun 2021 18:31:41 +0200
Subject: [PATCH] [#81] Nicer tonemapping operator

---
 .../voxelization/resources/shaders/tonemapping.comp | 13 ++++++++++++-
 projects/voxelization/src/main.cpp                  |  2 +-
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/projects/voxelization/resources/shaders/tonemapping.comp b/projects/voxelization/resources/shaders/tonemapping.comp
index 2383302f..60830169 100644
--- a/projects/voxelization/resources/shaders/tonemapping.comp
+++ b/projects/voxelization/resources/shaders/tonemapping.comp
@@ -6,6 +6,17 @@ layout(set=0, binding=1, rgba8)             uniform image2D outImage;
 
 layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
 
+// from: https://knarkowicz.wordpress.com/2016/01/06/aces-filmic-tone-mapping-curve/
+vec3 ACESFilm(vec3 x)
+{
+    float a = 2.51f;
+    float b = 0.03f;
+    float c = 2.43f;
+    float d = 0.59f;
+    float e = 0.14f;
+    return clamp((x*(a*x+b))/(x*(c*x+d)+e), 0, 1);
+}
+
 void main(){
 
     if(any(greaterThanEqual(gl_GlobalInvocationID.xy, imageSize(inImage)))){
@@ -13,7 +24,7 @@ void main(){
     }
     ivec2 uv            = ivec2(gl_GlobalInvocationID.xy);
     vec3 linearColor    = imageLoad(inImage, uv).rgb;
-    vec3 tonemapped     = linearColor / (linearColor + 1); // reinhard tonemapping
+    vec3 tonemapped     = ACESFilm(linearColor);
     vec3 gammaCorrected = pow(tonemapped, vec3(1.f / 2.2f));
     imageStore(outImage, uv, vec4(gammaCorrected, 0.f));
 }
\ No newline at end of file
diff --git a/projects/voxelization/src/main.cpp b/projects/voxelization/src/main.cpp
index bd6bc22a..67033f04 100644
--- a/projects/voxelization/src/main.cpp
+++ b/projects/voxelization/src/main.cpp
@@ -159,7 +159,7 @@ int main(int argc, const char** argv) {
 		glm::vec3   direction;
 		float       padding;
 		glm::vec3   sunColor    = glm::vec3(1.f);
-		float       sunStrength = 15.f;
+		float       sunStrength = 20.f;
 		glm::mat4   lightMatrix;
 	};
 	LightInfo lightInfo;
-- 
GitLab