From 0dc1aec50940140e28f434c524296e284e73d623 Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Fri, 21 Mar 2014 01:32:00 +0100 Subject: Normal maps generation on the fly. Parallax mapping with slope information. Overriding normal maps. --- client/shaders/alpha_shader/opengl_fragment.glsl | 181 +++++++++++-------- client/shaders/alpha_shader/opengl_vertex.glsl | 38 ++-- client/shaders/leaves_shader/opengl_fragment.glsl | 154 ++++++++++------ client/shaders/leaves_shader/opengl_vertex.glsl | 21 ++- client/shaders/liquids_shader/opengl_fragment.glsl | 149 +++++++++------ client/shaders/liquids_shader/opengl_vertex.glsl | 67 +++++-- client/shaders/plants_shader/opengl_fragment.glsl | 148 +++++++++------ client/shaders/plants_shader/opengl_vertex.glsl | 21 ++- client/shaders/solids_shader/opengl_fragment.glsl | 200 +++++++++++---------- client/shaders/solids_shader/opengl_vertex.glsl | 38 ++-- 10 files changed, 627 insertions(+), 390 deletions(-) (limited to 'client') diff --git a/client/shaders/alpha_shader/opengl_fragment.glsl b/client/shaders/alpha_shader/opengl_fragment.glsl index 6ed00be25..4359a8c8c 100644 --- a/client/shaders/alpha_shader/opengl_fragment.glsl +++ b/client/shaders/alpha_shader/opengl_fragment.glsl @@ -1,71 +1,110 @@ -uniform sampler2D baseTexture; -uniform sampler2D normalTexture; -uniform sampler2D useNormalmap; - -uniform vec4 skyBgColor; -uniform float fogDistance; -uniform vec3 eyePosition; - -varying vec3 vPosition; -varying vec3 eyeVec; - -#ifdef ENABLE_PARALLAX_OCCLUSION -varying vec3 tsEyeVec; -#endif - -const float e = 2.718281828459; - -void main (void) -{ - vec3 color; - vec2 uv = gl_TexCoord[0].st; - -#ifdef USE_NORMALMAPS - float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r; -#endif - -#ifdef ENABLE_PARALLAX_OCCLUSION - float height; - vec2 tsEye = vec2(tsEyeVec.x,-tsEyeVec.y); - - if (use_normalmap > 0.0) { - float map_height = texture2D(normalTexture, uv).a; - if (map_height < 1.0){ - float height = PARALLAX_OCCLUSION_SCALE * map_height - PARALLAX_OCCLUSION_BIAS; - uv = uv + height * tsEye; - } - } -#endif - -#ifdef ENABLE_BUMPMAPPING - if (use_normalmap > 0.0) { - vec3 base = texture2D(baseTexture, uv).rgb; - vec3 vVec = normalize(eyeVec); - vec3 bump = normalize(texture2D(normalTexture, uv).xyz * 2.0 - 1.0); - vec3 R = reflect(-vVec, bump); - vec3 lVec = normalize(vVec); - float diffuse = max(dot(lVec, bump), 0.0); - float specular = pow(clamp(dot(R, lVec), 0.0, 1.0),1.0); - color = mix (base,diffuse*base,1.0) + 0.1 * specular * diffuse; - } else { - color = texture2D(baseTexture, uv).rgb; - } -#else - color = texture2D(baseTexture, uv).rgb; -#endif - - float alpha = texture2D(baseTexture, uv).a; - vec4 col = vec4(color.r, color.g, color.b, alpha); - col *= gl_Color; - col = col * col; // SRGB -> Linear - col *= 1.8; - col.r = 1.0 - exp(1.0 - col.r) / e; - col.g = 1.0 - exp(1.0 - col.g) / e; - col.b = 1.0 - exp(1.0 - col.b) / e; - col = sqrt(col); // Linear -> SRGB - if(fogDistance != 0.0){ - float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0)); - col = mix(col, skyBgColor, d); - } - gl_FragColor = vec4(col.r, col.g, col.b, alpha); -} +uniform sampler2D baseTexture; +uniform sampler2D normalTexture; +uniform sampler2D useNormalmap; + +uniform vec4 skyBgColor; +uniform float fogDistance; +uniform vec3 eyePosition; + +varying vec3 vPosition; +varying vec3 worldPosition; + +varying vec3 eyeVec; +varying vec3 tsEyeVec; +varying vec3 lightVec; +varying vec3 tsLightVec; + +bool normalTexturePresent = false; + +const float e = 2.718281828459; + +float intensity (vec3 color){ + return (color.r + color.g + color.b) / 3.0; +} + +float get_rgb_height (vec2 uv){ + return intensity(texture2D(baseTexture,uv).rgb); +} + +vec4 get_normal_map(vec2 uv){ + vec4 bump = texture2D(normalTexture, uv).rgba; + bump.xyz = normalize(bump.xyz * 2.0 -1.0); + bump.y = -bump.y; + return bump; +} + +void main (void) +{ + vec3 color; + vec4 bump; + vec2 uv = gl_TexCoord[0].st; + bool use_normalmap = false; + +#ifdef USE_NORMALMAPS + if (texture2D(useNormalmap,vec2(1.0,1.0)).r > 0.0){ + normalTexturePresent = true; + } +#endif + +#ifdef ENABLE_PARALLAX_OCCLUSION + if (normalTexturePresent){ + vec3 tsEye = normalize(tsEyeVec); + float height = PARALLAX_OCCLUSION_SCALE * texture2D(normalTexture, uv).a - PARALLAX_OCCLUSION_BIAS; + uv = uv + texture2D(normalTexture, uv).z * height * vec2(tsEye.x,-tsEye.y); + } +#endif + +#ifdef USE_NORMALMAPS + if (normalTexturePresent){ + bump = get_normal_map(uv); + use_normalmap = true; + } +#endif + +#ifdef GENERATE_NORMALMAPS + if (use_normalmap == false){ + float tl = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y+SAMPLE_STEP)); + float t = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y-SAMPLE_STEP)); + float tr = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y+SAMPLE_STEP)); + float r = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y)); + float br = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y-SAMPLE_STEP)); + float b = get_rgb_height (vec2(uv.x,uv.y-SAMPLE_STEP)); + float bl = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y-SAMPLE_STEP)); + float l = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y)); + float dX = (tr + 2.0 * r + br) - (tl + 2.0 * l + bl); + float dY = (bl + 2.0 * b + br) - (tl + 2.0 * t + tr); + bump = vec4 (normalize(vec3 (dX, -dY, NORMALMAPS_STRENGTH)),1.0); + use_normalmap = true; + } +#endif + +vec4 base = texture2D(baseTexture, uv).rgba; + +#ifdef ENABLE_BUMPMAPPING + if (use_normalmap){ + vec3 L = normalize(lightVec); + vec3 E = normalize(eyeVec); + float specular = pow(clamp(dot(reflect(L, bump.xyz), E), 0.0, 1.0),0.5); + float diffuse = dot(E,bump.xyz); + color = 0.05*base.rgb + diffuse*base.rgb + 0.2*specular*base.rgb; + } else { + color = base.rgb; + } +#else + color = base.rgb; +#endif + + vec4 col = vec4(color.rgb, base.a); + col = col * col; // SRGB -> Linear + col *= 1.8; + col.r = 1.0 - exp(1.0 - col.r) / e; + col.g = 1.0 - exp(1.0 - col.g) / e; + col.b = 1.0 - exp(1.0 - col.b) / e; + col = sqrt(col); // Linear -> SRGB + col *= gl_Color; + if(fogDistance != 0.0){ + float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0)); + col = mix(col, skyBgColor, d); + } + gl_FragColor = vec4(col.rgb, base.a); +} diff --git a/client/shaders/alpha_shader/opengl_vertex.glsl b/client/shaders/alpha_shader/opengl_vertex.glsl index e359955d0..356ba2eb9 100644 --- a/client/shaders/alpha_shader/opengl_vertex.glsl +++ b/client/shaders/alpha_shader/opengl_vertex.glsl @@ -1,27 +1,33 @@ uniform mat4 mWorldViewProj; uniform mat4 mInvWorld; uniform mat4 mTransWorld; +uniform mat4 mWorld; + uniform float dayNightRatio; uniform vec3 eyePosition; varying vec3 vPosition; +varying vec3 worldPosition; + varying vec3 eyeVec; +varying vec3 lightVec; -#ifdef ENABLE_PARALLAX_OCCLUSION varying vec3 tsEyeVec; -#endif +varying vec3 tsLightVec; + +const float BS = 10.0; void main(void) { + gl_TexCoord[0] = gl_MultiTexCoord0; gl_Position = mWorldViewProj * gl_Vertex; - vPosition = (mWorldViewProj * gl_Vertex).xyz; - eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz; + vPosition = gl_Position.xyz; + worldPosition = (mWorld * gl_Vertex).xyz; + vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0); -#ifdef ENABLE_PARALLAX_OCCLUSION - vec3 normal,tangent,binormal; + vec3 normal, tangent, binormal; normal = normalize(gl_NormalMatrix * gl_Normal); - if (gl_Normal.x > 0.5) { // 1.0, 0.0, 0.0 tangent = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, -1.0)); @@ -47,25 +53,20 @@ void main(void) tangent = normalize(gl_NormalMatrix * vec3(-1.0, 0.0, 0.0)); binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0)); } - mat3 tbnMatrix = mat3( tangent.x, binormal.x, normal.x, tangent.y, binormal.y, normal.y, tangent.z, binormal.z, normal.z); - tsEyeVec = normalize(eyeVec * tbnMatrix); -#endif + lightVec = sunPosition - worldPosition; + tsLightVec = lightVec * tbnMatrix; + eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz; + tsEyeVec = eyeVec * tbnMatrix; vec4 color; - //color = vec4(1.0, 1.0, 1.0, 1.0); - float day = gl_Color.r; float night = gl_Color.g; float light_source = gl_Color.b; - /*color.r = mix(night, day, dayNightRatio); - color.g = color.r; - color.b = color.r;*/ - float rg = mix(night, day, dayNightRatio); rg += light_source * 2.5; // Make light sources brighter float b = rg; @@ -90,13 +91,8 @@ void main(void) color = color * color; // SRGB -> Linear if(gl_Normal.y <= 0.5) color *= 0.6; - //color *= 0.7; color = sqrt(color); // Linear -> SRGB - color.a = gl_Color.a; gl_FrontColor = gl_BackColor = color; - - gl_TexCoord[0] = gl_MultiTexCoord0; - } diff --git a/client/shaders/leaves_shader/opengl_fragment.glsl b/client/shaders/leaves_shader/opengl_fragment.glsl index 31981f9b9..1db798070 100644 --- a/client/shaders/leaves_shader/opengl_fragment.glsl +++ b/client/shaders/leaves_shader/opengl_fragment.glsl @@ -1,54 +1,100 @@ -uniform sampler2D baseTexture; -uniform sampler2D normalTexture; -uniform sampler2D useNormalmap; - -uniform vec4 skyBgColor; -uniform float fogDistance; -uniform vec3 eyePosition; - -varying vec3 vPosition; -varying vec3 eyeVec; - -const float e = 2.718281828459; - -void main (void) -{ - vec3 color; - vec2 uv = gl_TexCoord[0].st; - -#ifdef USE_NORMALMAPS - float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r; -#endif - -#ifdef ENABLE_BUMPMAPPING - if (use_normalmap > 0.0) { - vec3 base = texture2D(baseTexture, uv).rgb; - vec3 vVec = normalize(eyeVec); - vec3 bump = normalize(texture2D(normalTexture, uv).xyz * 2.0 - 1.0); - vec3 R = reflect(-vVec, bump); - vec3 lVec = normalize(vVec); - float diffuse = max(dot(lVec, bump), 0.0); - float specular = pow(clamp(dot(R, lVec), 0.0, 1.0),1.0); - color = mix (base,diffuse*base,1.0) + 0.1 * specular * diffuse; - } else { - color = texture2D(baseTexture, uv).rgb; - } -#else - color = texture2D(baseTexture, uv).rgb; -#endif - - float alpha = texture2D(baseTexture, uv).a; - vec4 col = vec4(color.r, color.g, color.b, alpha); - col *= gl_Color; - col = col * col; // SRGB -> Linear - col *= 1.8; - col.r = 1.0 - exp(1.0 - col.r) / e; - col.g = 1.0 - exp(1.0 - col.g) / e; - col.b = 1.0 - exp(1.0 - col.b) / e; - col = sqrt(col); // Linear -> SRGB - if(fogDistance != 0.0){ - float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0)); - col = mix(col, skyBgColor, d); - } - gl_FragColor = vec4(col.r, col.g, col.b, alpha); -} +uniform sampler2D baseTexture; +uniform sampler2D normalTexture; +uniform sampler2D useNormalmap; + +uniform vec4 skyBgColor; +uniform float fogDistance; +uniform vec3 eyePosition; + +varying vec3 vPosition; +varying vec3 worldPosition; + +varying vec3 eyeVec; +varying vec3 lightVec; + +bool normalTexturePresent = false; + +const float e = 2.718281828459; + +float intensity (vec3 color){ + return (color.r + color.g + color.b) / 3.0; +} + +float get_rgb_height (vec2 uv){ + return intensity(texture2D(baseTexture,uv).rgb); +} + +vec4 get_normal_map(vec2 uv){ + vec4 bump = texture2D(normalTexture, uv).rgba; + bump.xyz = normalize(bump.xyz * 2.0 -1.0); + bump.y = -bump.y; + return bump; +} + +void main (void) +{ + vec3 color; + vec4 bump; + vec2 uv = gl_TexCoord[0].st; + bool use_normalmap = false; + +#ifdef USE_NORMALMAPS + if (texture2D(useNormalmap,vec2(1.0,1.0)).r > 0.0){ + normalTexturePresent = true; + } +#endif + +#ifdef USE_NORMALMAPS + if (normalTexturePresent){ + bump = get_normal_map(uv); + use_normalmap = true; + } +#endif + +#ifdef GENERATE_NORMALMAPS + if (use_normalmap == false){ + float tl = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y+SAMPLE_STEP)); + float t = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y-SAMPLE_STEP)); + float tr = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y+SAMPLE_STEP)); + float r = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y)); + float br = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y-SAMPLE_STEP)); + float b = get_rgb_height (vec2(uv.x,uv.y-SAMPLE_STEP)); + float bl = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y-SAMPLE_STEP)); + float l = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y)); + float dX = (tr + 2.0 * r + br) - (tl + 2.0 * l + bl); + float dY = (bl + 2.0 * b + br) - (tl + 2.0 * t + tr); + bump = vec4 (normalize(vec3 (dX, -dY, NORMALMAPS_STRENGTH)),1.0); + use_normalmap = true; + } +#endif + +vec4 base = texture2D(baseTexture, uv).rgba; + +#ifdef ENABLE_BUMPMAPPING + if (use_normalmap){ + vec3 L = normalize(lightVec); + vec3 E = normalize(eyeVec); + float specular = pow(clamp(dot(reflect(L, bump.xyz), E), 0.0, 1.0),0.5); + float diffuse = dot(E,bump.xyz); + color = 0.05*base.rgb + diffuse*base.rgb + 0.2*specular*base.rgb; + } else { + color = base.rgb; + } +#else + color = base.rgb; +#endif + + vec4 col = vec4(color.rgb, base.a); + col = col * col; // SRGB -> Linear + col *= 1.8; + col.r = 1.0 - exp(1.0 - col.r) / e; + col.g = 1.0 - exp(1.0 - col.g) / e; + col.b = 1.0 - exp(1.0 - col.b) / e; + col = sqrt(col); // Linear -> SRGB + col *= gl_Color; + if(fogDistance != 0.0){ + float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0)); + col = mix(col, skyBgColor, d); + } + gl_FragColor = vec4(col.rgb, base.a); +} diff --git a/client/shaders/leaves_shader/opengl_vertex.glsl b/client/shaders/leaves_shader/opengl_vertex.glsl index 3702b1b50..30ad00b82 100644 --- a/client/shaders/leaves_shader/opengl_vertex.glsl +++ b/client/shaders/leaves_shader/opengl_vertex.glsl @@ -1,13 +1,20 @@ uniform mat4 mWorldViewProj; uniform mat4 mInvWorld; uniform mat4 mTransWorld; +uniform mat4 mWorld; + uniform float dayNightRatio; uniform float animationTimer; uniform vec3 eyePosition; varying vec3 vPosition; +varying vec3 worldPosition; + varying vec3 eyeVec; +varying vec3 lightVec; + +const float BS = 10.0; #ifdef ENABLE_WAVING_LEAVES float smoothCurve( float x ) { @@ -27,7 +34,7 @@ void main(void) #ifdef ENABLE_WAVING_LEAVES vec4 pos = gl_Vertex; - vec4 pos2 = mTransWorld*gl_Vertex; + vec4 pos2 = mWorld*gl_Vertex; pos.x += (smoothTriangleWave(animationTimer*10.0 + pos2.x * 0.01 + pos2.z * 0.01) * 2.0 - 1.0) * 0.4; pos.y += (smoothTriangleWave(animationTimer*15.0 + pos2.x * -0.01 + pos2.z * -0.01) * 2.0 - 1.0) * 0.2; pos.z += (smoothTriangleWave(animationTimer*10.0 + pos2.x * -0.01 + pos2.z * -0.01) * 2.0 - 1.0) * 0.4; @@ -36,10 +43,13 @@ void main(void) gl_Position = mWorldViewProj * gl_Vertex; #endif - vPosition = (mWorldViewProj * gl_Vertex).xyz; + vPosition = gl_Position.xyz; + worldPosition = (mWorld * gl_Vertex).xyz; + vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0); + lightVec = sunPosition - worldPosition; eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz; - + vec4 color; //color = vec4(1.0, 1.0, 1.0, 1.0); @@ -75,13 +85,8 @@ void main(void) color = color * color; // SRGB -> Linear if(gl_Normal.y <= 0.5) color *= 0.6; - //color *= 0.7; color = sqrt(color); // Linear -> SRGB - color.a = gl_Color.a; gl_FrontColor = gl_BackColor = color; - - gl_TexCoord[0] = gl_MultiTexCoord0; - } diff --git a/client/shaders/liquids_shader/opengl_fragment.glsl b/client/shaders/liquids_shader/opengl_fragment.glsl index cab8d8e01..e4082259a 100644 --- a/client/shaders/liquids_shader/opengl_fragment.glsl +++ b/client/shaders/liquids_shader/opengl_fragment.glsl @@ -1,54 +1,95 @@ -uniform sampler2D baseTexture; -uniform sampler2D normalTexture; -uniform sampler2D useNormalmap; - -uniform vec4 skyBgColor; -uniform float fogDistance; -uniform vec3 eyePosition; - -varying vec3 vPosition; -varying vec3 eyeVec; - -const float e = 2.718281828459; - -void main (void) -{ - vec3 color; - vec2 uv = gl_TexCoord[0].st; - -#ifdef USE_NORMALMAPS - float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r; -#endif - -#ifdef ENABLE_BUMPMAPPING - if (use_normalmap > 0.0) { - vec3 base = texture2D(baseTexture, uv).rgb; - vec3 vVec = normalize(eyeVec); - vec3 bump = normalize(texture2D(normalTexture, uv).xyz * 2.0 - 1.0); - vec3 R = reflect(-vVec, bump); - vec3 lVec = normalize(vVec); - float diffuse = max(dot(vec3(-1.0, -0.4, 0.5), bump), 0.0); - float specular = pow(clamp(dot(R, lVec), 0.0, 1.0),1.0); - color = mix (base,diffuse*base,1.0) + 0.1 * specular * diffuse; - } else { - color = texture2D(baseTexture, uv).rgb; - } -#else - color = texture2D(baseTexture, uv).rgb; -#endif - - float alpha = gl_Color.a; - vec4 col = vec4(color.r, color.g, color.b, alpha); - col *= gl_Color; - col = col * col; // SRGB -> Linear - col *= 1.8; - col.r = 1.0 - exp(1.0 - col.r) / e; - col.g = 1.0 - exp(1.0 - col.g) / e; - col.b = 1.0 - exp(1.0 - col.b) / e; - col = sqrt(col); // Linear -> SRGB - if(fogDistance != 0.0){ - float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0)); - alpha = mix(alpha, 0.0, d); - } - gl_FragColor = vec4(col.r, col.g, col.b, alpha); -} +uniform sampler2D baseTexture; +uniform sampler2D normalTexture; +uniform sampler2D useNormalmap; + +uniform vec4 skyBgColor; +uniform float fogDistance; +uniform vec3 eyePosition; + +varying vec3 vPosition; +varying vec3 worldPosition; + +varying vec3 eyeVec; +varying vec3 tsEyeVec; +varying vec3 lightVec; +varying vec3 tsLightVec; + +const float e = 2.718281828459; + +float intensity (vec3 color){ + return (color.r + color.g + color.b) / 3.0; +} + +float get_rgb_height (vec2 uv){ + return intensity(texture2D(baseTexture,uv).rgb); +} + +vec4 get_normal_map(vec2 uv){ + vec4 bump = texture2D(normalTexture, uv).rgba; + bump.xyz = normalize(bump.xyz * 2.0 -1.0); + bump.y = -bump.y; + return bump; +} + +void main (void) +{ + vec3 color; + vec4 bump; + vec2 uv = gl_TexCoord[0].st; + bool use_normalmap = false; + +#ifdef USE_NORMALMAPS + if (texture2D(useNormalmap,vec2(1.0,1.0)).r > 0.0){ + bump = get_normal_map(uv); + use_normalmap = true; + } +#endif + +#ifdef GENERATE_NORMALMAPS + if (use_normalmap == false){ + float tl = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y+SAMPLE_STEP)); + float t = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y-SAMPLE_STEP)); + float tr = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y+SAMPLE_STEP)); + float r = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y)); + float br = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y-SAMPLE_STEP)); + float b = get_rgb_height (vec2(uv.x,uv.y-SAMPLE_STEP)); + float bl = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y-SAMPLE_STEP)); + float l = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y)); + float dX = (tr + 2.0 * r + br) - (tl + 2.0 * l + bl); + float dY = (bl + 2.0 * b + br) - (tl + 2.0 * t + tr); + bump = vec4 (normalize(vec3 (dX, -dY, NORMALMAPS_STRENGTH)),1.0); + use_normalmap = true; + } +#endif + +vec4 base = texture2D(baseTexture, uv).rgba; + +#ifdef ENABLE_BUMPMAPPING + if (use_normalmap){ + vec3 L = normalize(lightVec); + vec3 E = normalize(eyeVec); + float specular = pow(clamp(dot(reflect(L, bump.xyz), E), 0.0, 1.0),0.5); + float diffuse = dot(E,bump.xyz); + color = 0.05*base.rgb + diffuse*base.rgb + 0.2*specular*base.rgb; + } else { + color = base.rgb; + } +#else + color = base.rgb; +#endif + + float alpha = gl_Color.a; + vec4 col = vec4(color.rgb, alpha); + col = col * col; // SRGB -> Linear + col *= 1.8; + col.r = 1.0 - exp(1.0 - col.r) / e; + col.g = 1.0 - exp(1.0 - col.g) / e; + col.b = 1.0 - exp(1.0 - col.b) / e; + col = sqrt(col); // Linear -> SRGB + col *= gl_Color; + if(fogDistance != 0.0){ + float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0)); + alpha = mix(alpha, 0.0, d); + } + gl_FragColor = vec4(color.rgb, alpha); +} diff --git a/client/shaders/liquids_shader/opengl_vertex.glsl b/client/shaders/liquids_shader/opengl_vertex.glsl index e8f185825..9d64ce4e3 100644 --- a/client/shaders/liquids_shader/opengl_vertex.glsl +++ b/client/shaders/liquids_shader/opengl_vertex.glsl @@ -1,40 +1,84 @@ uniform mat4 mWorldViewProj; uniform mat4 mInvWorld; uniform mat4 mTransWorld; +uniform mat4 mWorld; + uniform float dayNightRatio; uniform float animationTimer; uniform vec3 eyePosition; varying vec3 vPosition; +varying vec3 worldPosition; + varying vec3 eyeVec; +varying vec3 lightVec; + +varying vec3 tsEyeVec; +varying vec3 tsLightVec; + +const float BS = 10.0; void main(void) { + gl_TexCoord[0] = gl_MultiTexCoord0; + #ifdef ENABLE_WAVING_WATER vec4 pos2 = gl_Vertex; pos2.y -= 2.0; pos2.y -= sin (pos2.z/WATER_WAVE_LENGTH + animationTimer * WATER_WAVE_SPEED * WATER_WAVE_LENGTH) * WATER_WAVE_HEIGHT + sin ((pos2.z/WATER_WAVE_LENGTH + animationTimer * WATER_WAVE_SPEED * WATER_WAVE_LENGTH) / 7.0) * WATER_WAVE_HEIGHT; gl_Position = mWorldViewProj * pos2; + vPosition = gl_Position.xyz; #else gl_Position = mWorldViewProj * gl_Vertex; + vPosition = gl_Position.xyz; #endif + worldPosition = (mWorld * gl_Vertex).xyz; + vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0); + + vec3 normal, tangent, binormal; + normal = normalize(gl_NormalMatrix * gl_Normal); + if (gl_Normal.x > 0.5) { + // 1.0, 0.0, 0.0 + tangent = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, -1.0)); + binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0)); + } else if (gl_Normal.x < -0.5) { + // -1.0, 0.0, 0.0 + tangent = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0)); + binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0)); + } else if (gl_Normal.y > 0.5) { + // 0.0, 1.0, 0.0 + tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0)); + binormal = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0)); + } else if (gl_Normal.y < -0.5) { + // 0.0, -1.0, 0.0 + tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0)); + binormal = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0)); + } else if (gl_Normal.z > 0.5) { + // 0.0, 0.0, 1.0 + tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0)); + binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0)); + } else if (gl_Normal.z < -0.5) { + // 0.0, 0.0, -1.0 + tangent = normalize(gl_NormalMatrix * vec3(-1.0, 0.0, 0.0)); + binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0)); + } + mat3 tbnMatrix = mat3( tangent.x, binormal.x, normal.x, + tangent.y, binormal.y, normal.y, + tangent.z, binormal.z, normal.z); + + lightVec = sunPosition - worldPosition; + tsLightVec = lightVec * tbnMatrix; eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz; - vPosition = (mWorldViewProj * gl_Vertex).xyz; + tsEyeVec = eyeVec * tbnMatrix; vec4 color; - //color = vec4(1.0, 1.0, 1.0, 1.0); - float day = gl_Color.r; float night = gl_Color.g; float light_source = gl_Color.b; - /*color.r = mix(night, day, dayNightRatio); - color.g = color.r; - color.b = color.r;*/ - float rg = mix(night, day, dayNightRatio); rg += light_source * 2.5; // Make light sources brighter float b = rg; @@ -54,10 +98,13 @@ void main(void) color.r = clamp(rg,0.0,1.0); color.g = clamp(rg,0.0,1.0); color.b = clamp(b,0.0,1.0); + + // Make sides and bottom darker than the top + color = color * color; // SRGB -> Linear + if(gl_Normal.y <= 0.5) + color *= 0.6; + color = sqrt(color); // Linear -> SRGB color.a = gl_Color.a; gl_FrontColor = gl_BackColor = color; - - gl_TexCoord[0] = gl_MultiTexCoord0; - } diff --git a/client/shaders/plants_shader/opengl_fragment.glsl b/client/shaders/plants_shader/opengl_fragment.glsl index 31981f9b9..817530a83 100644 --- a/client/shaders/plants_shader/opengl_fragment.glsl +++ b/client/shaders/plants_shader/opengl_fragment.glsl @@ -1,54 +1,94 @@ -uniform sampler2D baseTexture; -uniform sampler2D normalTexture; -uniform sampler2D useNormalmap; - -uniform vec4 skyBgColor; -uniform float fogDistance; -uniform vec3 eyePosition; - -varying vec3 vPosition; -varying vec3 eyeVec; - -const float e = 2.718281828459; - -void main (void) -{ - vec3 color; - vec2 uv = gl_TexCoord[0].st; - -#ifdef USE_NORMALMAPS - float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r; -#endif - -#ifdef ENABLE_BUMPMAPPING - if (use_normalmap > 0.0) { - vec3 base = texture2D(baseTexture, uv).rgb; - vec3 vVec = normalize(eyeVec); - vec3 bump = normalize(texture2D(normalTexture, uv).xyz * 2.0 - 1.0); - vec3 R = reflect(-vVec, bump); - vec3 lVec = normalize(vVec); - float diffuse = max(dot(lVec, bump), 0.0); - float specular = pow(clamp(dot(R, lVec), 0.0, 1.0),1.0); - color = mix (base,diffuse*base,1.0) + 0.1 * specular * diffuse; - } else { - color = texture2D(baseTexture, uv).rgb; - } -#else - color = texture2D(baseTexture, uv).rgb; -#endif - - float alpha = texture2D(baseTexture, uv).a; - vec4 col = vec4(color.r, color.g, color.b, alpha); - col *= gl_Color; - col = col * col; // SRGB -> Linear - col *= 1.8; - col.r = 1.0 - exp(1.0 - col.r) / e; - col.g = 1.0 - exp(1.0 - col.g) / e; - col.b = 1.0 - exp(1.0 - col.b) / e; - col = sqrt(col); // Linear -> SRGB - if(fogDistance != 0.0){ - float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0)); - col = mix(col, skyBgColor, d); - } - gl_FragColor = vec4(col.r, col.g, col.b, alpha); -} +uniform sampler2D baseTexture; +uniform sampler2D normalTexture; +uniform sampler2D useNormalmap; + +uniform vec4 skyBgColor; +uniform float fogDistance; +uniform vec3 eyePosition; + +varying vec3 vPosition; +varying vec3 worldPosition; + +varying vec3 eyeVec; +varying vec3 lightVec; + +bool normalTexturePresent = false; + +const float e = 2.718281828459; + +float intensity (vec3 color){ + return (color.r + color.g + color.b) / 3.0; +} + +float get_rgb_height (vec2 uv){ + return intensity(texture2D(baseTexture,uv).rgb); +} + +vec4 get_normal_map(vec2 uv){ + vec4 bump = texture2D(normalTexture, uv).rgba; + bump.xyz = normalize(bump.xyz * 2.0 -1.0); + bump.y = -bump.y; + return bump; +} + +void main (void) +{ + vec3 color; + vec4 bump; + vec2 uv = gl_TexCoord[0].st; + bool use_normalmap = false; + +#ifdef USE_NORMALMAPS + if (texture2D(useNormalmap,vec2(1.0,1.0)).r > 0.0){ + bump = get_normal_map(uv); + use_normalmap = true; + } +#endif + +#ifdef GENERATE_NORMALMAPS + if (use_normalmap == false){ + float tl = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y+SAMPLE_STEP)); + float t = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y-SAMPLE_STEP)); + float tr = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y+SAMPLE_STEP)); + float r = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y)); + float br = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y-SAMPLE_STEP)); + float b = get_rgb_height (vec2(uv.x,uv.y-SAMPLE_STEP)); + float bl = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y-SAMPLE_STEP)); + float l = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y)); + float dX = (tr + 2.0 * r + br) - (tl + 2.0 * l + bl); + float dY = (bl + 2.0 * b + br) - (tl + 2.0 * t + tr); + bump = vec4 (normalize(vec3 (dX, -dY, NORMALMAPS_STRENGTH)),1.0); + use_normalmap = true; + } +#endif + +vec4 base = texture2D(baseTexture, uv).rgba; + +#ifdef ENABLE_BUMPMAPPING + if (use_normalmap){ + vec3 L = normalize(lightVec); + vec3 E = normalize(eyeVec); + float specular = pow(clamp(dot(reflect(L, bump.xyz), E), 0.0, 1.0),0.5); + float diffuse = dot(E,bump.xyz); + color = 0.05*base.rgb + diffuse*base.rgb + 0.2*specular*base.rgb; + } else { + color = base.rgb; + } +#else + color = base.rgb; +#endif + + vec4 col = vec4(color.rgb, base.a); + col = col * col; // SRGB -> Linear + col *= 1.8; + col.r = 1.0 - exp(1.0 - col.r) / e; + col.g = 1.0 - exp(1.0 - col.g) / e; + col.b = 1.0 - exp(1.0 - col.b) / e; + col = sqrt(col); // Linear -> SRGB + col *= gl_Color; + if(fogDistance != 0.0){ + float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0)); + col = mix(col, skyBgColor, d); + } + gl_FragColor = vec4(col.rgb, base.a); +} diff --git a/client/shaders/plants_shader/opengl_vertex.glsl b/client/shaders/plants_shader/opengl_vertex.glsl index 7987fc16d..a95c20242 100644 --- a/client/shaders/plants_shader/opengl_vertex.glsl +++ b/client/shaders/plants_shader/opengl_vertex.glsl @@ -1,13 +1,20 @@ uniform mat4 mWorldViewProj; uniform mat4 mInvWorld; uniform mat4 mTransWorld; +uniform mat4 mWorld; + uniform float dayNightRatio; uniform float animationTimer; uniform vec3 eyePosition; varying vec3 vPosition; +varying vec3 worldPosition; + varying vec3 eyeVec; +varying vec3 lightVec; + +const float BS = 10.0; #ifdef ENABLE_WAVING_PLANTS float smoothCurve( float x ) { @@ -23,12 +30,11 @@ float smoothTriangleWave( float x ) { void main(void) { - gl_TexCoord[0] = gl_MultiTexCoord0; #ifdef ENABLE_WAVING_PLANTS vec4 pos = gl_Vertex; - vec4 pos2 = mTransWorld * gl_Vertex; + vec4 pos2 = mWorld * gl_Vertex; if (gl_TexCoord[0].y < 0.05) { pos.x += (smoothTriangleWave(animationTimer * 20.0 + pos2.x * 0.1 + pos2.z * 0.1) * 2.0 - 1.0) * 0.8; pos.y -= (smoothTriangleWave(animationTimer * 10.0 + pos2.x * -0.5 + pos2.z * -0.5) * 2.0 - 1.0) * 0.4; @@ -38,9 +44,13 @@ void main(void) gl_Position = mWorldViewProj * gl_Vertex; #endif - vPosition = (mWorldViewProj * gl_Vertex).xyz; - eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz; + vPosition = gl_Position.xyz; + worldPosition = (mWorld * gl_Vertex).xyz; + vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0); + lightVec = sunPosition - worldPosition; + eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz; + vec4 color; //color = vec4(1.0, 1.0, 1.0, 1.0); @@ -76,11 +86,8 @@ void main(void) color = color * color; // SRGB -> Linear if(gl_Normal.y <= 0.5) color *= 0.6; - //color *= 0.7; color = sqrt(color); // Linear -> SRGB - color.a = gl_Color.a; gl_FrontColor = gl_BackColor = color; - } diff --git a/client/shaders/solids_shader/opengl_fragment.glsl b/client/shaders/solids_shader/opengl_fragment.glsl index d81506a4f..6370bf505 100644 --- a/client/shaders/solids_shader/opengl_fragment.glsl +++ b/client/shaders/solids_shader/opengl_fragment.glsl @@ -1,90 +1,110 @@ -uniform sampler2D baseTexture; -uniform sampler2D normalTexture; -uniform sampler2D useNormalmap; - -uniform vec4 skyBgColor; -uniform float fogDistance; -uniform vec3 eyePosition; - -varying vec3 vPosition; -varying vec3 eyeVec; - -#ifdef ENABLE_PARALLAX_OCCLUSION -varying vec3 tsEyeVec; -#endif - -const float e = 2.718281828459; - -void main (void) -{ - vec3 color; - vec2 uv = gl_TexCoord[0].st; - -#ifdef USE_NORMALMAPS - float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r; -#endif - -#ifdef ENABLE_PARALLAX_OCCLUSION - float height; - vec2 tsEye = vec2(tsEyeVec.x,-tsEyeVec.y); - - if (use_normalmap > 0.0) { - float map_height = texture2D(normalTexture, uv).a; - if (map_height < 1.0){ - float height = PARALLAX_OCCLUSION_SCALE * map_height - PARALLAX_OCCLUSION_BIAS; - uv = uv + height * tsEye; - } - } -#endif - -/* Steep parallax code, for future use - if ((parallaxMappingMode == 2.0) && (use_normalmap > 0.0)) { - const float numSteps = 40.0; - float height = 1.0; - float step = 1.0 / numSteps; - vec4 NB = texture2D(normalTexture, uv); - vec2 delta = tsEye * parallaxMappingScale / numSteps; - for (float i = 0.0; i < numSteps; i++) { - if (NB.a < height) { - height -= step; - uv += delta; - NB = texture2D(normalTexture, uv); - } else { - break; - } - } - } -*/ - -#ifdef ENABLE_BUMPMAPPING - if (use_normalmap > 0.0) { - vec3 base = texture2D(baseTexture, uv).rgb; - vec3 vVec = normalize(eyeVec); - vec3 bump = normalize(texture2D(normalTexture, uv).xyz * 2.0 - 1.0); - vec3 R = reflect(-vVec, bump); - vec3 lVec = normalize(vVec); - float diffuse = max(dot(lVec, bump), 0.0); - float specular = pow(clamp(dot(R, lVec), 0.0, 1.0),1.0); - color = mix (base,diffuse*base,1.0) + 0.1 * specular * diffuse; - } else { - color = texture2D(baseTexture, uv).rgb; - } -#else - color = texture2D(baseTexture, uv).rgb; -#endif - - float alpha = texture2D(baseTexture, uv).a; - vec4 col = vec4(color.r, color.g, color.b, alpha); - col *= gl_Color; - col = col * col; // SRGB -> Linear - col *= 1.8; - col.r = 1.0 - exp(1.0 - col.r) / e; - col.g = 1.0 - exp(1.0 - col.g) / e; - col.b = 1.0 - exp(1.0 - col.b) / e; - col = sqrt(col); // Linear -> SRGB - if(fogDistance != 0.0){ - float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0)); - col = mix(col, skyBgColor, d); - } - gl_FragColor = vec4(col.r, col.g, col.b, alpha); -} +uniform sampler2D baseTexture; +uniform sampler2D normalTexture; +uniform sampler2D useNormalmap; + +uniform vec4 skyBgColor; +uniform float fogDistance; +uniform vec3 eyePosition; + +varying vec3 vPosition; +varying vec3 worldPosition; + +varying vec3 eyeVec; +varying vec3 tsEyeVec; +varying vec3 lightVec; +varying vec3 tsLightVec; + +bool normalTexturePresent = false; + +const float e = 2.718281828459; + +float intensity (vec3 color){ + return (color.r + color.g + color.b) / 3.0; +} + +float get_rgb_height (vec2 uv){ + return intensity(texture2D(baseTexture,uv).rgb); +} + +vec4 get_normal_map(vec2 uv){ + vec4 bump = texture2D(normalTexture, uv).rgba; + bump.xyz = normalize(bump.xyz * 2.0 -1.0); + bump.y = -bump.y; + return bump; +} + +void main (void) +{ + vec3 color; + vec4 bump; + vec2 uv = gl_TexCoord[0].st; + bool use_normalmap = false; + +#ifdef USE_NORMALMAPS + if (texture2D(useNormalmap,vec2(1.0,1.0)).r > 0.0){ + normalTexturePresent = true; + } +#endif + +#ifdef ENABLE_PARALLAX_OCCLUSION + if (normalTexturePresent){ + vec3 tsEye = normalize(tsEyeVec); + float height = PARALLAX_OCCLUSION_SCALE * texture2D(normalTexture, uv).a - PARALLAX_OCCLUSION_BIAS; + uv = uv + texture2D(normalTexture, uv).z * height * vec2(tsEye.x,-tsEye.y); + } +#endif + +#ifdef USE_NORMALMAPS + if (normalTexturePresent){ + bump = get_normal_map(uv); + use_normalmap = true; + } +#endif + +#ifdef GENERATE_NORMALMAPS + if (use_normalmap == false){ + float tl = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y+SAMPLE_STEP)); + float t = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y-SAMPLE_STEP)); + float tr = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y+SAMPLE_STEP)); + float r = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y)); + float br = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y-SAMPLE_STEP)); + float b = get_rgb_height (vec2(uv.x,uv.y-SAMPLE_STEP)); + float bl = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y-SAMPLE_STEP)); + float l = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y)); + float dX = (tr + 2.0 * r + br) - (tl + 2.0 * l + bl); + float dY = (bl + 2.0 * b + br) - (tl + 2.0 * t + tr); + bump = vec4 (normalize(vec3 (dX, -dY, NORMALMAPS_STRENGTH)),1.0); + use_normalmap = true; + } +#endif + +vec4 base = texture2D(baseTexture, uv).rgba; + +#ifdef ENABLE_BUMPMAPPING + if (use_normalmap){ + vec3 L = normalize(lightVec); + vec3 E = normalize(eyeVec); + float specular = pow(clamp(dot(reflect(L, bump.xyz), E), 0.0, 1.0),0.5); + float diffuse = dot(E,bump.xyz); + color = 0.05*base.rgb + diffuse*base.rgb + 0.2*specular*base.rgb; + } else { + color = base.rgb; + } +#else + color = base.rgb; +#endif + + vec4 col = vec4(color.rgb, base.a); + col = col * col; // SRGB -> Linear + col *= 1.8; + col.r = 1.0 - exp(1.0 - col.r) / e; + col.g = 1.0 - exp(1.0 - col.g) / e; + col.b = 1.0 - exp(1.0 - col.b) / e; + col = sqrt(col); // Linear -> SRGB + col *= gl_Color; + if(fogDistance != 0.0){ + float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0)); + col = mix(col, skyBgColor, d); + } + gl_FragColor = vec4(col.rgb, base.a); +} diff --git a/client/shaders/solids_shader/opengl_vertex.glsl b/client/shaders/solids_shader/opengl_vertex.glsl index e359955d0..356ba2eb9 100644 --- a/client/shaders/solids_shader/opengl_vertex.glsl +++ b/client/shaders/solids_shader/opengl_vertex.glsl @@ -1,27 +1,33 @@ uniform mat4 mWorldViewProj; uniform mat4 mInvWorld; uniform mat4 mTransWorld; +uniform mat4 mWorld; + uniform float dayNightRatio; uniform vec3 eyePosition; varying vec3 vPosition; +varying vec3 worldPosition; + varying vec3 eyeVec; +varying vec3 lightVec; -#ifdef ENABLE_PARALLAX_OCCLUSION varying vec3 tsEyeVec; -#endif +varying vec3 tsLightVec; + +const float BS = 10.0; void main(void) { + gl_TexCoord[0] = gl_MultiTexCoord0; gl_Position = mWorldViewProj * gl_Vertex; - vPosition = (mWorldViewProj * gl_Vertex).xyz; - eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz; + vPosition = gl_Position.xyz; + worldPosition = (mWorld * gl_Vertex).xyz; + vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0); -#ifdef ENABLE_PARALLAX_OCCLUSION - vec3 normal,tangent,binormal; + vec3 normal, tangent, binormal; normal = normalize(gl_NormalMatrix * gl_Normal); - if (gl_Normal.x > 0.5) { // 1.0, 0.0, 0.0 tangent = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, -1.0)); @@ -47,25 +53,20 @@ void main(void) tangent = normalize(gl_NormalMatrix * vec3(-1.0, 0.0, 0.0)); binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0)); } - mat3 tbnMatrix = mat3( tangent.x, binormal.x, normal.x, tangent.y, binormal.y, normal.y, tangent.z, binormal.z, normal.z); - tsEyeVec = normalize(eyeVec * tbnMatrix); -#endif + lightVec = sunPosition - worldPosition; + tsLightVec = lightVec * tbnMatrix; + eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz; + tsEyeVec = eyeVec * tbnMatrix; vec4 color; - //color = vec4(1.0, 1.0, 1.0, 1.0); - float day = gl_Color.r; float night = gl_Color.g; float light_source = gl_Color.b; - /*color.r = mix(night, day, dayNightRatio); - color.g = color.r; - color.b = color.r;*/ - float rg = mix(night, day, dayNightRatio); rg += light_source * 2.5; // Make light sources brighter float b = rg; @@ -90,13 +91,8 @@ void main(void) color = color * color; // SRGB -> Linear if(gl_Normal.y <= 0.5) color *= 0.6; - //color *= 0.7; color = sqrt(color); // Linear -> SRGB - color.a = gl_Color.a; gl_FrontColor = gl_BackColor = color; - - gl_TexCoord[0] = gl_MultiTexCoord0; - } -- cgit v1.2.3