@@ -68,21 +68,69 @@ fn sd_segment(p: vec2<f32>, a: vec2<f32>, b: vec2<f32>) -> f32 {
6868 return length (pa - ba * h );
6969}
7070
71- fn wireframe_bg (p : vec2 <f32 >) -> f32 {
72- var d = 1e9 ;
73- let centers = array <vec2 <f32 >, 3 >(
71+ // Returns a stylized intensity (0..1) for animated rings and lines.
72+ // It adds subtle orbital drift, pulsing radii, and moving dash highlights.
73+ fn wireframe_styled (p : vec2 <f32 >, t : f32 ) -> f32 {
74+ var m = 0 .0 ;
75+
76+ // --- Animated concentric rings ---
77+ let base_centers = array <vec2 <f32 >, 3 >(
7478 vec2 <f32 >(0 .62 , 0 .28 ),
7579 vec2 <f32 >(0 .80 , 0 .44 ),
7680 vec2 <f32 >(0 .70 , 0 .72 ),
7781 );
78- let radii = array <f32 , 3 >(0 .28 , 0 .18 , 0 .12 );
82+ let base_radii = array <f32 , 3 >(0 .28 , 0 .18 , 0 .12 );
7983 for (var i = 0 ; i < 3 ; i = i + 1 ) {
80- d = min (d , abs (length (p - centers [i ]) - radii [i ]));
84+ let w = 0 .7 + 0 .3 * f32 (i );
85+ let c = base_centers [i ] + 0 .01 * vec2 <f32 >(
86+ sin (t * (0 .8 + 0 .1 * f32 (i )) + 3 .0 * f32 (i )),
87+ cos (t * (0 .7 + 0 .13 * f32 (i )) + 1 .7 * f32 (i )),
88+ );
89+ let r = base_radii [i ] + 0 .03 * sin (t * (0 .9 + 0 .17 * f32 (i )) + 2 .1 * f32 (i )) + 0 .015 * sin (5 .0 * t + 0 .7 * f32 (i ));
90+
91+ let v = p - c ;
92+ let ed = abs (length (v ) - r );
93+ let ang = atan2 (v . y , v . x );
94+ // Angular dash pattern that orbits over time
95+ let dash = 0 .5 + 0 .5 * sin (ang * 14 .0 - t * (1 .6 + 0 .2 * f32 (i )) + f32 (i ));
96+ let thickness = mix (0 .010 , 0 .004 , 0 .5 + 0 .5 * sin (t * 1 .2 + f32 (i )));
97+ let mask = smoothstep (thickness , 0 .0 , ed ) * pow (dash , 1 .1 );
98+ m = max (m , mask * w );
8199 }
82- d = min (d , sd_segment (p , vec2 <f32 >(0 .55 , 0 .20 ), vec2 <f32 >(0 .85 , 0 .50 )));
83- d = min (d , sd_segment (p , vec2 <f32 >(0 .62 , 0 .28 ), vec2 <f32 >(0 .80 , 0 .44 )));
84- d = min (d , sd_segment (p , vec2 <f32 >(0 .72 , 0 .70 ), vec2 <f32 >(0 .86 , 0 .52 )));
85- return d ;
100+
101+ // --- Elegant connecting lines with traveling glints ---
102+ let segs_a = array <vec2 <f32 >, 3 >(
103+ vec2 <f32 >(0 .55 , 0 .20 ),
104+ vec2 <f32 >(0 .62 , 0 .28 ),
105+ vec2 <f32 >(0 .72 , 0 .70 ),
106+ );
107+ let segs_b = array <vec2 <f32 >, 3 >(
108+ vec2 <f32 >(0 .85 , 0 .50 ),
109+ vec2 <f32 >(0 .80 , 0 .44 ),
110+ vec2 <f32 >(0 .86 , 0 .52 ),
111+ );
112+ for (var i = 0 ; i < 3 ; i = i + 1 ) {
113+ // slight endpoint drift
114+ let a = segs_a [i ] + 0 .01 * vec2 <f32 >(sin (t * 0 .6 + f32 (i )), cos (t * 0 .7 + 2 .1 * f32 (i )));
115+ let b = segs_b [i ] + 0 .01 * vec2 <f32 >(cos (t * 0 .5 + 1 .3 * f32 (i )), sin (t * 0 .65 + f32 (i )));
116+
117+ // Distance to the segment
118+ let pa = p - a ;
119+ let ba = b - a ;
120+ let h = clamp (dot (pa , ba ) / dot (ba , ba ), 0 .0 , 1 .0 );
121+ let q = a + ba * h ;
122+ let ed = length (p - q );
123+
124+ // Position along the segment for dash animation
125+ let along = h ; // 0..1 along the segment
126+ let dash = 0 .5 + 0 .5 * sin (along * 30 .0 - t * (2 .3 + 0 .2 * f32 (i )));
127+ let glint = smoothstep (0 .96 , 1 .0 , sin (along * 6 .28318 - t * 1 .8 + f32 (i )));
128+ let thickness = 0 .006 ;
129+ let mask = smoothstep (thickness , 0 .0 , ed ) * (0 .65 * dash + 0 .35 * glint );
130+ m = max (m , mask * (0 .85 + 0 .15 * f32 (i )));
131+ }
132+
133+ return clamp (m , 0 .0 , 1 .0 );
86134}
87135
88136@fragment
@@ -92,13 +140,9 @@ fn fs_waves(inp: VsOut) -> @location(0) vec4<f32> {
92140 let cuv0 = (uv - 0 .5 ) * vec2 <f32 >(aspect , 1 .0 );
93141 let t = u . time ;
94142
95- // Background wireframe
143+ // Background base only (remove decorative rings/lines for clarity)
96144 let gold = vec3 <f32 >(1 .00 , 0 .86 , 0 .46 );
97- let d = wireframe_bg (uv );
98145 var col = vec3 <f32 >(0 .04 , 0 .055 , 0 .10 );
99- let line = smoothstep (0 .012 , 0 .002 , d );
100- // Make wireframe more visible; it will bloom subtly
101- col += gold * line * (0 .30 + 0 .60 * u . ambient );
102146
103147 // Three layered waves with parallax
104148 for (var L = 0 ; L < 3 ; L = L + 1 ) {
0 commit comments