← Labs
Stable demo
Dither wave field
Production hero substrate: R3F plane + GLSL fBm waves + Bayer dither post, deferred after first paint.
- What is being tested?
- Whether a scroll- and pointer-driven dithered WebGL field can brand a portfolio without blocking LCP or accessibility.
- Why does it matter?
- Immersive differentiation must remain optional; crawlers and reduced-motion users still need the message.
- What is currently working?
- Shader field implemented (R3F + GLSL dither). Homepage hero now uses the command-center storyboard scene; this lab remains the dither substrate experiment.
- What remains incomplete?
- Dedicated GLB hero asset from Blender authoring pipeline not yet shipped; dither no longer mounts on `/` by default.
- Constraints
- No server GPU; visitor GPU only; must not own the SEO text path.
Stack
- Three.js
- R3F
- GLSL
- GSAP
Implementation
The dither wave field is an R3F + GLSL experiment (Bayer dither + fBm waves) with adaptive DPR capping and a static poster fallback when WebGL or motion preferences block the effect. The homepage hero now mounts the procedural command-center storyboard; this lab preserves the dither substrate for iteration and reference.
Source: src/components/hero/Dither.tsx. Brand and positioning copy on the homepage remain server-rendered HTML outside any canvas.
Source / repository (opens in a new tab)
Related: Selected work · Rust wgpu vs Three.js