Oprócz tego to miłośnik Ferrari, pojazdów kosmicznych i Open Source, przeciwnik patentów na oprogramowanie, a także najbardziej wygadany spośród programistów. Niegdyś wielbiony przez wszystkich, dziś znienawidzony przez niektórych.

I said, ‘if I hadn’t been caught,’ goddamn it!

Carmack od wczesnych lat był zainteresowany komputerami i grami. Oczywistym problemem na początku lat osiemdziesiątych był dostęp do sprzętu. Czternastoletni Carmack postanowił, wraz z grupą kilku kolegów, ukraść szkolny komputer Apple II. W tamtym okresie miał nie tylko zadatki na komputerowego geniusza, ale i na niezłego chemika. Wykorzystując termit wypalił w szybie okna otwór, którym mógł dostać się do środka. Niestety, jego grubszy kolega nie zmieścił się i musiał otworzyć okno, włączając tym samym alarm.

John został aresztowany i wysłany na badania psychologiczne. Ocena psychologa brzmiała: “Chłopak zachowuje się jak chodzący mózg z nogami (…) nie wykazuje empatii wobec innych ludzi”. Oznaczało to roczny pobyt w zakładzie dla nieletnich.

Po powrocie do domu zaczął czytać o grafice 3D. Udało mu się zbudował drutowy model logo MTV wirujący na ekranie komputera. Kilka lat później zaczął tworzyć gry dla Softdisku, rozpoczynając tam współpracę z inną barwną postacią: Johnem Romero.

I’m good? Seriously?

John Carmack z Romero, Adrianem Carmackiem (nie są spokrewnieni) i Tomem Hallem stworzyli wewnątrz Softdisku mały zespół. Ten sam, który w 1991 miał stać się id Software.

W roku 1990 pecety były nadal marną platformą do gier. Każdy kto grał na NES-ie (u nas pod postacią klonów japońskiego Famicona, czyli Pegasusów), wiedział co sprawiało, że przygody wąsatego hydraulika potrafią być takie wciągające. Sidescrolling, czyli płynne przesuwanie zawartości ekranu. Konsole potrafiły to robić dzięki dedykowanemu sprzętowi, PC nie.

Skoro komputery były zbyt słabe by przesuwać całą zawartość ekranu, to może uaktualniać tylko te fragmenty, które tego wymagają? To wraz z kilkoma innymi optymalizacjami zostało nazwane przez Carmack “adaptive tile refresh”. Carmack, w ciągu zaledwie jednej nocy, z pomocą Halla przeportował na PC pierwszy poziom Super Mario Bros 3.

Niestety Nintendo nie było zainteresowane portem swojego hitu na pecety. Pozostało nic innego jak wykorzystać technologię Carmacka w autorskim tytule. Tak powstał Commander Keen in Invasion of the Vorticons, tytuł który jest zapisany w Księdze Rekordów Guinnessa jako pierwszy z płynnym przesuwaniem obrazu we wszystkich kierunkach. Gra okazała się sporym sukcesem, a jej twórcy stali się założycielami id Software.

John D. Carmack - rewolucja - dawne Id Software
Dawne id, John Carmack pierwszy od lewej (www.idwaregames.freehosting.bg)

John Carmack nie spoczywał na laurach. Następnym krokiem były trójwymiarowe gry z widokiem z pozycji pierwszej osoby. 3D nie było niczym nowym, korzystały z niego już wtedy profesjonalne symulatory. Wyzwaniem było uruchomienie czegoś podobnego na domowym sprzęcie za kilka tysięcy dolarów, a nie na na stacji graficznej za kilkaset. Carmack w pierwszej trójwymiarowej grze id Software wykorzystał Raycasting, nazywany czasami 2,5D.

John D. Carmack - rewolucja - Zasada działania raycastingu
Zasada działania raycastingu (Kieff, Wikipedia – Public Domain)

Mapy poziomów są całkowicie dwuwymiarowe. Złudzenie trójwymiaru uzyskiwano następujący sposób:

  1. Z punktu gdzie znajdował się bohater gry, w obszarze pola widzenia wysyłano promień.
  2. Napotykał on w pewnym momencie na linię symbolizującą ścianę.
  3. Na ekranie rysowana była pionowa linia, której położenie w poziomie zależało od kierunku wysłanego promienia, a długość od odległości między pozycją gracza i punktu przecięcia promienia ze ścianą. Im ta odległość była niższa, tym rysowano dłuższą linię.
  4. Procedurę powtarzano ze zmianami kąta wysyłanego promienia, tak aby odpowiadał on kolejnym kolumnom pikseli na ekranie. Jeśli gra działała w rozdzielczości 320×200, to trzeba było wysłać 320 takich promieni.

W ten sposób działał silnik Hovertank 3D, gry opracowanej przez Id w 1991 roku.

Ściany nie miały tekstur, musiały być zawsze pionowe, o jednakowej (w końcu nie było to “prawdziwe” 3D!) wysokości i prostopadłe do siebie. By poprawić złudzenie trójwymiaru, każda ściana rysowana była w innym kolorze. Podłoga i sufit symbolizowane były przez jednolite tło.

Niewiele czasu upłynęło, nim Carmack usprawnił swój silnik dodając tekstury. Te pojawiły się na ścianach w grze Catacomb 3D.

Gdy pod koniec 1991 roku niemal wszyscy udawali się na urlopy, Carmack dalej doszlifowywał silnik. Efekty można było zobaczyć w roku 1992, za sprawą Wolfensteina 3D, pierwszej pierwszoosobowej strzelanki. Nie było w nim czołgu (jak w Hovertank) ani magii (jak w Catacomb). Była za to broń palna i mnóstwo wrogich nazistów z psami, których trzeba było po prostu zabić. Dzięki modelowi dystrybucji shareware Wolfenstein zdobył ogromną popularność, do końca 1993 roku sprzedano ponad 100 000 sztuk.

