Pierwsze uruchomienie programu to zwykle samouczek z dymkami i przyciskiem „Dalej" — a my chcieliśmy, żeby pierwsze minuty z Meduzą były opowieścią, którą ogląda się do końca, a nie instrukcją, którą się przeklikuje.
Nazwa przyszła sama: całą scenę prowadzi Nokturn Es-dur Chopina, więc pierwsze uruchomienie nazywa się po prostu Nokturn. Meduza pochodzi znad Bałtyku, dlatego Akt I dzieje się nad nocnym morzem. Ciemna woda, niski horyzont, a nad nim szara meduza z falującą białą obręczą — ciemny rdzeń, dwie przeciwbieżne aurory, obręcz z pięciu płatków. To ta sama sylwetka, która po onboardingu zostaje z Tobą jako orb na pulpicie: znak marki wprowadzamy w pierwszej scenie i już go nie zmieniamy. W tle gra Nokturn Es-dur op. 9 nr 2 Chopina, z nagrania w domenie publicznej. A rój orbów nurkuje w wodę dokładnie wtedy, kiedy pianista uderza w klawisz.
Zanim to zadziałało, sporo poszło na dno.
Zatonęło
Wariant wideo — wyrzucony w całości. Pierwsza wersja Aktu I to trzy warstwy plików wideo (niebo, woda, meduza) komponowane przez QPainter. Problem: QPainter składa klatki na CPU, a trzy dekodery pracujące równolegle dławiły maszynę. Efekt: zacinanie widoczne gołym okiem, najbardziej na falach, czyli dokładnie tam, gdzie płynność jest całą sceną. Nie łataliśmy tego — skasowaliśmy gałąź i przepisaliśmy scenę na warstwę webową: CSS i JavaScript w Chromium, renderowane na GPU. Płynnie od pierwszej klatki.
Pierwsze notki graficzne. Nad wodą miały unosić się nuty. Pokazaliśmy wersję roboczą i usłyszeliśmy wprost: „nuty nie są ładne". Słusznie. Zastąpiliśmy je grawerowanymi glifami, których pozycja na ekranie odpowiada wysokości dźwięku — im wyższa nuta w nagraniu, tym wyżej płynie glif.
Jak to działa
Fale liczymy, nie odtwarzamy. Woda w Akcie I to nie plik wideo, tylko suma sinusoid z domieszką 18% drugiej harmonicznej — to ona łamie idealną gładkość czystego sinusa i daje falom nieregularny, morski kształt. Pętle są bezszwowe: animacja wraca do punktu wyjścia bez cięcia, więc scena może trwać tak długo, jak długo na nią patrzysz.
# fala: podstawa + 18% drugiej harmonicznej
y = np.sin(faza) + 0.18 * np.sin(2 * faza)
Chopin dyryguje rojem. Nie mieliśmy pliku MIDI i nie chcieliśmy go mieć. Orby miały nurkować na uderzenia klawiszy z konkretnego, ludzkiego nagrania — z jego rubato, przyspieszeniami i oddechem, a nie z metronomicznej siatki. Zbudowaliśmy więc detektor: spectral flux wyłapuje momenty uderzeń (nagły przyrost energii w widmie), a HPS, czyli harmonic product spectrum, odczytuje wysokość dźwięku. Z samej fali dźwiękowej wyszło 157 nut. Zestaw testów sprawdzających trafność detekcji: 15/15. Zero MIDI w całym łańcuchu — każdy nurek w wodę to uderzenie klawisza odczytane wprost z nagrania.
Dźwięki od zera. 16 efektów — ocean, mewy, promień, dron, plinki pentatoniki — zsyntezowaliśmy w numpy, bez banków sampli i bez cudzych licencji. Każdy dźwięk to skrypt: można go odtworzyć, podkręcić parametr i wygenerować od nowa w sekundę.
Komisja bez taryfy ulgowej. Powołaliśmy czteroosobową komisję recenzentów: motion, wrażenie ogólne, grafika i QA. Zasada była jedna: iterujemy, aż każdy z czterech da minimum 9,5/10. Wersja v3 dostała 9,5 / 9,5 / 9,5 / 9 — i ta jedna dziewiątka wystarczyła, żeby wrócić do pracy zamiast ogłosić sukces. Próg przeszła dopiero kolejna iteracja. To wolniejszy tryb pracy, ale dzięki niemu nie musimy nikogo przekonywać, że onboarding „jest dopracowany" — mamy na to cztery niezależne oceny.
Co z tego masz
Pierwsze uruchomienie Meduzy ogląda się jak krótki film o Bałtyku, a nie klika jak formularz.
Ta funkcja gra w Largo — Nokturn zobaczysz przy pierwszym uruchomieniu w każdym planie, za 0 zł.