Skip to content

Commit a260819

Browse files
committed
feat: randomize gradient spawn location
1 parent a41404c commit a260819

File tree

1 file changed

+11
-24
lines changed

1 file changed

+11
-24
lines changed

app/(articles)/render.ts

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ uniform float size_div;
2222
uniform float far_grain;
2323
uniform float close_grain;
2424
uniform float blur_size;
25+
uniform vec2 spawn;
2526
uniform vec2 start;
2627
uniform vec2 size;
2728
@@ -32,19 +33,12 @@ uniform vec3 g1_clr;
3233
uniform vec3 g2_clr;
3334
uniform vec3 g3_clr;
3435
35-
vec2 skew (vec2 st) {
36-
vec2 r = vec2(0.0);
37-
r.x = 1.1547*st.x;
38-
r.y = st.y+0.5*r.x;
39-
return r;
40-
}
41-
4236
float rand(vec2 co) {
4337
highp float a = 12.9898;
4438
highp float b = 78.233;
4539
highp float c = 43758.5453;
46-
highp float dt= dot(co.xy ,vec2(a,b));
47-
highp float sn= mod(dt,3.14);
40+
highp float dt = dot(co.xy, vec2(a, b));
41+
highp float sn = mod(dt, 3.14);
4842
return fract(sin(sn) * c);
4943
}
5044
@@ -82,6 +76,7 @@ float lerp(float a, float b, float t) {
8276
}
8377
8478
vec3 get_uv_clr (vec2 uv) {
79+
uv = uv + spawn.xy;
8580
float shift_len = pow(rand(uv.xy*20.0), 10.) * far_grain;
8681
float shift_angle = pow(rand(uv.xy*10.0), 3.) * PI * 2.0;
8782
vec2 shift = vec2(cos(shift_angle), sin(shift_angle)) * shift_len;
@@ -92,9 +87,9 @@ vec3 get_uv_clr (vec2 uv) {
9287
9388
uv = uv + shift2 + shift;
9489
95-
float n1 = distance(uv.xy, g1_coords) + snoise(vec2(uv.x * -1.0, uv.y)) * 0.3;
96-
float n2 = distance(uv.xy, g2_coords) + snoise(vec2(uv.x, uv.y * -1.0)) * 0.3;
97-
float n3 = distance(uv.xy, g3_coords) + snoise(vec2(uv.x, uv.y)) * 0.3;
90+
float n1 = distance(uv.xy, g1_coords + spawn.xy) + snoise(vec2(uv.x * -1.0, uv.y)) * 0.3;
91+
float n2 = distance(uv.xy, g2_coords + spawn.xy) + snoise(vec2(uv.x, uv.y * -1.0)) * 0.3;
92+
float n3 = distance(uv.xy, g3_coords + spawn.xy) + snoise(vec2(uv.x, uv.y)) * 0.3;
9893
9994
float min_n = min(n1, min(n2, n3));
10095
vec3 closest_clr = vec3(0.0);
@@ -113,7 +108,7 @@ vec3 get_uv_clr (vec2 uv) {
113108
void main() {
114109
vec2 uv = vec2((gl_FragCoord.x - start.x) / size.x, gl_FragCoord.y / size.y);
115110
uv.x = uv.x * size_div;
116-
uv.xy = uv.xy * 0.9;
111+
uv = uv.xy * 0.9;
117112
118113
vec3 c2 = get_uv_clr(uv.xy + vec2(blur_size, 0));
119114
vec3 c3 = get_uv_clr(uv + vec2(-blur_size, 0));
@@ -141,7 +136,6 @@ void main() {
141136
vec3 clr4 = mix(mix(c14, c15, 0.5), mix(c16, c17, 0.5), 0.5);
142137
143138
gl_FragColor = vec4((clr1 + clr2 + clr3 + clr4) / 4.0, 1.0);
144-
// gl_FragColor = vec4(uv.x, uv.x, uv.x, 1.0);
145139
}
146140
`;
147141

@@ -187,7 +181,6 @@ export function drawGradients(
187181

188182
const initStart = performance.now();
189183
const rects = subcanvases.length;
190-
// const mainCanvas = new OffscreenCanvas(w * rects, h);
191184
const mainCanvas = subcanvases[0];
192185
const gl = mainCanvas.getContext("webgl")!;
193186

@@ -240,6 +233,7 @@ export function drawGradients(
240233
const far_grain = gl.getUniformLocation(progDraw, "far_grain");
241234
const close_grain = gl.getUniformLocation(progDraw, "close_grain");
242235
const size = gl.getUniformLocation(progDraw, "size");
236+
const spawn = gl.getUniformLocation(progDraw, "spawn");
243237
const start = gl.getUniformLocation(progDraw, "start");
244238
const g1_clr = gl.getUniformLocation(progDraw, "g1_clr");
245239
const g1_coords = gl.getUniformLocation(progDraw, "g1_coords");
@@ -286,6 +280,7 @@ export function drawGradients(
286280
gl.DYNAMIC_DRAW,
287281
);
288282

283+
// gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
289284
gl.enableVertexAttribArray(inPos);
290285
gl.vertexAttribPointer(inPos, 2, gl.FLOAT, false, 0, 0);
291286

@@ -300,6 +295,7 @@ export function drawGradients(
300295
gl.uniform1f(far_grain, 0.3); // grain for inner parts of shapes
301296
gl.uniform1f(close_grain, 0.09); // grain for smoothing shapes between lines
302297
gl.uniform2f(size, w, h);
298+
gl.uniform2f(spawn, Math.random() * 3.0, Math.random() * 3.0);
303299
gl.uniform2f(start, w * rectNum, h);
304300
gl.uniform3f(g1_clr, ...g1.clr);
305301
gl.uniform2f(g1_coords, ...g1.coords);
@@ -314,19 +310,10 @@ export function drawGradients(
314310
gl.drawElements(gl.TRIANGLES, inx.length, gl.UNSIGNED_SHORT, 0);
315311
log(`draw took ${performance.now() - drawStart} ms`);
316312

317-
// const copyStart = performance.now();
318-
// const subcanvas = subcanvases[rectNum];
319-
// subcanvas
320-
// .getContext("2d", { alpha: false })!
321-
// .drawImage(mainCanvas, w * rectNum, 0, w, h, 0, 0, w, h);
322-
// log(`copy took ${performance.now() - copyStart} ms`);
323-
324313
gl.deleteBuffer(bufObj.pos);
325314
gl.deleteBuffer(bufObj.inx);
326315
}
327316

328-
// mainCanvas.width = 1;
329-
// mainCanvas.height = 1;
330317
gl.deleteShader(vertShader);
331318
gl.deleteShader(fragShader);
332319
gl.deleteProgram(progDraw);

0 commit comments

Comments
 (0)