hex-world
    Preparing search index...

    Variable WATER_GLSLConst

    WATER_GLSL: "\n // --- 3D Simplex noise (Ashima Arts, MIT License) ---\n vec3 sn_mod289(vec3 x) { return x - floor(x * (1.0/289.0)) * 289.0; }\n vec4 sn_mod289(vec4 x) { return x - floor(x * (1.0/289.0)) * 289.0; }\n vec4 sn_permute(vec4 x) { return sn_mod289(((x*34.0)+1.0)*x); }\n vec4 sn_taylorInvSqrt(vec4 r) { return 1.79284291400159 - 0.85373472095314 * r; }\n\n float snoise(vec3 v) {\n const vec2 C = vec2(1.0/6.0, 1.0/3.0);\n const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);\n vec3 i = floor(v + dot(v, C.yyy));\n vec3 x0 = v - i + dot(i, C.xxx);\n vec3 g = step(x0.yzx, x0.xyz);\n vec3 l = 1.0 - g;\n vec3 i1 = min(g.xyz, l.zxy);\n vec3 i2 = max(g.xyz, l.zxy);\n vec3 x1 = x0 - i1 + C.xxx;\n vec3 x2 = x0 - i2 + C.yyy;\n vec3 x3 = x0 - D.yyy;\n i = sn_mod289(i);\n vec4 p = sn_permute(sn_permute(sn_permute(\n i.z + vec4(0.0, i1.z, i2.z, 1.0))\n + i.y + vec4(0.0, i1.y, i2.y, 1.0))\n + i.x + vec4(0.0, i1.x, i2.x, 1.0));\n float n_ = 0.142857142857;\n vec3 ns = n_ * D.wyz - D.xzx;\n vec4 j = p - 49.0 * floor(p * ns.z * ns.z);\n vec4 x_ = floor(j * ns.z);\n vec4 y_ = floor(j - 7.0 * x_);\n vec4 x = x_ * ns.x + ns.yyyy;\n vec4 y = y_ * ns.x + ns.yyyy;\n vec4 h = 1.0 - abs(x) - abs(y);\n vec4 b0 = vec4(x.xy, y.xy);\n vec4 b1 = vec4(x.zw, y.zw);\n vec4 s0 = floor(b0) * 2.0 + 1.0;\n vec4 s1 = floor(b1) * 2.0 + 1.0;\n vec4 sh = -step(h, vec4(0.0));\n vec4 a0 = b0.xzyw + s0.xzyw * sh.xxyy;\n vec4 a1 = b1.xzyw + s1.xzyw * sh.zzww;\n vec3 p0 = vec3(a0.xy, h.x);\n vec3 p1 = vec3(a0.zw, h.y);\n vec3 p2 = vec3(a1.xy, h.z);\n vec3 p3 = vec3(a1.zw, h.w);\n vec4 norm = sn_taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2,p2), dot(p3,p3)));\n p0 *= norm.x; p1 *= norm.y; p2 *= norm.z; p3 *= norm.w;\n vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);\n m = m * m;\n return 42.0 * dot(m*m, vec4(dot(p0,x0), dot(p1,x1), dot(p2,x2), dot(p3,x3)));\n }\n\n float waterNoise(vec3 pos) {\n float result = 0.0;\n float persMax = 0.0;\n for (int g = 0; g < 5; g++) {\n float freq = pow(2.0, float(g));\n float pers = pow(0.5, float(g));\n persMax += pers;\n result += pers * snoise(freq * pos);\n }\n return result / persMax + 0.5;\n }\n\n float waveNoise(vec2 p, vec2 off) {\n return sin(p.x * 0.5 + off.x) * cos(p.y * 0.5 + off.y) * 0.5 + 0.5;\n }\n\n float Waves(vec2 worldXZ, float time) {\n vec2 uv1 = worldXZ; uv1.y += time;\n vec2 uv2 = worldXZ; uv2.x += time;\n float n1z = waveNoise(uv1, vec2(0.00, 0.00));\n float n1w = waveNoise(uv1, vec2(1.30, 0.90));\n float n2x = waveNoise(uv2, vec2(0.70, 2.10));\n float n2y = waveNoise(uv2, vec2(2.30, 0.30));\n float n1y = waveNoise(uv1, vec2(0.50, 1.70));\n float n2z = waveNoise(uv2, vec2(1.10, 0.70));\n float blendWave = sin((worldXZ.x + worldXZ.y) * 0.1 + (n1y + n2z) + time);\n blendWave *= blendWave;\n float waves = mix(n1z, n1w, blendWave) + mix(n2x, n2y, blendWave);\n return smoothstep(0.75, 2.0, waves);\n }\n\n float Foam(float shore, vec2 worldXZ, float time) {\n shore = sqrt(shore) * 0.9;\n vec2 noiseUV = worldXZ + time * 0.25;\n float n1 = sin(noiseUV.x * 0.3 + noiseUV.y * 0.2) * 0.5 + 0.5;\n float n2 = cos(noiseUV.x * 0.25 - noiseUV.y * 0.35 + 1.7) * 0.5 + 0.5;\n float distortion1 = n1 * (1.0 - shore);\n float foam1 = sin((shore + distortion1) * 10.0 - time);\n foam1 *= foam1;\n float distortion2 = n2 * (1.0 - shore);\n float foam2 = sin((shore + distortion2) * 10.0 + time + 2.0);\n foam2 *= foam2 * 0.7;\n return max(foam1, foam2) * shore;\n }\n\n float River(vec2 riverUV, float time) {\n vec2 uv1 = riverUV;\n uv1.x = uv1.x * 0.0625 + time * 0.005;\n uv1.y -= time * 0.25;\n float n1 = sin(uv1.x * 20.0) * cos(uv1.y * 20.0) * 0.5 + 0.5;\n vec2 uv2 = riverUV;\n uv2.x = uv2.x * 0.0625 - time * 0.0052;\n uv2.y -= time * 0.23;\n float n2 = sin(uv2.x * 20.0) * cos(uv2.y * 20.0) * 0.5 + 0.5;\n return n1 * n2;\n }\n" = ...

    Shared GLSL functions used by open water, shore, and estuary shaders.