Inne projekty

Kursor-metaball

Jeden plik, surowy WebGL, zero bibliotek.

Problem

Sprawdzić, ile da się wycisnąć z przeglądarki bez ani jednej zależności.

Rozwiązanie

Jeden plik HTML, który otwiera się prosto z dysku. Maska kursora powstaje z trzydziestu dwóch punktów śladu sklejonych funkcją gładkiego minimum, a rozszczepienie kolorów bierze się z policzenia tej samej maski trzy razy, po razie na kanał. Tekst nie jest elementem strony, tylko teksturą pokrycia liczoną na osobnym canvasie.

Co robi

  • Ślad kursora z 32 punktów sklejany funkcją gładkiego minimum
  • Aberracja chromatyczna z trzykrotnego liczenia maski z przesunięciem na kanał
  • Tekst jako tekstura pokrycia, nie element strony
  • Dwa procent ziarna filmowego — tyle wystarczy, żeby gradienty nie układały się w pasy
  • Obsługa ograniczonego ruchu i dotyku
  • Cztery warianty efektu w osobnych plikach

Na czym zbudowane

  • Surowy WebGL1 plus canvas 2D, jeden samowystarczalny plik HTML
  • Zero npm, zero CDN, zero bibliotek
  • Tekst rysowany na offscreen canvas jako maska pokrycia, potem tekstura
  • Ślad kursora: 32 punkty, tłumienie 0.15, łańcuch 0.34
  • Blob jako SDF sklejany wielomianowym smooth-min, k rośnie z prędkością
  • Jedno wywołanie rysujące na klatkę, TRIANGLE_STRIP, cztery wierzchołki

Jak to wygląda

Co to zmieniło

  • Lab: nigdzie nie wdrożone, więc żadnego wyniku poza samym plikiem nie ma
  • Zero zależności znaczy zero kosztu utrzymania: plik nie starzeje się razem z node_modules i otwiera się z dysku
  • Cztery warianty efektu; założenie projektowe: jedno wywołanie rysujące na klatkę, pomiaru w plikach brak

Stack

  • WebGL1
  • canvas 2D
  • zero npm
  • zero CDN

Historia

Brief napisany do samego siebie, z kryterium akceptacji wyrażonym liczbą: sześćdziesiąt klatek na sekundę w 1440p, jedno wywołanie rysujące, cztery wierzchołki. Pomiaru w plikach nie ma, więc nie twierdzę, że próg został osiągnięty.