Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/public/shaders/glsl/water_high.vs
Show All 27 Lines | |||||
#if USE_REFLECTION | #if USE_REFLECTION | ||||
varying vec3 reflectionCoords; | varying vec3 reflectionCoords; | ||||
#endif | #endif | ||||
#if USE_REFRACTION | #if USE_REFRACTION | ||||
varying vec3 refractionCoords; | varying vec3 refractionCoords; | ||||
#endif | #endif | ||||
varying float fwaviness; | varying float fwaviness; | ||||
varying float sun_dimming_factor; | |||||
varying vec2 WindCosSin; | varying vec2 WindCosSin; | ||||
attribute vec3 a_vertex; | attribute vec3 a_vertex; | ||||
attribute vec2 a_waterInfo; | attribute vec2 a_waterInfo; | ||||
attribute vec3 a_otherPosition; | attribute vec3 a_otherPosition; | ||||
// Schlick's Abomination should be good enough for sunlight getting into the water. | |||||
float SchlickApproximateRefractionCoefficient( float rayDotNormal, float From_IOR, float To_IOR ) | |||||
{ | |||||
float R0 = (To_IOR - From_IOR) / (From_IOR + To_IOR); | |||||
float angle_part = pow( (1.15-rayDotNormal), 5.0 ); | |||||
R0 = R0 * R0; | |||||
float RC = R0 + (1.0 - R0) * angle_part; | |||||
return 1.0-RC; | |||||
} | |||||
void main() | void main() | ||||
{ | { | ||||
worldPos = a_vertex; | worldPos = a_vertex; | ||||
waterInfo = a_waterInfo; | waterInfo = a_waterInfo; | ||||
waterDepth = a_waterInfo.g; | waterDepth = a_waterInfo.g; | ||||
WindCosSin = vec2(cos(-windAngle), sin(-windAngle)); | WindCosSin = vec2(cos(-windAngle), sin(-windAngle)); | ||||
Show All 15 Lines | #endif | ||||
v_eyeVec = normalize(cameraPos - worldPos); | v_eyeVec = normalize(cameraPos - worldPos); | ||||
moddedTime = mod(time * 60.0, 8.0) / 8.0; | moddedTime = mod(time * 60.0, 8.0) / 8.0; | ||||
// Fix the waviness for local wind strength | // Fix the waviness for local wind strength | ||||
fwaviness = waviness * (0.15 + a_waterInfo.r / 1.15); | fwaviness = waviness * (0.15 + a_waterInfo.r / 1.15); | ||||
float sun_ndotv = dot(normalize(-sunDir),vec3(0.0,1.0,0.0)); | |||||
sun_dimming_factor = sun_ndotv * SchlickApproximateRefractionCoefficient( sun_ndotv, 1.0, 1.33 ); | |||||
gl_Position = transform * vec4(a_vertex, 1.0); | gl_Position = transform * vec4(a_vertex, 1.0); | ||||
} | } |
Wildfire Games · Phabricator