提交 07ff147a 编写于 作者: M Mr.doob 提交者: GitHub

Merge pull request #12125 from Mugen87/dev3

common.glsl: Introduce linearToRelativeLuminance()
......@@ -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 );",
"}"
......
......@@ -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 );",
"}"
......
......@@ -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 );
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册