Updated pack sources

This commit is contained in:
Digital Artifex
2025-11-04 11:29:25 -05:00
parent 2bbd4f806d
commit adebc672ad
49 changed files with 3251 additions and 552 deletions

View File

@@ -0,0 +1,274 @@
/*
@lsdlive
CC-BY-NC-SA
This is my part for "Mist" by Ohno, a 4 kilobytes demo released at the Cookie 2018.
pouet: http://www.pouet.net/prod.php?which=79350
youtube: https://www.youtube.com/watch?v=UUtU3WVB144
Code/Graphics: Flopine
Code/Graphics: Lsdlive
Music: Triace from Desire
Part1 from Flopine here: https://www.shadertoy.com/view/tdBGWD
Information about my process for making this demo here:
https://twitter.com/lsdlive/status/1090627411379716096
*/
float time = 0.;
float random(vec2 uv) {
return fract(sin(dot(uv, vec2(12.2544, 35.1571))) * 5418.548416);
}
mat2 r2d(float a) {
float c = cos(a), s = sin(a);
// Explained here why you still get an anti-clockwise rotation with this matrix:
// https://www.shadertoy.com/view/wdB3DW
return mat2(c, s, -s, c);
}
vec3 re(vec3 p, float d) {
return mod(p - d * .5, d) - d * .5;
}
void amod2(inout vec2 p, float d) {
// should be atan(p.y, p.x) but I had this function for a while
// and putting parameters like this add a PI/6 rotation.
float a = re(vec3(atan(p.x, p.y)), d).x;
p = vec2(cos(a), sin(a)) * length(p);
}
void mo(inout vec2 p, vec2 d) {
p = abs(p) - d;
if (p.y > p.x)p = p.yx;
}
vec3 get_cam(vec3 ro, vec3 ta, vec2 uv) {
vec3 fwd = normalize(ta - ro);
vec3 right = normalize(cross(fwd, vec3(0, 1, 0)));
//vec3 right = normalize(vec3(-fwd.z, 0, fwd.x));
return normalize(fwd + right * uv.x + cross(right, fwd) * uv.y);
}
// signed cube
// https://iquilezles.org/articles/distfunctions
float cube(vec3 p, vec3 b) {
b = abs(p) - b;
return min(max(b.x, max(b.y, b.z)), 0.) + length(max(b, 0.));
}
// iq's signed cross sc() - https://iquilezles.org/articles/menger
float sc(vec3 p, float d) {
p = abs(p);
p = max(p, p.yzx);
return min(p.x, min(p.y, p.z)) - d;
}
////////////////////////// SHADER LSDLIVE //////////////////////////
float prim(vec3 p) {
p.xy *= r2d(3.14 * .5 + p.z * .1); // .1
amod2(p.xy, 6.28 / 3.); // 3.
p.x = abs(p.x) - 9.; // 9.
p.xy *= r2d(p.z * .2); // .2
amod2(p.xy, 6.28 /
mix(
mix(10., 5., smoothstep(59.5, 61.5, time)), // T4
3.,
smoothstep(77.5, 77.75, time)) // T8
); // 3.
mo(p.xy, vec2(2.)); // 2.
p.x = abs(p.x) - .6; // .6
return length(p.xy) - .2;//- smoothstep(80., 87., time)*(.5+.5*sin(time)); // .2
}
float g = 0.; // glow
float de(vec3 p) {
if (time > 109.2) {
mo(p.xy, vec2(.2));
p.x -= 10.;
}
if (time > 101.4) {
p.xy *= r2d(time*.2);
}
if (time > 106.5) {
mo(p.xy, vec2(5. + sin(time)*3.*cos(time*.5), 0.));
}
if (time > 104.) {
amod2(p.xy, 6.28 / 3.);
p.x += 5.;
}
if (time > 101.4) {
mo(p.xy, vec2(2. + sin(time)*3.*cos(time*.5), 0.));
}
p.xy *= r2d(time * .05); // .05
p.xy *= r2d(p.z *
mix(.05, .002, step(89.5, time)) // P2 - T11
); // .05 & .002
p.x += sin(time) * smoothstep(77., 82., time);
amod2(p.xy, 6.28 /
mix(
mix(1., 2., smoothstep(63.5, 68.5, time)), // T6
5.,
smoothstep(72., 73.5, time)) // T7
); // 5.
p.x -= 21.; // 21.
vec3 q = p;
p.xy *= r2d(p.z * .1); // .1
amod2(p.xy, 6.28 / 3.); // 3.
p.x = abs(p.x) -
mix(20., 5., smoothstep(49.5, 55., time)) // T2
; // 5.
p.xy *= r2d(p.z *
mix(1., .2, smoothstep(77.5, 77.75, time)) // T8b
); // .2
p.z = re(p.zzz, 3.).x; // 3.
p.x = abs(p.x);
amod2(p.xy, 6.28 /
mix(6., 3., smoothstep(77.75, 78.5, time)) // T10
); // 3.
float sc1 = sc(p,
mix(8., 1., smoothstep(45.5, 51., time)) // T1
); // 1.
amod2(p.xz, 6.28 /
mix(3., 8., smoothstep(61.5, 65.5, time)) // T5
); // 8.
mo(p.xz, vec2(.1)); // .1
p.x = abs(p.x) - 1.;// 1.
float d = cube(p, vec3(.2, 10, 1)); // fractal primitive: cube substracted by a signed cross
d = max(d, -sc1) -
mix(.01, 2., smoothstep(56., 58.5, time)) // T3
; // 2.
g += .006 / (.01 + d * d); // first layer of glow
d = min(d, prim(q)); // add twisted cylinders
g += .004 / (.013 + d * d); // second layer of glow (after the union of two geometries)
return d;
}
////////////////////////// RAYMARCHING FUNCTIONS //////////////////////////
vec3 raymarch_lsdlive(vec3 ro, vec3 rd, vec2 uv) {
vec3 p;
float t = 0., ri;
float dither = random(uv);
for (float i = 0.; i < 1.; i += .02) {// 50 iterations to keep it "fast"
ri = i;
p = ro + rd * t;
float d = de(p);
d *= 1. + dither * .05; // avoid banding & add a nice "artistic" little noise to the rendering (leon gave us this trick)
d = max(abs(d), .002); // phantom mode trick from aiekick https://www.shadertoy.com/view/MtScWW
t += d * .5;
}
// Shading: uv, iteration & glow:
vec3 c = mix(vec3(.9, .8, .6), vec3(.1, .1, .2), length(uv) + ri);
c.r += sin(p.z * .1) * .2;
c += g * .035; // glow trick from balkhan https://www.shadertoy.com/view/4t2yW1
return c;
}
// borrowed from (mmerchante) : https://www.shadertoy.com/view/MltcWs
void glitch(inout vec2 uv, float start_time_stamp, float end_time_stamp)
{
int offset = int(floor(time)*2.) + int((uv.x + uv.y) * 8.0);
float res = mix(10., 100.0, random(vec2(offset)));
// glitch pixellate
if (time > start_time_stamp && time <= end_time_stamp) uv = floor(uv * res) / res;
int seedX = int(gl_FragCoord.x + time) / 32;
int seedY = int(gl_FragCoord.y + time) / 32;
int seed = mod(time, 2.) > 1. ? seedX : seedY;
// glitch splitter
uv.x += (random(vec2(seed)) * 2.0 - 1.0)
* step(random(vec2(seed)), pow(sin(time * 4.), 7.0))
* random(vec2(seed))
* step(start_time_stamp, time)
* (1. - step(end_time_stamp, time));
}
////////////////////////// MAIN FUNCTION //////////////////////////
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
vec2 q = fragCoord.xy / iResolution.xy;
vec2 uv = (q - .5) * iResolution.xx / iResolution.yx;
/* just code for the shadertoy port */
time = mod(iTime, 43. + 10.4);
time = time + 45.;
if (time > 88. && time <= 98.6) // 98.
time += 10.6;
// added glitch
glitch(uv, 0., 2.);
glitch(uv, 98., 99.);
// lsdlive 2nd part
glitch(uv, 100.5, 101.5);
glitch(uv, 103., 104.);
glitch(uv, 105.5, 106.5);
vec3 lsd_ro = vec3(0, 0, -4. + time * 8.);
vec3 lsd_target = vec3(0., 0., time * 8.);
vec3 lsd_cam = get_cam(lsd_ro, lsd_target, uv);
vec3 col = vec3(0.);
if (time > 45. && time <= 88.) // 43 seconds
col = raymarch_lsdlive(lsd_ro, lsd_cam, uv);
if (time > 98.6 && time <= 109.) // 10.4 seconds
col = raymarch_lsdlive(lsd_ro, lsd_cam, uv);
// vignetting (iq)
col *= 0.5 + 0.5*pow(16.0*q.x*q.y*(1.0 - q.x)*(1.0 - q.y), 0.25);
// fading out - end of the demo
//col *= 1. - smoothstep(120., 125., time);
fragColor = vec4(col, 1.);
}