Skip to content

Commit 31a8665

Browse files
committed
Add more shaders to the shader library. WIP
1 parent 224f096 commit 31a8665

File tree

16 files changed

+870
-20
lines changed

16 files changed

+870
-20
lines changed

src/commonMain/resources/shader-libraries/built-in/_libraryIndex.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@
188188
"tags": [
189189
"@type=paint"
190190
],
191-
"srcFile": "shaders/BlueSteel.glsl"
191+
"srcFile": "shaders/Blue Hearts.glsl"
192192
},
193193
{
194194
"id": "circular-dependency",
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Beat Shift
2+
// Priority > 1, shader channel "time"
3+
4+
struct BeatInfo {
5+
float beat;
6+
float bpm;
7+
float intensity;
8+
float confidence;
9+
};
10+
uniform BeatInfo beatInfo; // @@baaahs.BeatLink:BeatInfo
11+
uniform float beatTimeShiftAmount; // @@Slider default=.5 min=0 max=2
12+
13+
// @return time
14+
// @param inTime time
15+
float main(float inTime) {
16+
return inTime + beatInfo.intensity * beatTimeShiftAmount;
17+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// Image Overlay
2+
3+
vec4 image(vec2 uv); // @@Image
4+
5+
// @return color
6+
// @param inColor color
7+
vec4 main(vec4 inColor) {
8+
vec4 i = image(gl_FragCoord);
9+
return vec4(mix(inColor.rgb, i.rgb, i.a), 1.0);
10+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// That's All Folks
2+
uniform float time;
3+
4+
struct BeatInfo {
5+
float beat;
6+
float bpm;
7+
float intensity;
8+
float confidence;
9+
};
10+
uniform BeatInfo beatInfo; // @@baaahs.BeatLink:BeatInfo
11+
12+
uniform float ringSpeed; // @@Slider default=10. min=5 max=20
13+
uniform float ringDensity; // @@Slider default=60. min=10 max=120
14+
uniform float ringFade; // @@Slider default=.5 min=0 max=1
15+
16+
// @param fragCoord uv-coordinate
17+
// @return color
18+
vec4 upstreamColor(vec2 fragCoord);
19+
20+
// @return color
21+
// @param uvIn uv-coordinate
22+
// @param inColor color
23+
vec4 main(vec2 uvIn) {
24+
vec4 inColor = upstreamColor(uvIn);
25+
vec2 p = uvIn - .5;
26+
float directMod = sin(time * 0.01);
27+
float d = mix(
28+
1. - ringFade,
29+
1.,
30+
sin(-length(p) * ringDensity * (0.8+ beatInfo.intensity * 0.2) + time * ringSpeed)
31+
);
32+
return vec4(inColor.rgb * d, 1.0);
33+
}

src/commonMain/resources/shader-libraries/built-in/shaders/BlueSteel.glsl renamed to src/commonMain/resources/shader-libraries/built-in/shaders/Blue Hearts.glsl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Blue Steel
1+
// Blue Hearts
22
// From https://www.shadertoy.com/view/wt2GWK
33

44
#define t iTime
Lines changed: 235 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,235 @@
1+
// Blue's Clues
2+
// From https://www.shadertoy.com/view/wljSzR
3+
4+
// Sphere tracer by mzeo
5+
//
6+
// inspired by http://www.youtube.com/watch?v=kuesTvUYsSc#t=377
7+
//
8+
// waves by @hintz
9+
10+
#ifdef GL_ES
11+
precision mediump float;
12+
const vec3 df = vec3(0.05, 0.0, 0.0);
13+
#else
14+
const vec3 df = vec3(0.01, 0.0, 0.0);
15+
#endif
16+
17+
#define AUTO_CAMERA
18+
19+
// input
20+
21+
// Constants
22+
// Camera
23+
const vec3 origin = vec3(0, 0, 0);
24+
const int steps = 128;
25+
const vec3 sun = vec3(1.0, .5, -1.0);
26+
27+
const int miterations = 32;
28+
29+
// Ball
30+
struct Ball
31+
{
32+
vec3 pos;
33+
float size;
34+
};
35+
36+
const Ball ball = Ball(vec3(0, 0, 5), 0.5);
37+
38+
struct Balls
39+
{
40+
vec3 dir;
41+
vec3 p;
42+
float dist;
43+
};
44+
45+
const Balls balls = Balls(vec3(1, 0, 0), vec3(0, 0, 0), 1.0);
46+
47+
// Floor
48+
49+
struct Plane
50+
{
51+
vec3 n;
52+
float d;
53+
};
54+
55+
const Plane plane = Plane(vec3(0, 1, 0), -1.0);
56+
57+
// Distance
58+
struct Dist
59+
{
60+
float dist;
61+
int id;
62+
};
63+
64+
65+
Dist and(Dist a, Dist b)
66+
{
67+
if (a.dist < b.dist)
68+
{
69+
return a;
70+
}
71+
72+
return b;
73+
}
74+
75+
Dist fBall(Ball ball, vec3 p)
76+
{
77+
return Dist(length(ball.pos - p) - ball.size, 0);
78+
}
79+
80+
Ball get(Balls balls, float t)
81+
{
82+
float a = abs(mod(t, 6.0) - 3.0);
83+
vec3 p = balls.p + balls.dir * t * balls.dist + a * a * vec3(0, -0.15, 0);
84+
return Ball(p, ball.size);
85+
}
86+
87+
Dist fBalls(Balls balls, vec3 p)
88+
{
89+
float t = dot(p - balls.p, balls.dir) / balls.dist;
90+
float t0 = t - fract(t + fract(iTime) * 2.0);
91+
float t1 = t0 + 1.0;
92+
93+
return and(
94+
fBall(get(balls, t0), p),
95+
fBall(get(balls, t1), p));
96+
}
97+
98+
Dist fPlane(Plane plane, vec3 p)
99+
{
100+
return Dist(dot(plane.n, p) - plane.d - 0.4*cos(length(p.xz) - iTime), 1);
101+
}
102+
103+
Dist f(vec3 p)
104+
{
105+
return and(
106+
fBalls(balls, p),
107+
fPlane(plane, p));
108+
}
109+
110+
vec3 grad(vec3 p)
111+
{
112+
float f0 = f(p).dist;
113+
114+
return normalize(vec3(
115+
f(p + df.xyz).dist,
116+
f(p + df.yxz).dist,
117+
f(p + df.yzx).dist) - f0);
118+
}
119+
120+
float mandel(vec2 c)
121+
{
122+
vec2 z = c;
123+
124+
for(int i = 0; i < miterations; ++i)
125+
{
126+
z = vec2(z.x*z.x - z.y*z.y, 1.5*z.x*z.y) + c;
127+
if (length(z) > 40.0) return float(i) / float(miterations);
128+
}
129+
130+
return 0.0;
131+
}
132+
133+
vec3 floorTexture(vec3 p)
134+
{
135+
mat2 rot = mat2(vec2(1, 1), vec2(1, -1));
136+
vec2 c = rot * (p.xz + vec2(-0.7, -1.0)) * 0.2;
137+
float i = mandel(c);
138+
return clamp(vec3(i * 10.0, i * i *10.0, i*i*i*5.0).zyx, vec3(0,0,0), vec3(2,2,2));
139+
}
140+
141+
142+
vec4 shade(vec3 p, vec3 ray, int id)
143+
{
144+
vec3 n = grad(p);
145+
float diffuse = clamp(dot(normalize(sun), n), 0.0, 1.0);
146+
147+
vec3 color;
148+
float ref;
149+
150+
if (id == 0)
151+
{
152+
color = vec3(0,1,0);
153+
ref = 0.1;
154+
}
155+
else
156+
{
157+
color = floorTexture(p);
158+
ref = 0.5;
159+
}
160+
161+
return vec4(color * diffuse, 1) * ref;
162+
}
163+
164+
vec4 combine(vec4 a, vec4 b)
165+
{
166+
return a + b * (1.0 - a.w);
167+
}
168+
169+
vec4 sky(vec3 ray)
170+
{
171+
float sun = dot(ray, normalize(sun));
172+
sun = (sun > 0.0) ? pow(sun, 150.0) * 3.0 : 0.0;
173+
float horizon = 1.0 - abs(ray.y);
174+
vec3 blue = vec3(0.1, 0.3, 0.6);
175+
vec3 red = vec3(0.6, 0.3, 0.) * 2.0;
176+
return vec4(vec3(0.9, 0.8, 0.5) * sun + blue * horizon + red * pow(horizon, 8.0), 1);
177+
}
178+
179+
vec4 trace(vec3 origin, vec3 ray)
180+
{
181+
vec3 p = origin;
182+
Dist dist = Dist(10.0, 2);
183+
vec4 result = vec4(0, 0, 0, 0);
184+
185+
for(int i = 0; i < steps; ++i)
186+
{
187+
dist = f(p);
188+
if (dist.dist > 0.01)
189+
{
190+
p += ray * dist.dist;
191+
float absorb = exp(-dist.dist * 0.05);
192+
vec4 s = sky(ray) * (1.0 - absorb);
193+
194+
result = combine(result, s);
195+
}
196+
else if (result.w < 0.99)
197+
{
198+
vec3 n = grad(p);
199+
vec4 s = shade(p, ray, dist.id);
200+
ray = reflect(ray, n);
201+
p += n * 0.01;
202+
203+
result = combine(result, s);
204+
}
205+
else
206+
{
207+
break;
208+
}
209+
}
210+
211+
return combine(result, sky(ray));
212+
}
213+
void mainImage(out vec4 fragColor,in vec2 fragCoord)
214+
{
215+
float scale = 2.0 / max(iResolution.x, iResolution.y);
216+
vec3 ray = vec3((fragCoord.xy - iResolution.xy / 2.0) * scale, 1);
217+
218+
//#ifdef AUTO_CAMERA
219+
float yaw = cos(iTime) * -0.25 + 0.1;
220+
float angle = iTime * 0.5;
221+
//#else
222+
//float yaw = iMouse.y - 0.15;
223+
//float angle = iMouse.x * 8.0;
224+
//#endif
225+
226+
vec3 from = (vec3(sin(angle), 0, cos(angle)) * cos(yaw) + vec3(0, sin(yaw) * 1.0, 0)) * 5.0;
227+
//vec3 from = origin + vec3((iMouse.xy - vec2(0.5,0.0)) * vec2(15.0, 3.0), -5);
228+
vec3 to = vec3(0, -1, 0);
229+
vec3 up = vec3(0, 1, 0);
230+
vec3 dir = normalize(to - from);
231+
vec3 left = normalize(cross(up, dir));
232+
mat3 rot = mat3(left, cross(dir, left), dir);
233+
234+
fragColor = trace(from, rot * normalize(ray));
235+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// Checkerboard
2+
3+
uniform float checkerboardSize = 10.0; // @@Slider min=.001 max=1 default=.125
4+
5+
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
6+
vec2 pos = floor(fragCoord / checkerboardSize);
7+
vec3 patternMask = vec3(mod(pos.x + mod(pos.y, 2.0), 2.0));
8+
fragColor = vec4(patternMask.xy, 1., 1.);
9+
}

0 commit comments

Comments
 (0)