Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/opencolorio/gpu_shader_display_transform.glsl')
-rw-r--r--intern/opencolorio/gpu_shader_display_transform.glsl42
1 files changed, 30 insertions, 12 deletions
diff --git a/intern/opencolorio/gpu_shader_display_transform.glsl b/intern/opencolorio/gpu_shader_display_transform.glsl
index 61da755f02f..ca0d2566ed1 100644
--- a/intern/opencolorio/gpu_shader_display_transform.glsl
+++ b/intern/opencolorio/gpu_shader_display_transform.glsl
@@ -1,17 +1,18 @@
/* Blender OpenColorIO implementation */
-uniform sampler1D curve_mapping_texture;
uniform sampler2D image_texture;
uniform sampler2D overlay_texture;
-uniform sampler3D lut3d_texture;
-uniform sampler3D lut3d_display_texture;
uniform float dither;
+uniform float scale;
+uniform float exponent;
uniform bool predivide;
-uniform bool curve_mapping;
uniform bool overlay;
-layout(std140) uniform OCIO_GLSLCurveMappingParameters
+#ifdef USE_CURVE_MAPPING
+uniform sampler1D curve_mapping_texture;
+
+layout(std140) uniform OCIO_GPUCurveMappingParameters
{
/* Curve mapping parameters
*
@@ -114,6 +115,7 @@ vec4 curvemapping_evaluate_premulRGBF(vec4 col)
result.a = col.a;
return result;
}
+#endif /* USE_CURVE_MAPPING */
/* Using a triangle distribution which gives a more final uniform noise.
* See Banding in Games:A Noisy Rant(revision 5) Mikkel Gjøl, Playdead (slide 27) */
@@ -145,9 +147,9 @@ vec4 apply_dither(vec4 col, vec2 uv)
vec4 OCIO_ProcessColor(vec4 col, vec4 col_overlay, vec2 noise_uv)
{
- if (curve_mapping) {
- col = curvemapping_evaluate_premulRGBF(col);
- }
+#ifdef USE_CURVE_MAPPING
+ col = curvemapping_evaluate_premulRGBF(col);
+#endif
if (predivide) {
if (col.a > 0.0 && col.a < 1.0) {
@@ -160,15 +162,31 @@ vec4 OCIO_ProcessColor(vec4 col, vec4 col_overlay, vec2 noise_uv)
* for straight alpha at this moment
*/
- col = OCIO_to_display_linear_with_look(col, lut3d_texture);
+ /* Convert to scene linear (usually a no-op). */
+ col = OCIO_to_scene_linear(col);
+
+ /* Apply exposure in scene linear. */
+ col.rgb *= scale;
+
+ /* Convert to display space. */
+ col = OCIO_to_display(col);
+ /* Blend with overlay in UI colorspace.
+ *
+ * UI colorspace here refers to the display linear color space,
+ * i.e: The linear color space w.r.t. display chromaticity and radiometry.
+ * We separate the colormanagement process into two steps to be able to
+ * merge UI using alpha blending in the correct color space. */
if (overlay) {
+ col.rgb = pow(col.rgb, vec3(exponent * 2.2));
col = clamp(col, 0.0, 1.0);
col *= 1.0 - col_overlay.a;
col += col_overlay; /* Assumed unassociated alpha. */
+ col.rgb = pow(col.rgb, vec3(1.0 / 2.2));
+ }
+ else {
+ col.rgb = pow(col.rgb, vec3(exponent));
}
-
- col = OCIO_to_display_encoded(col, lut3d_display_texture);
if (dither > 0.0) {
col = apply_dither(col, noise_uv);
@@ -189,4 +207,4 @@ void main()
vec2 noise_uv = round_to_pixel(image_texture, texCoord_interp.st);
fragColor = OCIO_ProcessColor(col, col_overlay, noise_uv);
-} \ No newline at end of file
+}