Jeżeli ktoś jest zainteresowany sześcianami kręcącymi się na nieprawdziwych pseudo-Amigach to zapraszam do lektury “krótkiego” opisu tego co przez ostanie 2 miesiące zajmowało mi cały wolny czas.
Tło historyczne
2002 rok - środek specyficznego okresu w amigowym świecie. Komercyjna świetność amigowych rozwiązań to już historia, a retro mody jeszcze nie widać na horyzoncie. Większość bardziej dalekowzrocznych i niezaślepionych Amigowców ma już za sobą przynajmniej kilka reinstalacji Windowsa na swoich pecetach. :) ;) Jadąc pociągiem na jakieś polskie party siedzi się samotnie w przedziale, a nie jak jeszcze 5 lat wcześniej, wśród kilkudziesiąciu (czasem nawet za bardzo) rozbawionych wyznawców kręcących się sześcianów. ;)
Nieliczne niedobitki trzymające się amigowych rozwiązań mają już serdecznie dosyć, połatanego i rozbudowanego do absurdalnych postaci, klasycznego sprzętu działającego pod kontrolą pozszywanego aminetowymi protezami systemu operacyjnego działającego na 68040 czy 68060 pomimo tego, że w maszynie siedzi PowerPC 603 czy 604. Zaczynają się przesiadki na tak zwane rozwiązania “next generation”, czyli maszyny: Pegasos I z MorphOS i AmigaOne z AmigaOS4. Oba sprzęty mają swoje wady (a nawet błędy), systemy operacyjne raczkują i mają pewne braki. Ale raczkują już na procesorach PPC G3, które mocno siedzą na zgrabnych, nowych płytach głównych. Wreszcie po raz pierwszy od czasów Commodore coś mocnego co nie jest konstrukcją przypominającą domek z kart.
Przez cały początkowy czas istnienia AmigiONE planowałem jej zakup ale czekałem aż będzie miała AmjgaOS4, bo Linuxem nie byłem zainteresowany. :) Jednak zanim pojawił się OS4 to (bardzo mocna wówczas grupa polskich użytkowników MorphOS na IRCu i AmigaShow przekonała mnie do konkurencyjnego rozwiązania. Ale to dopiero w 2003. Wtedy kupiłem pierwszego Pegasosa G3 600 z Voodoo 3. W 2002 roku ciągle jeszcze katowałem Amigę 1200 z Blizzardem na którym siedziały procesory 68060 50MHz i PowerPC 603e 160MHz, BVision3D, a towarzyszyły mu: FastATA, Mroocheck, HDD, CD-RW, SVGA, FlickerFixer, stacja HD, Epson 460, modem 56kpbs z całodobowym stałym łączem. Maszyna zgrabnie opakowana w obudowę E/Box cały czas sprawdzała się całkiem nieźle i pozwalała spełniać swoje marzenia.
Układ Permedia 2 w jaki wyposażona jest BVIsion3D pozwałał mi wtedy już od ponad 2 lat bawić się programowaniem grafiki 3D z użyciem API OpenGL bez dotykania znienawidzonej jedynie „słusznej” platformy. ;) Amigowa StormMESA (i nieco później MiniGL) bardzo przypadły mi do gustu i na przełomie 1999/2000 pozwoliły zacząć zabawę, która prawie nieprzerwanie trwa do dzisiaj (nadal przede wszystkim na ami-platformach).
W 2002 roku w Niemczech zorganizowano ostatnią edycję jednego z najważniejszych europoejskich (czyli także i światowych) demoscenowych party - Mekka & Symposium. Powstała wtedy grupka Scenic w skład której wchodzili tylko ludzie zajmujący się grafiką. Wpadli oni na pomysł żeby zrobić demo z myślą właśnie o Mekka & Symposium 2002. Nie wiem jak to się stało (pewnie za sprawą brata - Caro) ale ja miałem zająć się wyprawieniem ich grafiki 2D i 3D w „riltajmowy” ruch. Przy pomocy moich, wtedy bardzo skromnych, możliwości i umiejętności faktycznie ich wizja zaczęła się ruszać rozgrzewając układy PowerPC i Permedia 2 w ówczesnych rozbudowanych Amigach. Stroną audio zajął się, słynny na demoscenie od wielu lat i podziwiany przez wszystkich Jazzcat. Stworzył muzykę idealnie pasującą do klimatu jaki wymyślili sobie ludzie ze Scenic.
Demo pt. „Kheshkhash” w wersji na Amigę z PPC i akceleratorem 3D pojechało na Mekka Symposium 2002 gdzie zdobyło 5 miejsce w Amiga demo compo. Ciekawe, że demo to było dokańczane właściwie bez udziału programisty, bo ja na party nie pojechałem. Plik wykonywalny musiałem tak przygotować żeby reagował na zmieniane przez Scenic pliki scen, obiektów, tekstur. Dodatkowo wiązało to ręce przy realizacji kłębiących się w głowach Scenic pomysłów.
Produkcja nie była wtedy (i tym bardziej nie jest dzisiaj) niczym nadzwyczajnym od strony technicznej. Demo było za mało dynamiczne, trochę wieje nudą, a płaskie poteksturowane ścianki z czasem zaczęły wyglądać wręcz groteskowo (jak makieta miasteczka do kręcenia starych westernów). Jednak według niektórych, całość jakoś się tam broniła. Myślę, że za sprawą grafiki i muzyki.
Mijały lata, a nawet dziesięciolecia. :) Coraz trudniej było znaleźć sprzęt, który byłby w stanie w sensowny sposób uruchomić demo dla AmigiPPC z 3D realizowanym przy użyciu nierozwijanych od lat bibliotek StormMESA (od Haage&Partner). Nie było też możliwości zgrania takich dem do płynnego video w wysokiej rozdzielczości. Mnie ciągle męczył fakt, że demo “Kheshkhash” powinno być zgrabniej złożone, a przynajmniej przeniesione na MiniGL od Hyperionu z jakąś zgrabniejszą podstawą, która nie byłaby oparta na prymitywnej, multiplatformowej bibliotece GLUT będącej raczej rozwiązaniem dla dzieci uczących się programowania. :) Ale niestety do takiej modyfikacji “Kheshkhash” nigdy nie doszło.
Teraźniejszość
20 lat później, niedługo przez party Decrunch 2022, zgłosił się do mnie Fusko, który w 2002 współtworzył grafikę do “Kheshkhash”. Zapytał czy dałoby się jakoś “ożywić” to demo. Sprawić żeby działało na dzisiejszych rozwiązaniach, które dla uproszczenia nazywane są czasem (mniej lub bardziej słusznie) AmigamiNG (AmigaOS4, MorphOS, AROS).
Rzuciłem okiem w ten nieszczęsny kod z 2002 roku i załamałem ręce. Gdyby nie fakt, że sam go napisałem to krzyknąłbym „Kto panu to robił?!”. Ale ten prymitywny kod nie był najgorszym elementem. Dziubanie się w tych dziwnych formatach plików, które wtedy sobie wymyśliłem to też żadna przyjemność i (pomimo posiadania kodu źródłowego) przypominałoby to bardziej crackowanie niż programowanie. :) Zresztą nawet po ogarnięciu tych formatów wprowadzenie jakiejkolwiek zmiany byłoby katorgą.
Mino to chciałem odświeżyć “Kheshkhash”. Zaproponowałem więc Fusko inne rozwiązanie. To demo jest tak proste (zwłaszcza z mojego dzisiejszego punktu widzenia), że mogę je zrobić jeszcze raz. Obiekty, sceny, ścieżki ruchu kamer, zmienne w czasie parametry - wszystko szybciej zrobię jeszcze raz w Blenderze i wyeksportuję swoimi pluginami do moich obecnych rozwiązań (szumnie nazwanych silnikiem) niż miałbym modyfikować te z 2002 roku. Dałoby to nieograniczone możliwości poprawek, modyfikacji, pełną kontrolę nad całością i wszystkie zalety tego co czego dochrapałem się przez ostatnie 20 lat. No i obiecałem, ze zaraz po Decruch 2022 usiądę do tego i zobaczę jak będzie mi szło.
Szło mi nadwyraz sprawnie, bo w latach 2017-2022 wypracowałem sobie jakaś technologię, szkielet budowano tych bezużytecznych produkcji demoscenowych. Jak zwykle pewne elementy trwały tydzien chociaż mogły trwać 2 godziny. :) A to dlatego, że niektóre powtarzalne elementy staram się robić tak żeby były re-używalne i zawierały się w module zwanym silnikiem, a nie tak po prostu wklepane w kod dema. Czasy radosnej, niekontrolowanej żonglerki wskaźnikami minęły nawet na Amidze. ;) Zapewne nie widać tego z zewątrz, ale każda kolejna produkcja (nawet słaba) wnosi coś do wspólnej partii kodu i wpływa jakoś na przyszłe programy, a także powstałe wcześniej, ale zaktualizowane do nowej wersji silnika. Zachowanie pewnej konwencji, kompatybilności wstecznej, portowalności znacznie wydłuża czas dodawania nowych rzeczy. Ale to procentuje w przyszłości. Zwraca się wielokrotnie i to wcześniej niż można byłoby się tego spodziewać. Wiele razy dziękowałem sobie z przeszłości, że chciało mi się coś kiedyś napisać w sposób uniwersalny. A także przeklinałem się za to, że czegoś w ten sposób nie napisałem. :)
Odkąd pod MorphOS jest pełnoprawny system kontroli wersji Git oraz Flow Developement Studio to moje środowisko stało się fajniejsze niż kiedykolwiek sobie to wyobrażałem. Grafika 2D i 3D przygotowywana jest prawie w całości pod macOS więc kontrolowana wymiana plików między trzema komputerami (MorphOS/PPC, macOS/ARM i czasem macOS/x64) to podstawa. Środowisko miałem ogarnięte, wiedziałem co i jak mam robić, motywacja była, a wbrew pozorom spać w nocy nie trzeba. ;)
Nic tylko robić! Wobec tego robiłem…
Oryginalną muzykę zrzuciłem sobie DigiRollerem do pliku WAVE i porówując dźwięk “wizualnie” z tym co się dzieje na ekranie spisałem dokładne czasy zmian scen, ujęć, długości ujęć. Tak żeby było zgodnie ale nawet bardziej dokładnie niż w 2002. Tym bardziej, że dzisiaj mam większe możliwości, pełną kontrolę nad wczytywanymi plikami, przygotowaniem ich przed rozpoczęciem renderowania obrazu (nazywam to resource managerem). Teraz to ja jestem panem technologii, a nie jak w 2002 kiedy to technologia robiła ze mną co chciała, a ja udawałem, że nad nią panuję.
Ścieżki kamer i nieliczne ruchy obiektów w tym demie są banalnie proste, liniowe. Ale mimo wszystko musiałem poświęcić kilka dni (czy raczej nocy) żeby w miarę wiernie odtworzyć wersję z 2002 roku.
Robiąc obiekty też pozwoliłem sobie na pewne optymalizacje, inne metody ich stworzenia, teraz mogłem dorzucić trochę więcej ścianek, bo nawet słabe G3 umiera ze śmiechu na widok tak prostej geometrii.
Obrazki starałem się zachować oryginalne. Zresztą trudno żebym narysował lepsze. :) :) Jednak w niektórych teksturach poprawiłem kanały alpha i antialias, który w pewnych miejscach wręcz raził w wersji z 2002. Jakieś 3-4 proste tekstury (chmury, słońce) zrobiłem jeszcze raz, dodałem teksturę drewna w miejscu gdzie były płaskie brązowe ścianki. W niektórych teksturach podbiłem nieco rozdzielczość przy pomocy algorytmu Machine Learning w Pixelmator Pro (macOS).
Pod obiektem fajki dorzuciłem cień, zabawny stos poziomych przezroczystych ścianek udających dym zastąpiłem particlami ze swojego systemu cząstek.
Scroll końcowy zroibłem w sposób “normalny” czyli przy pomocy mojego aktualnego (całkiem rozbudowanego) portowalnego GUI i zrobiłem, że obazki w tle zmieniają się cyklicznie, a nie tylko raz (bo oba obrazki zasługują na tyle samo uwagi).
Gdy zrobiłem wszystko to próbkę w postaci niepublicznego filmu na YouTube podesłałem Fusko z zapytaniem czy chciałby coś dodać, zmienić, odjąć. Fusko wspomniał, że w 2002 roku w scenie ze świątynią i drzewami wejście miało być otwarte i z wnętrza świątyni miał bić blask jakieś światło. Jednak tego detalu nie udało się zrobić ze względu na brak czasu (jak to zwykle bywa przed każdym party). No więc postanowiłem dorobić ten element, bo nie jest to nic trudnego czy bardzo czasochłonnego nawet dla kogoś z moimi umiejętnościami w zakresie modelowania 3D.
To samo video obejrzał Jazzcat - autor muzyki do pierwotnej wersji dema. Uznał, że skoro już pojawiła się taka inicjatywa to on chętnie zrobiłby lekki remaster tego utworu. Ja na to jak na lato (które bardzo lubię), a Jazzcat jak powiedział tak zrobił. Kheshkhash remastered gra już po nowemu. Chociaż trzeba się zagłębić w dźwiękowe szczegóły (albo mieć słuch Jazzcata) żeby usłyszeć różnice. Słoń, który nadepnął mi na ucho był wyjątkowo ciężki i zrobił to wielokrotnie. Dlatego tak po pierwszym słuchaniu nowej wersji nie stwierdziłem znaczących różnic. Ale porównywałem sobie oba utwory słuchając fragmentami po ok. 20-30 sekund i faktycznie są różnice. Ale całość to nadal tamten utwór pt. „Fusko goes to Shanghai”. I bardzo dobrze, bo takie było założenie.
Kheshkhash 2.0 w tej chwili istnieje tylko w wersji dla MorphOS (i robocza, niepubliczna wersja dla macOS istniejąca tylko z powodów technologicznych). Ale to raczej nie jest ostatnie słowo i może pojawić się na innych platformach o min. takich możliwościach programowaych i sprzętowych jakie daje TinyGL z oficjalnej wersji MorphOS 3.17.
Od strony geometrycznej czy oliczeniowej dla prostego G4 to demo nie jest absolutnie żadnym wyzwaniem. Spokojnie mogą działać 4 takie dema równocześnie. Ale te duże teksturowane ścianki renderowane w wysokich rozdzielczościach trochę męczą tak zwany “fillrate” i karta graficzna trochę sapie. Jednak na moim laptopowym G4 1,67GHz w PowerBooku z laptopowym Radeonem w 1440x960 (24 bit) cały czas jest ok. 60 fps.
Demo w wersji wykonywalnej dla MorphOS (nie wymaga aktualizacji TinyGL, wystarczy to co jest w MorphOS 3.17) jest dostępne na MorphOS Storage:
https://www.morphos-storage.net/?id=1840416
Na Aminecie pojawi się pewnie w ciągu kilku dni.
Video w 1920x1080, 60 FPS jest na YouTube:
https://youtu.be/7-cM6VD0Xpc
Lista zmian w porównaniu z wersją sprzed 20 lat:
- Kod w 100% przepisany in C/C++ (MorphOS 3.16 SDK, GCC 11).
- Demo oparte na tzw. Encore Engine w wersji 4.5.0 (2022).
- Tak samo jak w 2002 roku rendering obrazu oparty na tzw. "fixed pipeline" (czyli bez użycia shaderów).
- Natywna wersja dla MorphOS PowerPC.
- Muzyka zremasterowana przez autora pierwotnej wersji, czyli samego Jazzcata.
- Wszystkie sceny, obiekty ścieżki animacji kamer i obiektów stworzone od początku Blenderze 3D i wyeksportowane do odpowiednich formatów własnymi pluginami.
- Dodane światło i wnętrze w scenie ze świątynią i drzewami - coś co (zgodnie z informacją od Fusko) było planowane ale nie zostało zrealizowane w 2002.
- Dodany cień w scenie z fajką.
- Dym z fajki zrobiony systemem cząstek zamiast śmiesznym stosem przezroczystych poziomych ścianek. :)
- Dodane obroty flar w części zwanej Good-Bad part.
- Ta wersja używa grafiki z pierwszej wersji dema ale rozdzielczość kilku tekstur została podbita algorytmem machine learning (Pixelmator Pro dla macOS).
- Poprawione kanały alpha i antialias w niektórych teksturach.
- Starożytna mgłaper-vertex została zastąpiona czymś co udaje mgłę per-pixel.
- Scroll końcony zrobiony przy pomocy systemu GUI z Encore Engine.
- Dodane cykliczne pojawianie obrazków w scrollu.
- Standardowo dorzuciłem okno pozwalające wybrać podstawowe parametry dema.
- Użytkownik ma możliwość przełączania dema między trybami okno i pełny ekran podczas trwania dema (RAMiga+F).
- Wersja dla MorphOS odtwarza muzykę przy pomocy Reggae (MorphOS multimedia framework) i użytkownik może wybrać między odtwarzaniem z pamięci lub z pliku (bez ładowania do pamięci).