mirror of
https://github.com/Karaka-Management/cOMS.git
synced 2026-02-15 18:08:40 +00:00
28 lines
959 B
HLSL
28 lines
959 B
HLSL
#include "helper.hlsli"
|
|
|
|
uniform vec3 eye;
|
|
varying vec3 position;
|
|
const vec3 abovewaterColor = vec3(0.25, 1.0, 1.25);
|
|
|
|
void main() {
|
|
vec2 coord = position.xz * 0.5 + 0.5;
|
|
vec4 info = texture2D(water, coord);
|
|
|
|
/* make water look more "peaked" */
|
|
for (int i = 0; i < 5; i++) {
|
|
coord += info.ba * 0.005;
|
|
info = texture2D(water, coord);
|
|
}
|
|
|
|
vec3 normal = vec3(info.b, sqrt(1.0 - dot(info.ba, info.ba)), info.a);
|
|
vec3 incomingRay = normalize(position - eye);
|
|
|
|
vec3 reflectedRay = reflect(incomingRay, normal);
|
|
vec3 refractedRay = refract(incomingRay, normal, IOR_AIR / IOR_WATER);
|
|
float fresnel = mix(0.25, 1.0, pow(1.0 - dot(normal, -incomingRay), 3.0));
|
|
|
|
vec3 reflectedColor = getSurfaceRayColor(position, reflectedRay, abovewaterColor);
|
|
vec3 refractedColor = getSurfaceRayColor(position, refractedRay, abovewaterColor);
|
|
|
|
gl_FragColor = vec4(mix(refractedColor, reflectedColor, fresnel), 1.0);
|
|
} |