瀏覽代碼

common.glsl: Introduce linearToRelativeLuminance()

Mugen87 8 年之前
父節點
當前提交
9cc01e74a4
共有 2 個文件被更改,包括 13 次插入4 次删除
  1. 4 4
      examples/js/shaders/LuminosityShader.js
  2. 9 0
      src/renderers/shaders/ShaderChunk/common.glsl

+ 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 );",
 
 		"}"
 

+ 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 );
+
+}