// 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
  );
}