Karta się odwróciła, Nintendo gardzące wcześniej (za czasów portu Super Mario Bros 3) id i technologią Carmacka, poprosiło o port Wolfensteina 3D na ich konsolę SNES. Co ciekawe, w grze pojawiły się ogromne szczury, bo zabijanie psów wydało się Nintendo niemoralne. Nikt za to nie przejmował się ludźmi, w tym przypadku nazistami.

The speed of light sucks.

Zaledwie rok po Wolfensteinie, w 1993, pojawia się Doom, tytuł zbudowany na nowym silniku Carmacka. Chociaż dalej używał raycastingu to tym razem:

  • ściany mogły mieć różną  wysokość i być ustawione względem siebie nieprostopadle,
  • tekstury pojawiły się także na podłogach i sufitach,podłogi mogą znajdować się na różnym poziomie,
  • pojawiły dynamiczne światła, zmiana jasności w zależności od odległości od gracza (to potęgowało mroczny klimat Dooma),
  • pojawiły animacje otoczenia.

Doom był też pierwszą grą Id korzystającą z drzew binarnych BSP. Przetrwały one w nieco zmienionej formie aż do dziś. Ciekawostką jest wykorzystanie w pracy nad Doomem komputerów NeXT.

Równie ważnymi nowościami były te niezwiązane z grafiką. Doom był grą stworzoną w samych założeniach jako otwarta i łatwa do modyfikacji. Po dziś dzień powstają nowe mody, jak np. rewelacyjny Brutal Doom czy niepoprawne Grezzo.

Pojawiła się też możliwość sieciowej gry wieloosobowej. Ten pomysł odniósł ogromny sukces. Doom nie tylko załamał ówczesną sieć podczas premiery (wersję shareware mógł ściągnąć każdy), ale i przez rozgrywkę wieloosobową. Szybko stał się najpopularniejszą aplikacją na komputery PC, pokonując nawet Windows. Pod koniec 1995 oceniano, że Doom znajduje się na 10 milionach komputerów.

Sukces Wolfensteina był niczym przy sukcesie Dooma. Świetna grywalność, immersja trójwymiarowego świata, dobra grafika przy małych wymaganiach sprzętowych i rozgrywka sieciowa. Czy Doom miał jakieś wady?

Story in a game is like a story in a porn movie. It’s expected to be there, but it’s not that important.

Carmack nie przywiązywał wagi do fabuły, a kolejne gry były bezmyślną rozwałką. Gdy zespół wykorzystywał dotychczasowy silnik podczas prac nad Doomem II, Carmack znów siedział nad technologią, która miała zaskoczyć wszystkich.

John D. Carmack - rewolucja - John przed monitorem Full HD
John przed monitorem Full HD (www.geekosystem.com)

W 1995 roku John Carmack pracował przed swym 28-calowym monitorem Full HD, tworząc kolejne części silnika Quake, pierwszej całkowicie trójwymiarowej gry id Software.

Quake początkowo nie miał być strzelanką, a grą wykorzystującą kinematykę odwrotną, gdzie protagonista unicestwia potwory za pomocą wielkiego młota. John nie widział jednak sensu implementacji takiej rozgrywki i postanowił stworzyć kolejnego FPS-a, co stało się przyczyną niepierwszego już rozłamu w zespole. Z pierwotnego pomysłu zostały średniowieczne zamczyska i wymyślne kreatury.

Carmack nie był już jedynym człowiekiem pracującym nad nowym silnikiem. Korzystał ze wsparcia Michaela Abrasha i Johna Casha. Początkowo programiści uważali, że nie warto w Quake implementować dynamicznego oświetlenia. Dopiero po obejrzeniu takiego efektu na konfererencji, w czasie ostatniego roku prac nad grą, podjęli odmienną decyzję.

Jak wspomina w swej Czarnej Księdze (Graphics Programming Black Book) Michael Abrash:

John zasugerował żebym spróbował dodać dodać wysokopoziomowy kod dynamicznego oświetlenia, (…) powiedziałem, że zrobię to jak skończę to nad czym pracuję, ale to może zająć dzień lub dwa. Chwilę później powiedział: “Zakładam się, że mogę uzyskać działające dynamiczne oświetlenie w mniej niż godzinę” i zanurzył się w kodzie. Godzinę i dziewięć minut później mieliśmy dynamiczne oświetlenie i obecnie trudno wyobrazić sobie Quake’a bez niego.

Vacation? I don’t need a vacation!

Wydany w 1996 roku Quake okazał się kolejnym wielkim sukcesem. Znów dzięki rewolucyjnej, tym razem naprawdę trójwymiarowej, grafice i jeszcze lepszemu trybowi multiplayer. Carmack nie miał zamiaru zwalniać, zaraz po premierze gry zaczął prace nad QuakeWorld, czyli wersją zoptymalizowaną wyłączenie do rozgrywki sieciowej. Podczas jednej z prób, główny serwer QuakeWorld poddał się pod naporem 4000 graczy jednocześnie.

W tym samym czasie Carmack bada możliwości różnych akceleratorów i API graficznych. Quake zostaje początkowo wydany jako pracujący czysto programowo, tylko z wykorzystaniem CPU, ale niedługo później powstaje GLQuake wspierający OpenGL.

3dfx pisze MiniGL, uproszczoną implementację OpenGL, tak by GLQuake mógł działać na Voodoo. John przewiduje, że domowe układy 3dfx są w stanie pokonać w GLQuake profesjonalne karty OpenGL za ponad 5000 dolarów.

Carmack próbuje też stworzyć D3DQuake, czyli wersję dla Microsoft Direct3D. Poddaje się widząc ułomność Direct3D:

