|
@@ -23,6 +23,7 @@
|
|
|
* fxaa
|
|
|
* luminosity
|
|
|
* colorCorrection
|
|
|
+ * brightnessContrast
|
|
|
* hueSaturation
|
|
|
* normalmap
|
|
|
* ssao
|
|
@@ -1337,6 +1338,63 @@ THREE.ShaderExtras = {
|
|
|
|
|
|
},
|
|
|
|
|
|
+ /* -------------------------------------------------------------------------
|
|
|
+ // Brightness and contrast adjustment
|
|
|
+ // https://github.com/evanw/glfx.js
|
|
|
+ // brightness: -1 to 1 (-1 is solid black, 0 is no change, and 1 is solid white)
|
|
|
+ // contrast: -1 to 1 (-1 is solid gray, 0 is no change, and 1 is maximum contrast)
|
|
|
+ ------------------------------------------------------------------------- */
|
|
|
+
|
|
|
+ 'brightnessContrast': {
|
|
|
+
|
|
|
+ uniforms: {
|
|
|
+
|
|
|
+ "tDiffuse" : { type: "t", value: null },
|
|
|
+ "brightness" : { type: "f", value: 0 },
|
|
|
+ "contrast" : { type: "f", value: 0 }
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ vertexShader: [
|
|
|
+
|
|
|
+ "varying vec2 vUv;",
|
|
|
+
|
|
|
+ "void main() {",
|
|
|
+
|
|
|
+ "vUv = uv;",
|
|
|
+
|
|
|
+ "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
|
|
|
+
|
|
|
+ "}"
|
|
|
+
|
|
|
+ ].join("\n"),
|
|
|
+
|
|
|
+ fragmentShader: [
|
|
|
+
|
|
|
+ "uniform sampler2D tDiffuse;",
|
|
|
+ "uniform float brightness;",
|
|
|
+ "uniform float contrast;",
|
|
|
+
|
|
|
+ "varying vec2 vUv;",
|
|
|
+
|
|
|
+ "void main() {",
|
|
|
+
|
|
|
+ "gl_FragColor = texture2D( tDiffuse, vUv );",
|
|
|
+
|
|
|
+ "gl_FragColor.rgb += brightness;",
|
|
|
+
|
|
|
+ "if (contrast > 0.0) {",
|
|
|
+ "gl_FragColor.rgb = (gl_FragColor.rgb - 0.5) / (1.0 - contrast) + 0.5;",
|
|
|
+ "} else {",
|
|
|
+ "gl_FragColor.rgb = (gl_FragColor.rgb - 0.5) * (1.0 + contrast) + 0.5;",
|
|
|
+ "}",
|
|
|
+
|
|
|
+ "}"
|
|
|
+
|
|
|
+ ].join("\n")
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
/* -------------------------------------------------------------------------
|
|
|
// Hue and saturation adjustment
|
|
|
// https://github.com/evanw/glfx.js
|