Browse Source

Fix color correction

ShiroSmith 6 years ago
parent
commit
a2a3542a52
1 changed files with 12 additions and 8 deletions
  1. 12 8
      h3d/shader/pbr/ToneMapping.hx

+ 12 - 8
h3d/shader/pbr/ToneMapping.hx

@@ -20,6 +20,7 @@ class ToneMapping extends ScreenShader {
 		@param var colorGradingLUT : Sampler2D;
 		@param var lutSize : Float;
 
+
 		@param var pixelSize : Vec2;
 
 		function fragment() {
@@ -49,19 +50,22 @@ class ToneMapping extends ScreenShader {
 
 			if( hasColorGrading ) {
 				var uv = min(color.rgb, vec3(1,1,1));
+				var innerWidth = lutSize - 1.0;
 				var sliceSize = 1.0 / lutSize;
 				var slicePixelSize = sliceSize / lutSize;
-				var sliceInnerSize = slicePixelSize * (lutSize - 1.0);
-				var blueSlice0 = min(floor(uv.b * lutSize), lutSize - 1.0);
-				var blueSlice1 = min(blueSlice0 + 1.0, lutSize - 1.0);
+				var sliceInnerSize = slicePixelSize * innerWidth;
+				var blueSlice0 = min(floor(uv.b * innerWidth), innerWidth);
+				var blueSlice1 = min(blueSlice0 + 1.0, innerWidth);
 				var xOffset = slicePixelSize * 0.5 + uv.r * sliceInnerSize;
-				var s0 = xOffset + (blueSlice0 * sliceSize);
-				var s1 = xOffset + (blueSlice1 * sliceSize);
-				var slice0Color = texture(colorGradingLUT, vec2(s0, uv.y)).rgb;
-				var slice1Color = texture(colorGradingLUT, vec2(s1, uv.y)).rgb;
-				var bOffset = mod(uv.b * lutSize, 1.0);
+				var yOffset = sliceSize * 0.5 + uv.g * (1.0 - sliceSize);
+				var s0 = vec2(xOffset + (blueSlice0 * sliceSize), yOffset);
+				var s1 = vec2(xOffset + (blueSlice1 * sliceSize), yOffset);
+				var slice0Color = texture(colorGradingLUT, s0).rgb;
+				var slice1Color = texture(colorGradingLUT, s1)).rgb;
+				var bOffset = frac(uv.b * innerWidth, 1.0);
 				var result = mix(slice0Color, slice1Color, bOffset);
 				color.rgb = result;
+
 			}
 
 			pixelColor = color;