Zacząłem używać OpenGL-a jakieś sześć miesięcy temu i projekt API, szczególnie łatwość użycia, zrobił na mnie wielkie wrażenie. Miesiąc temu przeniosłem Quake’a do OpenGL-a. To było bardzo przyjemne doświadczenie. Nie zajęło zbyt wiele, kod był czysty i prosty i dawał mi dobre miejsce do natychmiastowych testów moich nowych pomysłów.

Zacząłem portować glquake do Direct-3D IM z intencją nauki API i dokonania uczciwego porównania.

(…)

Direct-3D IM jest potwornie skopanym API. Powoduje cierpienie programistów go używających, bez przynoszenia znaczących korzyści. Sądzę, że nie ma ŻADNEGO segmentu rynku do którego nadawałby się D3D, OpenGL wydaje się działać wszędzie, od quake po softimage. Nie ma dobrego, technicznego powodu na istnienie D3D.

Na przestrzeni kolejnych lat, kolejne wersje Direct3D są oceniane coraz lepiej przez Johna Carmacka.

Silnik Quake okazuje się wielkim sukcesem także w innym wymiarze. Jest licencjonowany przez inne studia i staje się podstawą wielu gier: od Hexena II po Half-Life’a.

W tamtym okresie Carmack może już pozwolić sobie na swoją kolejną pasję: Ferrari. W swoich notatkach .plan narzeka, że jego ponad tysiąckonna (co często podkreślał, to moc na tylnych kołach) Testarossa już trzeci raz ukręciła wałek wejściowy (prawdopodobnie sprzęgłowy). W 1997 stwierdza, że ma zbyt wiele Ferrari i postanawia oddać jedno z nich, 328 z nowym silnikiem i malowaniem, zwycięzcy turnieju Quake’a.

Quake zostaje też wydany na Linuksa, ale za port odpowiada inny programista id, Dave D. Taylor. W roku 1999 natępuje upublicznienie kodu źródłowego  na licencji GPL, której wybór John Carmack motywuje tak w readme.txt zawartym w źródłach:

Nasze wcześniejsze wydania kodu były objęte innymi licencjami, które wykluczały komercyjne użycie, ale nie wymuszały dzielenia się kodem. To mogło powodować pewne nieszczęśliwe straty dla społeczności, jako wynik trzymania zamkniętych źródeł przez zespoły moderów (i czasami tracenie ich). (…)

Pierwotnym celem tego wydania jest rozrywka i edukacja, ale GPL pozwala też na wykorzystanie komercyjne (…).

Kod wszystkich kolejnych silników id jest upubliczniany kilka lat po premierze. Można znaleźć go na Githubie. Ciekawostką jest to, że kod Dooma da się skompilować tylko pod Linuksem, wersja dosowa wymaga biblioteki, która nie mogła być upubliczniona.

Congratulations to Epic, Unreal looks very good.

Gdy reszta zespołu zajmowała się doszlifowywaniem Quake’a 2, Carmack mógł zacząć badania nad nowymi rozwiązaniami, które miały znaleźć się w kolejnym silniku roboczo nazwanym Trinity.

Konkurencja jednak nie spała. Kilku bardzo utalentowanych deweloperów pracowało od 1995 w Epic MegaGames nad Unrealem. Wprowadzony do sprzedaży w 1998 roku, Unreal sprawił, że będący na nieco usprawnionym silniku poprzednika, niecały rok starszy, Quake 2 stał się z miejsca przestarzały. Po raz pierwszy inne studio dogoniło Carmacka i jego zespół. Początkowo Trinity były planowane na święta 1998, ale prace się odrobinę przeciągnęły. Ostateczne starcie miało się odbyć w 1999 roku między sieciowymi strzelankami Quake 3 Arena i Unreal Tournament.

Choć w przeszłości Carmack próbował alternatywnych metod renderingu m. in. wykorzystując woksele, to całkowicie nowy renderer Trinity znowu wykorzystywał “tradycyjne” wielokąty. Za to od samego początku wymagana była akceleracja sprzętowa. Planowane wymagania dla Trinity to Pentium 200 MMX, 32 MiB pamięci RAM i akcelerator zdolny przełknąć 50 megapikseli i 200 000 trójkątów na sekundę.

Wymóg akceleracji sprzętowej pod koniec XX wieku był dla graczy sporym problemem, szczególnie dla użytkowników Linuksa. Carmack osobiście poprawił sterownik Matroksa i wydał notatkę o optymalizacji sterowników dla Quake’a 3. Wyłożył też 10 000 dolarów na rozwój Mesy (otwartej implementacji OpenGL-a pod Linuksem). Dotacja pozwoliła programiście Keithowi Whitwellowi pracę nad Mesą w pełnym wymiarze godzin.

Silnik gry Quake 3 Arena przyniósł wiele nowości. Jedną z nich było zarządzanie poziomem detali (LOD), przez co obiekty oddalone od gracza mogły być mniej szczegółowe, z korzyścią dla prędkości wyświetlania. Kolejną sławną cechą było wykorzystanie krzywych Beziera w projekcie poziomów. Wszelkie łuki były najpierw opisywane krzywą, a dopiero potem aproksymowane do wielokątów. To, a także bumpmapping i maksymalna rozdzielczość pracy 2048×1536 zrobiły wrażenie na recenzentach.

W chwili pojawienia się Quake 3 Areny akceleratory nie były programowalne. Pomimo tego Quake 3 miał własny system shaderów, czyli krótkich skryptów odpowiadających za modyfikację tekstur, deformację siatek i niektóre efekty specjalne. Gra była wypełnionia takimi efektami – można było spotkać leżącą głowę, z prześwitującą okresowo czaszką (mapa Q3DM15), płynącą krew po podłodze, animowaną wodę i niebo, czy migające pentagramy.

