Browse Source

Merge pull request #12125 from Mugen87/dev3

common.glsl: Introduce linearToRelativeLuminance()
Mr.doob 8 years ago
parent
commit
07ff147a92

+ 4 - 4
examples/js/shaders/LuminosityShader.js

@@ -29,6 +29,8 @@ THREE.LuminosityShader = {
 
 	fragmentShader: [
 
+		"#include <common>",
+
 		"uniform sampler2D tDiffuse;",
 
 		"varying vec2 vUv;",
@@ -37,11 +39,9 @@ THREE.LuminosityShader = {
 
 			"vec4 texel = texture2D( tDiffuse, vUv );",
 
-			"vec3 luma = vec3( 0.299, 0.587, 0.114 );",
-
-			"float v = dot( texel.xyz, luma );",
+			"float l = linearToRelativeLuminance( texel.rgb );",
 
-			"gl_FragColor = vec4( v, v, v, texel.w );",
+			"gl_FragColor = vec4( l, l, l, texel.w );",
 
 		"}"
 

+ 6 - 6
examples/js/shaders/ToneMapShader.js

@@ -31,6 +31,8 @@ THREE.ToneMapShader = {
 
 	fragmentShader: [
 
+		"#include <common>",
+
 		"uniform sampler2D tDiffuse;",
 
 		"varying vec2 vUv;",
@@ -43,19 +45,17 @@ THREE.ToneMapShader = {
 		"#else",
 			"uniform float averageLuminance;",
 		"#endif",
-		
-		"const vec3 LUM_CONVERT = vec3(0.299, 0.587, 0.114);",
 
 		"vec3 ToneMap( vec3 vColor ) {",
 			"#ifdef ADAPTED_LUMINANCE",
-				// Get the calculated average luminance 
+				// Get the calculated average luminance
 				"float fLumAvg = texture2D(luminanceMap, vec2(0.5, 0.5)).r;",
 			"#else",
 				"float fLumAvg = averageLuminance;",
 			"#endif",
-			
+
 			// Calculate the luminance of the current pixel
-			"float fLumPixel = dot(vColor, LUM_CONVERT);",
+			"float fLumPixel = linearToRelativeLuminance( vColor );",
 
 			// Apply the modified operator (Eq. 4)
 			"float fLumScaled = (fLumPixel * middleGrey) / max( minLuminance, fLumAvg );",
@@ -67,7 +67,7 @@ THREE.ToneMapShader = {
 		"void main() {",
 
 			"vec4 texel = texture2D( tDiffuse, vUv );",
-			
+
 			"gl_FragColor = vec4( ToneMap( texel.xyz ), texel.w );",
 
 		"}"

+ 9 - 0
src/renderers/shaders/ShaderChunk/common.glsl

@@ -83,3 +83,12 @@ mat3 transpose( const in mat3 v ) {
 	return tmp;
 
 }
+
+// https://en.wikipedia.org/wiki/Relative_luminance
+float linearToRelativeLuminance( const in vec3 color ) {
+
+	vec3 weights = vec3( 0.2126, 0.7152, 0.0722 );
+
+	return dot( weights, color.rgb );
+
+}