// https://gamedevelopment.tutsplus.com/tutorials/a-beginners-guide-to-coding-graphics-shaders--cms-23313 uniform vec3 waterColor; uniform vec3 bottomColor; uniform float wateroffset; uniform float waterexponent; varying vec3 vWorldPosition; void main() { float h = normalize( vWorldPosition * -1.0 + wateroffset ).y; gl_FragColor = vec4( // mix(x, y, a) performs a linear interpolation between x and y using a to weight between them. // The return value is computed as x×(1−a)+y×a. mix( waterColor, bottomColor, max( pow( max( h , 0.0), waterexponent ), 0.0 ) ), 1.0 ); }