Z innych ciekawostek warto wspomnieć, że id Tech 3 (ostateczna nazwa silnika) wspiera wieloprocesorowość i, że powrócono do uruchomiania modyfikacji niezależnych od platformy sprzętowej i programowej. Całą logikę gry trawi Quake Virtual Machine, ewentualnie można dokonać kompilacji do natywnej biblioteki dll/so z korzyścią dla wydajności (jak w Quake 2), ale tracąc niezależność od platformy.

Id Tech 3 był kolejnym silnikiem Carmacka, który został sprzedany wielu studiom zewnętrznym i ostatecznie wydany jako Open Source. Niemniej jednak musiał ustąpić popularności Unreal Engine. A pojedynek Quake 3 Arena kontra Unreal Tournament? Pozostaje chyba nierozstrzygnięty. Gry pojawi się w krótkim odstępie czasu i obie okazały się niemal doskonałe, zarówno w aspekcie grywalności jak i wprowadzonej technologii.

Quake 3 Arena do tej pory pozostaje ulubioną grą Johna Carmacka.

mmm…

Pomimo geniuszu, robotycznego “mmm…” kończącego wypowiadane kwestie czy dawnej opinii psychologa, istnieją przesłanki by sądzić, że Carmack jest zwykłym człowiekiem.

John Carmack spotkał Annę Kang na konferencji Quakecon 1997. Zgodził się sfinansować całkowicie damski turniej Quake’a, jeśli Anna zdoła zebrać odpowiednią liczbę uczestniczek. Sądził, że uda się znaleźć może 25 osób, Anna zebrała 1500. Zapoczątkowana w ten sposób znajomość doprowadziła trzy lata później do małżeństwa.

Innym mniej znanym epizodem z prywatnego życia Carmacka było spotkanie dziewietnastoletnim Kanadyjczykiem, Seumasem McNaullym. Był on śmiertelnie chory na ziarnicę złośliwą i chciał spełnić swoje marzenie, którym była wizyta w id.

Nie skończyło się na tym i zamknięciu licznika w Ferrari Carmacka. Seumas okazał się też świetnym programistą. Obaj twórcy zaczęli wymieniać między sobą informacje o programowaniu grafiki, John pracował wtedy nad Quake’iem 3, Seumas nad Tread Marks. Ta historia nie ma szczęśliwego zakończenia. McNaully zmarł w 2000, niedługo po odebraniu kilku nagród (w tym głównej) za Tread Marks na Independent Games Festival.

John D. Carmack - rewolucja - Seumas i Carmack obok Ferrari F50
John Carmack (z lewej) i Seumas McNaully obok Ferrari F50 (xona.com/seumasmcnally)

It’s done, when it’s done.

Kiedy zewnętrzne studia zajmowały się powrotem do przygód agenta Blazkowicza, czyli Return to Castle Wolfenstein tworzonym na silniku Quake’a 3, Carmack znów mógł pracować nad kolejną technologią przyszłości.

W przeciwieństwie do starszych silników, id Tech 4 nie był tworzony w C, a w C++. Silnik ten stał się podstawą Dooma 3.

Reboot dawnej marki nie odbył się bez wewnętrznego konfliktu. Jak w 2000 roku wspomina John Carmack:

Ultimatum zostało wystosowane do Kevina [Clouda – przyp. moje] i Adriana [Carmacka] (którzy posiadają ponad 50% firmy): pracujemy nad Doomem jako naszym następnym projektem, dopóki nas nie wylejecie.

Technologia Dooma 3 była całkowicie nowa pod każdym względem: grafiki, dźwięku czy fizyki.

I to wszystko zostało zaprogramowane wyłącznie w id, bez middleware’u firm trzecich (jak to było np. w przypadku konkurencyjnego silnika Source)  – dzięki temu możemy cieszyć się dziś id Tech 4 wydanym na licencji GPL.

Według Carmacka jego dotychczasowe gry wykorzystywały szereg sztuczek by uprościć pewne aspekty. Silnik Dooma miał być ich pozbawiony, tu renderer miał być jednolity, z zunifikowanym oświetleniem i wszystkim liczonym w czasie rzeczywistym.

By opisać różnicę: w Quake 3 wszystkie cienie i światła byłe przeliczone na etapie kompilacji mapy i nie mogły być zmieniane. Dynamiczne efekty świetlne miały bardzo ograniczone zastosowanie, np. jako poświata wokół Quada.

W 2002 wyciekła alfa Dooma 3. Znakiem rozpoznawczym gry stała się za to bujająca lampa, która wpływała na oświetlenie całego pomieszczenia.

Od razu można było zauważyć wysokie wymagania sprzętowe gry. Tak jak liczenie oświetlenia w Quake 3 potrafiło zajmować godziny podczas kompilacji mapy, tak tutaj musiało dziać się w czasie rzeczywistym. Wymagało to wielu optymalizacji.

Jedną z nich było wykorzystanie mapowania normalnych (ang. normal mapping). Dzięki niemu można było zastosować modele zbudowanee z małej liczby wielokątów, ale dalej sprawiające wrażenie szczegółowych.

John Carmack umieścił w korzystającym z id Tech 4 pięć trybów renderingu by zapewnić optymalną pracę na wielu kartach graficznych. Efekt najbardziej był widoczny przy porównaniu Radeona 9700 i GeForce FX 5800. Radeon korzystał ze standardowego trybu ARB2 uzyskując bardzo dobrą wydajność. Geforce po uruchomieniu ARB2 okazywało się o połowę wolniejsze, ale wystarczyło przełączyć Dooma w tryb NV30 przygotowany specjalnie z myślą o tym układzie by układ Nvidii prześcignął Radeona.

