@@ -256,17 +256,17 @@ fn drawUnifiedLensCap(
256256 // Top emitter scattering (Blue - note on)
257257 let distTop = length (uv - topPos - refractOffset * 0 .3 );
258258 let scatterTop = exp (- distTop * 5 .0 ) * topEmitter . a ;
259- subsurfaceGlow += topEmitter . rgb * scatterTop * 0 .8 ;
260-
259+ subsurfaceGlow += topEmitter . rgb * scatterTop * 3 .5 ;
260+
261261 // Middle emitter scattering (Note color - steady)
262262 let distMid = length (uv - midPos - refractOffset * 0 .5 );
263263 let scatterMid = exp (- distMid * 4 .0 ) * midEmitter . a ;
264- subsurfaceGlow += midEmitter . rgb * scatterMid * 1 .5 ;
265-
264+ subsurfaceGlow += midEmitter . rgb * scatterMid * 5 .0 ;
265+
266266 // Bottom emitter scattering (Amber - control)
267267 let distBot = length (uv - botPos - refractOffset * 0 .3 );
268268 let scatterBot = exp (- distBot * 5 .0 ) * botEmitter . a ;
269- subsurfaceGlow += botEmitter . rgb * scatterBot * 0 .8 ;
269+ subsurfaceGlow += botEmitter . rgb * scatterBot * 3 .5 ;
270270
271271 let totalGlow = topEmitter . a + midEmitter . a + botEmitter . a ;
272272 let diffusion = exp (- radial * 3 .0 ) * totalGlow * 0 .3 ;
@@ -285,10 +285,11 @@ fn drawUnifiedLensCap(
285285 // Edge alpha
286286 let edgeAlpha = smoothstep (0 .0 , aa * 2 .0 , - dBox );
287287
288- // Glass transparency
288+ // Glass transparency — reduce opacity when active emitters are lit
289289 let diodeVisibility = diodeMask * 0 .55 ;
290290 let baseAlpha = 0 .72 + 0 .28 * fresnel ;
291- let alpha = mix (baseAlpha , 0 .32 , diodeVisibility ) * edgeAlpha ;
291+ let emitterLift = clamp (topEmitter . a * 0 .4 + botEmitter . a * 0 .4 , 0 .0 , 0 .7 );
292+ let alpha = mix (baseAlpha , 0 .32 , min (diodeVisibility + emitterLift , 0 .9 )) * edgeAlpha ;
292293
293294 // Directional lighting
294295 let lightDir = vec3 <f32 >(0 .4 , - 0 .7 , 0 .6 );
@@ -303,7 +304,7 @@ fn drawUnifiedLensCap(
303304 let diodeBlend = diodeMask * (1 .0 - alpha * 0 .65 );
304305 finalColor = mix (finalColor , combinedDiode , diodeBlend );
305306 finalColor = mix (finalColor , litGlassColor , alpha );
306- finalColor += subsurfaceGlow * 2 .0 ;
307+ finalColor += subsurfaceGlow * 5 .0 ;
307308
308309 // Concentrated glow around active emitters
309310 if (midEmitter . a > 0 .05 ) {
@@ -342,11 +343,6 @@ fn fs(in: VertexOut) -> @location(0) vec4<f32> {
342343 let kick = uniforms . kickTrigger ;
343344 let beat = uniforms . beatPhase ;
344345
345- // Hardware Layering: Discard pixels over UI
346- if (in . position . y > uniforms . canvasH * 0 .88 ) {
347- discard ;
348- }
349-
350346 // Smooth playhead position
351347 let playheadStep = uniforms . playheadRow - floor (uniforms . playheadRow / 64 .0 ) * 64 .0 ;
352348 let rowDistRaw = abs (f32 (in . row % 64u ) - playheadStep );
@@ -414,12 +410,12 @@ fn fs(in: VertexOut) -> @location(0) vec4<f32> {
414410 var topIntensity = 0 .0 ;
415411 if (! isMuted ) {
416412 if (ch . trigger > 0u ) {
417- topIntensity = 1 .0 + bloom ;
413+ topIntensity = 2 .5 ;
418414 } else if (playheadActivation > 0 .5 ) {
419- topIntensity = playheadActivation * 0 .6 ;
415+ topIntensity = playheadActivation * 1 .2 ;
420416 }
421417 }
422- let topColor = blueColor * (1 .0 + bloom * 2 .0 );
418+ let topColor = blueColor * (1 .5 + bloom * 2 .0 );
423419
424420 // EMITTER 2 (MIDDLE): Steady Note Color
425421 // Shows pitch color steadily whenever there's a note (does NOT blink)
@@ -443,9 +439,9 @@ fn fs(in: VertexOut) -> @location(0) vec4<f32> {
443439 let amberColor = vec3 <f32 >(1 .0 , 0 .55 , 0 .1 );
444440 var botIntensity = 0 .0 ;
445441 if (! isMuted && hasExpression ) {
446- botIntensity = 0 .8 + bloom ;
442+ botIntensity = 2 .0 ;
447443 }
448- let botColor = amberColor * (1 .0 + bloom * 2 .0 );
444+ let botColor = amberColor * (1 .5 + bloom * 2 .0 );
449445
450446 // --- DRAW UNIFIED LENS CAP ---
451447 let lensUV = btnUV - vec2 <f32 >(0 .5 , 0 .5 );
@@ -461,10 +457,19 @@ fn fs(in: VertexOut) -> @location(0) vec4<f32> {
461457
462458 finalColor = mix (finalColor , unifiedLens . rgb , unifiedLens . a );
463459
464- // External glow when note is playing
460+ // External glow when note is playing on playhead
465461 if (playheadActivation > 0 .5 && hasNote ) {
466462 let pulseColor = mix (blueColor , amberColor , 0 .5 + 0 .5 * sin (beat * 6 .2832 ));
467- finalColor += pulseColor * playheadActivation * 0 .15 ;
463+ finalColor += pulseColor * playheadActivation * 0 .4 ;
464+ }
465+
466+ // Blue LED: bloom-independent external glow for active channels
467+ if (! isMuted && ch . trigger > 0u ) {
468+ finalColor += blueColor * 0 .4 * exp (- length (p ) * 3 .5 );
469+ }
470+ // Amber LED: bloom-independent external glow for expression data
471+ if (! isMuted && hasExpression ) {
472+ finalColor += amberColor * 0 .3 * exp (- length (p ) * 3 .5 );
468473 }
469474 }
470475
0 commit comments