diff options
author | RealBadAngel <maciej.kasatkin@o2.pl> | 2014-05-14 23:19:31 +0200 |
---|---|---|
committer | RealBadAngel <maciej.kasatkin@o2.pl> | 2014-06-15 05:40:33 +0200 |
commit | 6c98fd6658fcf7c0c676ee88f03e364c852e9f1b (patch) | |
tree | 01a6a17c00730bd2744a2394f36950ba83b10107 /client/shaders/liquids_shader | |
parent | 9ffa88b558498a139488679ef2ed8767c8540471 (diff) | |
download | minetest-6c98fd6658fcf7c0c676ee88f03e364c852e9f1b.tar.gz minetest-6c98fd6658fcf7c0c676ee88f03e364c852e9f1b.tar.bz2 minetest-6c98fd6658fcf7c0c676ee88f03e364c852e9f1b.zip |
Unite nodes shaders.
Pass drawtype and material type to shaders.
Move shaders generation to startup only.
Allow assign shaders per tile.
Initial code to support water surface shader.
Diffstat (limited to 'client/shaders/liquids_shader')
-rw-r--r-- | client/shaders/liquids_shader/base.txt | 1 | ||||
-rw-r--r-- | client/shaders/liquids_shader/opengl_fragment.glsl | 95 | ||||
-rw-r--r-- | client/shaders/liquids_shader/opengl_vertex.glsl | 110 |
3 files changed, 0 insertions, 206 deletions
diff --git a/client/shaders/liquids_shader/base.txt b/client/shaders/liquids_shader/base.txt deleted file mode 100644 index 1c2647118..000000000 --- a/client/shaders/liquids_shader/base.txt +++ /dev/null @@ -1 +0,0 @@ -trans_alphach diff --git a/client/shaders/liquids_shader/opengl_fragment.glsl b/client/shaders/liquids_shader/opengl_fragment.glsl deleted file mode 100644 index 5bc932ada..000000000 --- a/client/shaders/liquids_shader/opengl_fragment.glsl +++ /dev/null @@ -1,95 +0,0 @@ -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(col.rgb, alpha); -} diff --git a/client/shaders/liquids_shader/opengl_vertex.glsl b/client/shaders/liquids_shader/opengl_vertex.glsl deleted file mode 100644 index 9d64ce4e3..000000000 --- a/client/shaders/liquids_shader/opengl_vertex.glsl +++ /dev/null @@ -1,110 +0,0 @@ -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;
- tsEyeVec = eyeVec * tbnMatrix;
-
- vec4 color;
- float day = gl_Color.r;
- float night = gl_Color.g;
- float light_source = gl_Color.b;
-
- float rg = mix(night, day, dayNightRatio);
- rg += light_source * 2.5; // Make light sources brighter
- float b = rg;
-
- // Moonlight is blue
- b += (day - night) / 13.0;
- rg -= (day - night) / 13.0;
-
- // Emphase blue a bit in darker places
- // See C++ implementation in mapblock_mesh.cpp finalColorBlend()
- b += max(0.0, (1.0 - abs(b - 0.13)/0.17) * 0.025);
-
- // Artificial light is yellow-ish
- // See C++ implementation in mapblock_mesh.cpp finalColorBlend()
- rg += max(0.0, (1.0 - abs(rg - 0.85)/0.15) * 0.065);
-
- 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;
-}
|