Ciekawostką jest fakt, że konkurencyjny Half-Life 2, korzystający z Direct3D, mógł wykorzystywać tylko ustandaryzowane funkcje układów graficznych, przez co Geforce serii 5000 nie miały najmniejszych szans z Radeonami, a sprawa zakończyła się małym skandalem (to już temat na inny artykuł).

Doom 3 ukazał się ze sporym opóźnieniem dopiero w roku 2004, mimo iż już alfa z 2002 wskazywała na niemal ukończony silnik. Projekt okazał się zbyt pracochłonny jak mały zespół id i spotkał się z mieszanym przyjęciem graczy.

Krytykowano przede wszystkim ciemne poziomy (protagonista mógł trzymać albo latarkę albo broń), niektórzy wręcz porównywali doznania z Dooma 3 do gry przy zgaszonym ekranie. Jedna z plotek głosi, że ograniczenie co do używania latarki było spowodowane zbyt słabymi komputerami dostępnymi w tamtym okresie. Włączenie dodatkowego źródła światła mogło zmniejszyć liczbę klatek na sekundę nawet o połowę.

Osiem lat później Carmack wspominał, że uruchamiając po tak długiej przerwie Dooma 3, zaczął sprawdzać grę szukając błędu w wyświetlaniu. Nie wierzył, że mogła być ona tak ciemna, bez żadnego dodatkowego rozproszonego oświetlenia.

Pomimo dość silnej krytyki, Doom 3 stał się najlepiej sprzedajacą grą w historii id. W 2005 powstał też film o tym samym tytule, który nie osiągnął jednak sukcesu. Ciekawostką była scena przeprowadzona w pierwszej osobie i obecność w filmie doktora Todda Carmacka (odniesienie do Johna Carmacka i innego pracownika id, Todda Hollensheada).

Carmack zapytany o film stwierdził, że może nie był warty Oscara, ale nie był też taki zły. Przynajmniej nie taki zły jak ekranizacje Super Mario Bros czy Double Dragon. Jednocześnie John skrytykował zmiany w fabule, gdzie inwazję demonów zastąpiły eksperymenty genetyczne.

Id Tech 4 doczekał się kilku znaczących usprawnień. W 2007, na potrzeby Enemy Territory: Quake Wars, został wzbogacony o tzw. megatekstury. Pomysł ten został rozwinięty w id Tech 5, wykorzystanym w ostatniej grze id, a zarazem pierwszej od czasów Dooma 3, czyli Rage z 2011. Ciekawostką jest też zaprezentowanie podobnego, ale już ustandaryzowanego rozwiązania w DirectX 11.2. Sześć lat po Quake Wars.

It’s a good thing Doom 3 is selling very well…

Na następną pecetową grę Id trzeba było czekać aż siedem lat. Nie oznacza to, że John Carmack próżnował. Zaczął coraz więcej uwagi przywiązywać do konsol, a nawet do telefonów komórkowych. Wydane na iPhone’a i iPada w 2010 Rage HD było prawdziwym pokazem tego co potrafi zrobić Carmack w kwestii optymalizacji silnika.

W międzyczasie coraz lepiej się wypowiadał o Direct3D, szczególnie o Direct3D9 w wersji używanej na Xboksie 360. Nie widział za to wystarczająco ważnych powodów przemawiających za Direct3D10 i 11. Na stronach poświęconym komputerom pojawiło się wiele prognoz, jakoby Carmack miał odejść od OpenGL uznając D3D za lepszy. Tak jednak się nie stało i kolejny silnik, Id Tech 5, dalej korzysta z OpenGL.

W jednym z wywiadów:

Ryan Shrout: Jest problem z API, programowym narzutem API. Widziałeś jakąś poprawę z DX 11 i wielowątkowymi sterownikami? Poprawiają się, czy ciągle nie daje on rady?

John Carmack: Nie pracujemy bezpośrednio z DX 11, ale rozmawiam z ludźmi pracującymi z nim i mówią oni, że może być pewna poprawa, ale ciągle istnieje całkiem gruba warstwa rzeczy między tobą a sprzętem. NVIDIA stworzyła pewne implementacje bezpośrednich odwołań do sprzętu, którymi możesz ominąć większość narzutu OpenGL, oraz kilka innych dróg na ominięcie ukrytych stanów OpenGL.

John D. Carmack - rewolucja - Michels ArmadilloXPrize
John Carmack z zespołem AA (blogs.dallasobserver.com)

John Carmack zaczął osiągać sukcesy na całkiem innym polu. Prowadzi on Armadillo Aerospace, firmę zajmującą się budową prototypów pojazdów kosmicznych. W 2008 lądownikowi Carmacka udało się przejść pierwszy etap zawodów Lunar Landing Challenge i wygrać główną nagrodę za ten etap. Rok później Armadillo Aerospace przystąpiło do kolejnego etapu, ale musiało się zadowolić tylko nagrodą za drugie miejsce.

Burn the heretic!

Nastał rok 2011, premierę miała długo wyczekiwana i zarazem pierwsza nowa marka od 1996 roku: Rage. Wiele się zmieniło. Carmack nie był już niezależny, Id zostało przejęte przez Zenimax, zespół znacznie się rozrósł, jednocześnie tracąc wielu długoletnich pracowników Id.

Gra nie miała być już prostą korytarzową strzelanką, a hybrydą, z częściowo otwartym światem i elementami wyścigów samochodowych. Id Tech 5 był też całkowitym odwrotem od koncepcji głoszonych w id Tech 4. Miał przede wszystkim pracować w 60 kl./s i wyglądać dobrze niezależnie od sprzętu: czy był to PC, czy Playstation 3 czy Xbox 360 i niezależnie od tego co się w danym momencie dzieje w grze. Te założenia udało się spełnić, ale jednocześnie programiści (zespół 15-18 osób) pod wodzą Carmacka musieli pójść na szereg kompromisów.

Rozwinięto koncepcję “megatekstur” znaną z Enemy Territory: Quake Wars. Tym razem cały poziom nie był pokryty jedną teksturą o rozmiarze 32 000 x 32 000 a 128 000 x 128 000. Była ona strumieniowana w małych fragmentach, rzędu 4096 x 4096, zależnie od aktualnych potrzeb. To przynosiło ogromną oszczędność pamięci, ale stało się źródłem problemów na niektórych konfiguracjach sprzętowych. Powolne pojawianie się tekstur, gdy komputer używał kart AMD Radeon spowodowało gniew fanów i niekończący się strumień obelg płynący w stronę Carmacka. Dodatkowo id zdecydowało się ukryć większość opcji konfiguracyjnych, przez co trzeba było zdać się na autodetekcję lub zacząć grzebać w konsoli. Ostatecznie poprawione sterowniki AMD i pewne usprawnienia w samym Rage zlikwidowały problem.

Nawet nie mający tego problemu gracze byli niezadowoleni z rozdzielczości tekstur jakie serwuje im gra. Na drodze kompromisu, Rage ograniczono do 25 GB, z czego większość zajmowały tekstury. Jak duża musiała by być gra by wyglądały one dobrze? Cóż, nieskompresowana wersja robocza zajmowała około terabajta przestrzeni dyskowej.

Podczas gdy w Doomie 3 wszystko było dynamiczne i kalkulowane w czasie rzeczywistym, w Rage wrócono do statycznego oświetlenia i cieni. Było ono liczone w czasie kompilacji mapy, która to znów (niczym za czasów Quake 3) zajmowała wiele czasu farmy komputerów. Więcej, Rage nie korzystało z multiteksturingu, używanego przynajmniej od czasów Quake 2. Bo, po co, skoro wszystko jest zawarte w jednej, wcześniej przygotowanej, teksturze?

Takie podejście miało jedną wadę. Interakcja z otoczeniem w Rage jest niemal zerowa. Trudno cokolwiek zniszczyć czy przesunąć.

Nic dziwnego, że przemówienie Johna Carmacka na QuakeCon 2012 było wyjątkowo długie.

Od 45 minuty tego, trwającego 3 godziny i 36 minut, przemówienia wypowiedział on też kilka słów na temat Linuksa. Słów, które zostały potem potwornie znadinterpretowane przez media. A brzmiały one przecież tylko tak:

Nie ma tak wielu osób zainteresowanych płaceniem za gry na tej platformie.

Była to czysta obserwacja wynikająca z dawnych doświadczeń w sprzedaży pudełkowej wersji Quake 3 i popularności Quake Live (głównie w odniesieniu do Maka, na którym id udaje się zarabić) i nic nie mówiła o nastawieniu użytkowników Linuksa do kupowania gier. Tymczasem media internetowe przedstawiły Carmacka jako wroga Linuksa, co, znając jego historię, nie jest oczywiście prawdą. Za to niemal nikt nie zwrócił uwagi na ciepłe słowa Carmacka o otwartych sterownikach Intela i udostępnianiu specyfikacji układów przez tego producenta.

Na domiar złego Id pod kierownictwem Zenimax przestało wydawać linuksowe porty. Ani Doom 3 BFG, ani Rage się nie pojawiły na tym systemie. Pytanie Carmacka “dlaczego nie użyć Wine?” wywołało kolejną burzę.

Ostatecznie John wyjaśnił swoje poglądy w komentarzu na Reddicie:

Życzę Linuksowi dobrze, ale rzeczywistość ledwie stawia go na szczycie moich priorytetów (Spalić heretyka!); używam Linuksa na komputerach sterujących lotem w Armadillo Aerospace, ale nie do zwykłej pracy biurowej. Ucieszyłem się słysząc, że Rage działa na Wine bez wkładania specjalnego wysiłku w jego wsparcie.

Mam pokusę portować na Linuksa z powodów technicznych – chciałbym znowu używać Valgrinda, a Nvidia powiedziała mi, że pewne eksperymentalne funkcje GPU, których chciałbym użyć w badaniach i rozwoju (ang. R&D) będzie łatwiej pokazać na Linuksie. Znowu praca nad otwartym sterownikiem OpenGL na Linuksa byłaby dobrą zabawą, jeśli miałbym na to kiedykolwiek czas.

Tym niemniej, nie sądzę, że oficjalne wspieranie Linuksa w mainstreamowych grach jest obecnie dobrym przypadkiem biznesowym, dodatkowo Zenimax nie ma żadnej polityki dla “nieoficjalnych binarek”, takiej jaką miało id. Wykazałem ich wartość (głównie w kontekście eksperymentalnych funkcji dla Windows, ale i Linux odnosił korzyści), ale obecnie moje pełne wewnętrzne siły zostały skierowane na kontynuację wydawania kodu  źródłowego przez id Software, co czuję, daje szersze korzyści niż niewspierane linuksowe binaria.

Nie mogę mówić za kierownictwo Zenimax, ale oni nawet nie publikują tytułów na Maka (ich partnerem jest Asphyr), więc byłbym zaskoczony jeśli okazali by oni zainteroswanie oficjalną publikacją i wsparciem linuksowego tytułu. Typowym przekonaniem jest, że natywne gry na Linuksa nie są dobrym rynkiem. Id Software sprawdziło to przekonanie dwukrotnie, z grami Quake Arena i Quake Live. Typowe przekonanie dowiodło swej prawdziwości. Można powoływać argumenty, że nie był to optymalny przypadek testowy, ale były to jednak uczciwe próby.

Jeśli gorąco wierzycie, że można obecnie zrobić biznes na portach na Linuksa, możecie złożyć propozycję biznesową wydawcy – ofertę gwarantującą wykonanie pracy i wsparcie techniczne. To jest to co Asphyr robi dla Maka i co Loki robiło dla Linuksa. Pewnie jednak nie otrzymacie zwrotnego e-maila jeśli zaproponujecie wydawcy z górnej dziesiątki liczbę niższą niż sześciocyfrową. To może brzmieć śmiesznie: “Kto by nie chciał 20 000 dolarów?”, ale w rzeczywistości potrzeba wiele zasobów prawnych, finansowych, kierowniczych i wsparcia do wywarcia nacisku na każdą pojedynczą umowę, niezależnie od rozmiaru i często to nie usprawiedliwia poświecenia czasu na coś dalekiego od dziesiątek milionów dolarów.

Naprawdę czuję, że emulacja jest w pewnym sensie dobrym technicznym kierunkiem dla gier na Linuksie. Jest oczywiście kłopotliwa w kwestii szerokości możliwego wsparcia, ale nie powinna mieć technicznego piętna, jakie ma teraz. Tu naprawdę nie ma wiele specjalnego w tym co robi natywny port – ciągle mamy wywołania OpenGL, winsock to gniazdka BSD, windowsowe wątki stają się p-wątkami, a translacja interfejsów wejścia i audio nie robi dużej różnicy (XInput i Xaudio2 są dobrymi API!). Dobra warstwa pośrednicząca powinna wpływać na wydajność znacznie mniej niż różnice w jakości sterowników.

Tłumaczenie z D3D do OpenGL wprowadziło by więcej nieefektywności, ale odnalezienie, czym naprawdę są trudności i wprowadzenie pewnej formy rozszerzenia OpenGL-a “D3D interop” by je zniwelować jest znacznie łatwiejsze niż stworzenie tuzinów całkowicie przebudowanych, natywnych portów.

W najlepszym przypadku, podążanie za zbiorem wskazówek dobrych praktyk powinno pozwolić deweloperom uzyskanie wersji linuksowej tylko z odrobinę większym wysiłkiem niż wspieranie, powiedzmy, Windows XP.

Dobrze promowany, z Steamem jako platformą płatnej dystrybucji, jest to prawdopodobnie krok naprzód.
John Carmack

Faktem jest, że kod Dooma 3 BFG został upubliczniony, dzięki czemu społeczność mogła stworzyć linuksowy port tej gry. Faktem jest też, że Rage działa pod Wine lepiej niż większość gier natywnych pod Linuksem – jedyny problem przy instalacji to doinstalowanie XAudio2, sama gra działa bardzo szybko i responsywnie. Z punktu widzenia id wszystko co mówi Carmack jest prawdą. Niestety nie jest z punktu widzenia gier innych twórców, które działają znacznie gorzej pod Wine (DirectX9) lub w ogóle nie działają (DirectX10 i 11).

Carmack wspominając o “D3D interop” miał pewnie na myśli rozszerzenie OpenGL-a NV_DX_interop, które umożliwia wykorzystanie powierzchni i buforów z Direct3D w OpenGL-u.

Można mieć żal do Carmacka, że jego gry nie korzystają ze Steamplay (jednokrotna płatność za wszystkie platformy na Steamie) i linuksowe pliki wykonywalne trzeba ściągać osobno. Pytanie tylko, czy gdyby chciał, to czy może to zmienić? Czy teraz za wszelkie decyzje biznesowe odpowiadają tylko smutni panowie w Zenimax?

This world is pretty cool, there are a lot of neat things here,(…)

Carmack od wielu lat eksperymentował z okularami wirtualnej rzeczywistości. Przełom przyniósło mu  dopiero urządzenie stworzone przez dwudziestoletniego Palmera Luckeya. Spotkanie geniusza sprzętu, jakim jest Luckey, i geniusza oprogramowania, jakim jest Carmack, musiało zaowocować.

John D. Carmack - rewolucja - prezentacja okularów wirtualnej rzeczywistości
John Carmack prezentujący prototyp gogli VR (penny-arcade.com)

Zakodowanie wsparcia w Doomie 3 BFG dla Oculus Rifta, po otrzymaniu gogli od Palmera, zajęło Johnowi jeden dzień – oczywiście z wykorzystaniem kodu stworzonego dla wcześniejszych prototypów Carmacka. Zaskoczył on wszystkich, w tym samego Luckey’a, prezentując na targach E3 Dooma 3 BFG z wykorzystaniem prototypu Rifta. Posklejana taśmą skrzynka zrobiła ogromne wrażenie na uczestnikach targów. Stary, dobry Doom wydał się całkiem nowym przeżyciem.

Carmack wykorzystał oprogramowanie wcześniej użyte w kontroli pozycji rakiet Armadillo Aerospace, a producent czujników Hillcrest Labs wykonał specjalne firmware podwajające częstotliwość odczytu do 250 Hz.

Z uwagi na to, że tego typu gogle potrzebują przynajmniej stabilnych 60 kl./s i niskich opóżnień, to słabo przyjęty, ale niezrównany pod względem wydajności i responsywności,  id Tech 5 może przeżyć drugą młodosć.

Epilog

Id pracuje obecnie nad, zaanonsowanym w 2008 roku, Doomem 4. Niestety docierające do szerszej publiki plotki nie nastrajają pozytywnie. Rozwój projektu podobno został zatrzymany, a potem rozpoczęty od nowa. Z firmy odchodzą kolejni pracownicy: m.in. Michael Abrash (programista, wieloletni współpracownik Carmacka) do Valve, Todd Hollenshead (dawny prezes id), Timothee  Besset (odpowiedzialny za linuksowe porty).

Silniki Carmacka nie mogą już być licencjonowane poza Zenimax. Zresztą Id przegrało na tym polu z Epic Games już wiele lat temu. Pozostałości kodu Carmacka, jeszcze z ubiegłego millienium, znajdują się jeszcze prawdopodobnie w grach Valve (serie Half-Life, Portal) i Infinity Ward (seria Call of Duty).

