Created
March 5, 2023 06:11
-
-
Save orazdow/bf921bdd5098918262d81399c9dfab5b to your computer and use it in GitHub Desktop.
waves shader
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fs = /*glsl*/`#version 300 es | |
precision mediump float; | |
out vec4 fragColor; | |
uniform vec2 resolution; | |
uniform vec2 mouse; | |
uniform float time; | |
vec2 ball(float t){ | |
return vec2(sin(t*1.2)*cos(5.+t*.82), cos(6.+t*.9)); | |
} | |
vec2 pw(float i, vec2 uv, vec2 d, float t, float a){ | |
t *= 4.; | |
i = (1.+i)*22.; | |
d += ball(.1*t+i)*1.; | |
a = mix(a, sin(i)*.3+.5,.5)*2.; | |
float dx = d.x*cos(dot(d,uv)*a+t); | |
float dy = d.y*cos(dot(d,uv)*a+t); | |
return vec2(dx, dy); | |
} | |
vec2 _pw(float i, vec2 uv, vec2 d, float t, float a){ | |
t *= .7; | |
a*=2.; | |
i = (1.+i)*5000.; | |
d += ball(i*9.+t*.0)*.6; | |
float m = mix(.1, 1., sin(i)*.5+.5); | |
t *= 5.+a*.4; | |
a = mix(a*.1, a*1.5, sin(i)*.5+.5); | |
float dx = m*d.x*cos(length(d)*a+t+a); | |
float dy = m*d.y*cos(length(d)*a+t+a); | |
return vec2(dx, dy); | |
} | |
vec3 wave(vec2 uv, vec2 d, float t, float a){ | |
vec2 p = pw(0., uv, d, t, a) + | |
pw(1., uv, d, t, a) + | |
pw(2., uv, d, t, a) + | |
pw(3., uv, d, t, a); | |
return normalize(cross(vec3(1, 0, p.x), vec3(0, 1, p.y))); | |
} | |
vec3 light(vec2 uv, float t, float a){ | |
vec3 c1 = vec3(0,.6,1); | |
vec3 c2 = vec3(0,.0,1); | |
vec3 c3 = vec3(.6,.0,1); | |
vec3 l1 = normalize(vec3(mouse*2.-1., 1)); | |
vec3 l2 = normalize(vec3(-1., -1.5, 2.5)); | |
vec3 w = wave(uv, uv, t, a); | |
float ld = clamp(dot(l1, w),0.,1.); | |
float ld2 = clamp(dot(l2, w),0.,1.); | |
float lf = clamp(pow(.5-dot(l2, w),5.),0.,1.); | |
float ls = clamp(pow(dot(l1, w),90.),0.,1.); | |
float ls2 = clamp(pow(dot(l2, w),55.),0.,1.); | |
vec3 l = .2*c3+c1*.6*ld + c2*.2*ld2+ c1*.7*ls +.4*ls2*c3 +lf*c1*.2; | |
// return pow(l,vec3(1.5))*1.5; | |
return l; | |
} | |
vec3 _light(vec2 uv, float t, float a){ | |
vec3 w = wave(uv, uv, t, a); | |
vec3 lv = normalize(vec3(mouse*2.-1., 1)); | |
float ld = clamp(dot(lv, w),0.,1.); | |
float ls = clamp(pow(dot(lv, w),90.),0.,1.); | |
float l = .2 + .5*ld + .5*ls; | |
return vec3(l)*vec3(0,.6,1); | |
} | |
void main(){ | |
vec2 uv = (2.*gl_FragCoord.xy-resolution)/resolution; | |
vec3 l = light(uv, time, 6.); | |
fragColor = vec4(l, 1.); | |
} | |
`; | |
const prog = { | |
fs: fs | |
}; | |
export default prog; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment