Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/binaries/data/mods/public/shaders/glsl/water_high.fs
Show First 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | |||||
varying float fwaviness; | varying float fwaviness; | ||||
uniform samplerCube skyCube; | uniform samplerCube skyCube; | ||||
uniform sampler2D normalMap; | uniform sampler2D normalMap; | ||||
uniform sampler2D normalMap2; | uniform sampler2D normalMap2; | ||||
#if USE_FANCY_EFFECTS | #if USE_FANCY_EFFECTS | ||||
uniform sampler2D waterEffectsTexNorm; | uniform sampler2D waterEffectsTex; | ||||
uniform sampler2D waterEffectsTexOther; | |||||
#endif | #endif | ||||
uniform vec4 waveParams1; // wavyEffect, BaseScale, Flattenism, Basebump | uniform vec4 waveParams1; // wavyEffect, BaseScale, Flattenism, Basebump | ||||
uniform vec4 waveParams2; // Smallintensity, Smallbase, Bigmovement, Smallmovement | uniform vec4 waveParams2; // Smallintensity, Smallbase, Bigmovement, Smallmovement | ||||
#if USE_REFLECTION | #if USE_REFLECTION | ||||
uniform sampler2D reflectionMap; | uniform sampler2D reflectionMap; | ||||
#endif | #endif | ||||
▲ Show 20 Lines • Show All 98 Lines • ▼ Show 20 Lines | void main() | ||||
ww1.x = wwInterp.x * WindCosSin.x - wwInterp.z * WindCosSin.y; | ww1.x = wwInterp.x * WindCosSin.x - wwInterp.z * WindCosSin.y; | ||||
ww1.z = wwInterp.x * WindCosSin.y + wwInterp.z * WindCosSin.x; | ww1.z = wwInterp.x * WindCosSin.y + wwInterp.z * WindCosSin.x; | ||||
ww1.y = wwInterp.y; | ww1.y = wwInterp.y; | ||||
// Flatten them based on waviness. | // Flatten them based on waviness. | ||||
vec3 normal = normalize(mix(vec3(0.0, 1.0, 0.0), ww1, clamp(baseBump + fwaviness / flattenism, 0.0, 1.0))); | vec3 normal = normalize(mix(vec3(0.0, 1.0, 0.0), ww1, clamp(baseBump + fwaviness / flattenism, 0.0, 1.0))); | ||||
#if USE_FANCY_EFFECTS | #if USE_FANCY_EFFECTS | ||||
vec4 fancyeffects = texture2D(waterEffectsTexNorm, gl_FragCoord.xy / screenSize); | vec4 fancyeffects = texture2D(waterEffectsTex, gl_FragCoord.xy / screenSize); | ||||
normal = mix(vec3(0.0, 1.0, 0.0), normal, 0.5 + waterInfo.r / 2.0); | normal = mix(vec3(0.0, 1.0, 0.0), normal, 0.5 + waterInfo.r / 2.0); | ||||
normal.xz = mix(normal.xz, fancyeffects.rb, fancyeffects.a / 2.0); | normal.xz = mix(normal.xz, fancyeffects.rb, fancyeffects.a / 2.0); | ||||
#else | #else | ||||
normal = mix(vec3(0.0, 1.0, 0.0), normal, 0.5 + waterInfo.r / 2.0); | normal = mix(vec3(0.0, 1.0, 0.0), normal, 0.5 + waterInfo.r / 2.0); | ||||
#endif | #endif | ||||
normal = vec3(-normal.x, normal.y, -normal.z); // The final wave normal vector. | normal = vec3(-normal.x, normal.y, -normal.z); // The final wave normal vector. | ||||
▲ Show 20 Lines • Show All 158 Lines • ▼ Show 20 Lines | #else | ||||
color += specular; | color += specular; | ||||
#endif | #endif | ||||
#if USE_FOG | #if USE_FOG | ||||
color = get_fog(color); | color = get_fog(color); | ||||
#endif | #endif | ||||
#if USE_FANCY_EFFECTS | #if USE_FANCY_EFFECTS | ||||
vec4 FoamEffects = texture2D(waterEffectsTexOther, gl_FragCoord.xy / screenSize); | |||||
vec3 foam1 = texture2D(normalMap, (normalCoords.st + normalCoords.zw * BigMovement * waviness / 10.0) * (baseScale - waviness / wavyEffect)).aaa; | vec3 foam1 = texture2D(normalMap, (normalCoords.st + normalCoords.zw * BigMovement * waviness / 10.0) * (baseScale - waviness / wavyEffect)).aaa; | ||||
vec3 foam2 = texture2D(normalMap2, (normalCoords.st + normalCoords.zw * BigMovement * waviness / 10.0) * (baseScale - waviness / wavyEffect)).aaa; | vec3 foam2 = texture2D(normalMap2, (normalCoords.st + normalCoords.zw * BigMovement * waviness / 10.0) * (baseScale - waviness / wavyEffect)).aaa; | ||||
vec3 foam3 = texture2D(normalMap, normalCoords.st / 6.0 - normalCoords.zw * 0.02).aaa; | vec3 foam3 = texture2D(normalMap, normalCoords.st / 6.0 - normalCoords.zw * 0.02).aaa; | ||||
vec3 foam4 = texture2D(normalMap2, normalCoords.st / 6.0 - normalCoords.zw * 0.02).aaa; | vec3 foam4 = texture2D(normalMap2, normalCoords.st / 6.0 - normalCoords.zw * 0.02).aaa; | ||||
vec3 foaminterp = mix(foam1, foam2, moddedTime); | vec3 foaminterp = mix(foam1, foam2, moddedTime); | ||||
foaminterp *= mix(foam3, foam4, moddedTime); | foaminterp *= mix(foam3, foam4, moddedTime); | ||||
foam1.x = abs(foaminterp.x * WindCosSin.x) + abs(foaminterp.z * WindCosSin.y); | foam1.x = abs(foaminterp.x * WindCosSin.x) + abs(foaminterp.z * WindCosSin.y); | ||||
color += FoamEffects.r * FoamEffects.a * 0.4 + pow(foam1.x * (3.0 + waviness), 2.6 - waviness / 5.5); | color += fancyeffects.g + pow(foam1.x * (3.0 + waviness), 2.6 - waviness / 5.5); | ||||
#endif | #endif | ||||
float alpha = clamp(depth, 0.0, 1.0); | float alpha = clamp(depth, 0.0, 1.0); | ||||
#if !USE_REFRACTION | #if !USE_REFRACTION | ||||
alpha = (1.4 - extFact) * alpha; | alpha = (1.4 - extFact) * alpha; | ||||
#endif | #endif | ||||
gl_FragColor = vec4(color * losMod, alpha); | gl_FragColor = vec4(color * losMod, alpha); | ||||
} | } |
Wildfire Games · Phabricator