A John D. Carmack? Pracuje oczywiście nad id Tech 6. Prawdopodobnie z raytracingiem i ośmiokierunkowym drzewem wokseli.

Treść nagłówków artykułu pochodzi z rozmaitych wypowiedzi Carmacka. “id” powinno być czytane jako “id”, nie “aj-di” – to termin z teorii Freuda.

Źródła i dodatkowe informacje:

  • To się nazywa artykuł :)) lekko się czytało, kawusia wypita.

    W słowach Carmacka nie widzę w tym nic dziwnego i nic, co byłoby kłamstwem. Ale już niejednokrotnie zauważyłem część osób wyłapujących każdą wypowiedź, która nie byłaby laniem miodu. Równie szkodząca grupa, co na maksa zapaleni przeciwnicy zamkniętego kodu razem z wyznawcami Stallmana.

    Szkoda tylko, że ekipa się rozchodzi. Tak tylko podejrzewam, że na Doom 4 trochę poczekamy, o ile prace zostaną kontynuowane.

  • M.C.

    Świetny artykuł, dawno takiego nie było :)
    Szczególnie mnie zainteresowało ten raycasting :D

  • CyberKiller

    Dobry art.

  • Tomek

    Trafiłem tutaj przez wykop, z tego co widzę – już drugi raz. Najpierw był bardzo ciekawy artykuł o Valve, a teraz podobny materiał o ID Software. O ile poprzednim razem przeczytałem artykuł z ciekawością i poszedłem dalej, to teraz widzę, że trzeba jednak dodać tę stronę do regularnie przeglądanych samodzielnie, a nie liczyć na trafienie tutaj przez pośredników.

    Świetny materiał i liczę na więcej. :)

  • t0m3k

    Zepsuliście mi młodość, byłem pewny, że moja Nokia 3510i obsługiwała 3D a to był raycasting.
    Jakie to proste jest, Carmack miał wiele świetnych pomysłów :)

  • id wyprzedzało konkurencję o kilka lat – zarówno technologicznie jak i artystycznie. Do czasu – RAGE jest kilka lat w tył. Widać tu inspirację Borderlands – a ta gra wyszła w 2009.

    • Nad Rage pracowano na długo przed Borderlands – tutaj całkowicie gotowe poziomy i postacie testowe, nagranie z 2007 http://www.youtube.com/watch?v=HvuTtrkVtns Niestety wszystko potwornie się przeciągnęło w czasie. A zasługa w tym megatekstur, które zabiją największy zespół artystów http://www.youtube.com/watch?v=BiQCz2NjPR8

      Można wziąć UE3 i oblepić błyskawicznie gazylion skał tymi samymi teksturami i zrobić Borderlands. Można też zrobić każdy centymetr gry niepowtarzalny (jak w Rage), ale to nie będzie już takie szybkie.

      Trudno mówić, że id jest za kimś, skoro, takie Rage ma:

      -megatekstury, wparcie NV_bindless_texture na Nvidii i pewnie AMD_sparse_textures na AMD, reszta nie zobaczy tego do momentu wykorzystania DirectX 11.2 (Podobno coś podobnego ma Naughty Dog na PS3, ale nie mam pewnego źródła)

      -bezpośrednie adresowanie na integrach Intela, bez podziału na pamięć główną i systemową, coś równie fajnego jak na konsolach z przyszłego roku

      -ext_swap_control_tear – super fajne rozszerzenie wzorowane na xboksie, ostanio pozyczyło sobie to od nich Valve http://www.penguingamers.eu/gdc-source-na-linuksa-rzeczywistosc-wirtualna/

      -Rage to chyba jedyna gra która trzyma stałe 60 kl./s na bardzo słabym sprzęcie, jakim są obecne konsole (X360/PS3). Nawet takie padło jak seria Call of Duty czasami spada poniżej tej wartości, Rage nie.

      Nawet jak Rage gameplayowo ssie (bo trochę ssie), to technicznie nie jest przestarzałe. To tyle w wielkim skrócie…

    • tak, tylko nie oszukujmy się – czy patrzy ktoś na tego typu rozwinięcia technologiczne? Ja rozumiem, i doceniam pracę Carmacka, ale jeżeli zależy mu na nowych technologiach niech skupi się na PC. Konsole? CoD wygrywa wszystko.

      Rage był i jest słaby. Zmarnowany potencjał, mam nadzieję że to tylko benchmarka do Dooma 4.

  • wolacinio

    zaraz ściągam Doom’a hehe :D bardzo ciekawy artykuł ;)

  • railed

    A ja ciągle gram w Quake 3, a dokładniej wersję Live.
    Niewiarygodne, jaką to ma grywalność :)

  • Pingback: Neodrink()

  • Pingback: Valve chwali Nvidię, AMD obiecuje wycisnąć maksimum z OpenGL › •• Penguin Gamers •• Gramy na Linuksie!()

  • Szyk Cech

    Co to jest “Direct-3D IM”? Wiem co to jest “Direct 3D” ale nie wiem co to jest “IM”. Artykuł tego nie wyjaśnia a Google też wyświetla jakieś śmieci na ten temat.

    • Kamil Koczurek

      Framework do direxa od M$. Ps. Pierwszy link w google po wyszukaniu frazy “Direct3d IM”. :P

  • Szyk Cech

    Nawet w wikipedi piszą, że zrezygnował z pracy w ID i teraz zajmuje się wyłącznie Oculus Riftem. Nie wiem czy to będzie używać id Tech 6, ale jest to chyba mało prawdopodobne…

    • “Dodano: 6.07.2013”

  • aquaz

    A najlepiej przeczytać “Masters of Doom” – książkę o id software.

  • Edwin

    Świetny tekst. Dzięki.