[RELEASE] u22-v03
This version is submitted to U22 breau.
This commit is contained in:
91
core/loshader/combat_ring.fshader
Normal file
91
core/loshader/combat_ring.fshader
Normal file
@@ -0,0 +1,91 @@
|
||||
in vec2 v_uv;
|
||||
in float v_aa;
|
||||
in float v_range;
|
||||
in vec2 v_period;
|
||||
in vec4 v_color;
|
||||
|
||||
out vec4 o_color;
|
||||
|
||||
vec2 uv_;
|
||||
float len_;
|
||||
float theta_;
|
||||
|
||||
float atan2(in vec2 p) {
|
||||
return p.x == 0.? PI/2.*sign(p.y): atan(p.y, p.x);
|
||||
}
|
||||
float thetadist(in vec2 p, in float t) {
|
||||
float a = tan(t);
|
||||
float b = 1.;
|
||||
if (cos(t) == 0.) {
|
||||
a = 1.;
|
||||
b = 0.;
|
||||
}
|
||||
return abs(b*p.y-a*p.x)/sqrt(a*a+b*b);
|
||||
}
|
||||
|
||||
float grid(in float n, in float ri, in float ro) {
|
||||
float u = PI/n;
|
||||
float t = floor(theta_/u)*u;
|
||||
|
||||
float d = min(thetadist(uv_, t), thetadist(uv_, t+u));
|
||||
return
|
||||
step(ri, len_)*step(len_, ro)*
|
||||
smoothstep(v_aa, .0, d);
|
||||
}
|
||||
|
||||
float belt(in float t1, in float t2, in float r) {
|
||||
float t1a = smoothstep(v_aa, 0., thetadist(uv_, t1))*step(abs(theta_-t1), .1);
|
||||
float t2a = smoothstep(v_aa, 0., thetadist(uv_, t2))*step(abs(theta_-t2), .1);
|
||||
|
||||
float a = t1a + t2a + step(t1, theta_)*step(theta_, t2);
|
||||
a *=
|
||||
(t1a + t2a)*smoothstep(.4, .45, len_) +
|
||||
smoothstep(r-v_aa, r, len_)*
|
||||
(1.-max(len_-r, 0.)/.2) +
|
||||
smoothstep(v_aa, 0., abs(len_-.7*r));
|
||||
return clamp(a, 0., 1.);
|
||||
}
|
||||
|
||||
float circle(in float r) {
|
||||
return
|
||||
smoothstep(v_aa, 0., abs(len_-r));
|
||||
}
|
||||
|
||||
float clockhand(in float t) {
|
||||
float r = smoothstep(.25, .3, len_)*smoothstep(1., .85, len_);
|
||||
float a =
|
||||
r *
|
||||
smoothstep(v_aa, 0., thetadist(uv_, t)) *
|
||||
step(abs(theta_-t), .1);
|
||||
float b =
|
||||
r * max(1.-abs(theta_-t)/(PI/12.), 0.)*.7;
|
||||
|
||||
return a + b;
|
||||
}
|
||||
|
||||
void main(void) {
|
||||
uv_ = v_uv.yx;
|
||||
len_ = length(uv_);
|
||||
theta_ = atan2(uv_);
|
||||
theta_ = theta_ < 0.? theta_+2.*PI: theta_;
|
||||
|
||||
if (v_range <= -1.) {
|
||||
o_color = v_color;
|
||||
float a =
|
||||
grid( 2., .4, 1.) +
|
||||
grid(60., .75, .8) +
|
||||
grid(10., .65, .8) +
|
||||
grid(8., .5, .55) +
|
||||
grid( 4., .3, .4) +
|
||||
circle(.8);
|
||||
o_color.a *= clamp(a, 0., 1.);
|
||||
|
||||
} else if (v_range <= 0.) {
|
||||
o_color = v_color*clockhand(v_period.x*PI*2.);
|
||||
o_color.a = pow(o_color.a, 2.);
|
||||
|
||||
} else {
|
||||
o_color = v_color;
|
||||
o_color.a *= belt(v_period.x*PI*2., v_period.y*PI*2., v_range);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user