Dolina niesamowitości, czyli rzecz o silnikach w grach wideo
Rozmawiamy ze specjalistami z CD Projekt RED i Techlandu.
Wykańczając setnego przeciwnika w najnowszej grze akcji rzadko myślimy o tym, co dzieje się pod obudową komputera lub konsoli. Ogromna liczba procesów uwija się w tym czasie w pocie czoła, by dostarczyć oczom wizualną ucztę połączoną z naturalną animacją i rozbudowaną sztuczną inteligencją. Z biegiem lat okazuje się jednak, że rozwiązania, które jeszcze niedawno zachwycały graczy, obecnie odchodzą do lamusa, a oczy same zwracają się ku nowej generacji. Na temat silników gier oraz o tym, jak osoby mające z nimi do czynienia na co dzień patrzą na technologiczną przyszłość, porozmawialiśmy z Jakubem Klarowiczem z Techlandu oraz czterema pracownikami CD Projekt RED - Balázsem Törökiem, Chrisem Hardwickiem, Przemysławem Czatrowskim i Krzysztofem Krzyścinem.
Dyskusje o silnikach gier często obfitują w nazewnictwo przyprawiające o zawrót głowy początkujących czy mniej doświadczonych graczy. CryEngine napędzający Crysisa, Unreal Engine 3, na którym powstaje BioShock Infinite czy wreszcie Source, stworzony przez Valve i stanowiący bazę między innymi dla Half Life 2. To tylko niektóre ze słynnych przykładów.
„Silnik gry jest swego rodzaju bazą, na której opiera się działanie całej gry” - Jakub Klarowicz, Techland
Czym tak naprawdę jest ten cały silnik?
- Silnik gry jest swego rodzaju bazą, na której opiera się działanie całej gry - wyjaśnia Jakub Klarowicz, Lead Engine Architect w Techlandzie. - W jego skład wchodzi wiele elementów odpowiadających za różne aspekty kreowania wirtualnego świata. W zależności od stopnia skomplikowania oraz zaawansowania silnika, elementów tych jest więcej lub mniej, a tym samym zakres funkcjonalności zapewnianych przez silnik jest różny. Prawie zawsze jednak znajduje się w nim kilka modułów odpowiedzialnych za podstawowe rzeczy, m.in. wyświetlanie świata gry, obsługę gracza, logikę przeciwników, detekcję interakcji między postaciami (kolizje), odtwarzanie dźwięków czy interfejs użytkownika - menu i HUD. Inne bardziej zaawansowane moduły to na przykład obsługa gry sieciowej, fizyka, proceduralna generacja świata (np. roślinności), czy streaming danych. Takich elementów silnika może być naprawdę dużo, niektóre bywają bardzo skomplikowane.
Krzysztof Krzyścin, Lead Technical Artist w CD Projekt RED zauważa, że sam silnik to za mało. Potrzebne są również pewne aplikacje.
- Silniki gier umożliwiają tworzenie i edycję zasobów gry. Dzieje się to dzięki dużej liczbie dodatkowych narzędzi, tzw. edytorów, mających na celu ułatwienie i przyspieszenie prac nad poziomami gry. Kilka prostych przykładów to: edytor świata, czyli poziomów, w których gracz będzie grał, pozwalający na tworzenie i manipulację obiektami; edytor skryptów - używany, by zakodować zachowanie postaci lub całych społeczności i określić przebieg questów w grze; edytor dialogów i animacji; edytor drzewa zachowań,aby zdefiniować inteligentnych przeciwników. To tylko niektóre przykłady.
Silnik i programowanie
Żeby wszystkie te elementy ze sobą współgrały, a finalny produkt w postaci gry trafił na rynek, niezbędna jest odpowiednia wiedza programistyczna. Jaki jest zatem najczęściej stosowany język programowania i dlaczego właśnie on?
- C++ jest zdecydowanie najpopularniejszym językiem - odpowiada bez chwili zawahania Balázs Török, Lead Engine Programmer w CD Projekt RED. - Jest on nie tylko efektywny, ale istnieje bardzo duża baza wiedzy na temat jego wykorzystania. Oczywiście ciągle pojawiają się nowi pretendenci - dziś największym z nich jest C#. W grach najważniejszymi aspektami są wydajność oraz możliwość tworzenia naprawdę skomplikowanych systemów. C# jest dobrym językiem w tej drugiej dziedzinie, jednak w kwestiach wydajnościowych ustępuje C++. Inna sprawa to multiplatformowość C++. Język ten posiada kompilatory dla wszystkich liczących się sprzętów i nawet jeżeli ktoś tworzy grę na PC, może kiedyś zechcieć wydać ją również na inną platformę.
Słowa Töröka potwierdza jego kolega z CD Projekt RED - Chris Hardwick, pełniący w studiu rolę Senior Engine Programmera.
- C++ to potężny język wyższego poziomu, który pozwala na stworzenie optymalnego kodu na wiele platform. Może nie jest najlepszym rozwiązaniem, ale daje bardzo duże możliwości. Co więcej, efekty pracy osób, które mają pewną wiedzę na jego temat, zazwyczaj osiągane są dość szybko - mówi programista.
Jakub Klarowicz zaznacza, że w pewnych obszarach gry można skorzystać z alternatywnych dla C++ rozwiązań. - Inną kwestią jest język użyty do kodowania logiki gry. Niektóre silniki idą tutaj w stronę języków skryptowych, co ma swoje zalety w postaci większej prostoty i szybkości prototypowania, ale ma też wady, głównie polegające na większych ograniczeniach takiego języka oraz dodatkowym narzucie wydajnościowym i pamięciowym na jego obsługę - opowiada programista z Techlandu. - Inne silniki pozostają przy C++ wszędzie, tzn. zarówno w ścisłym kodzie silnika, jak i w logice gry.
„Opanowanie języka programistycznego, to jednak nie wszystko. Należy jeszcze dobrze poznać narzędzie, na którym przychodzi programiście pracować.”
Opanowanie języka programistycznego, to jednak nie wszystko. Należy jeszcze dobrze poznać narzędzie, na którym przychodzi programiście pracować. W dobie częstych zawirowań na rynku producentów i wydawców niejednokrotnie zdarzało się twórcom gier zmieniać miejsca pracy. Czy przejście z jednego silnika na inny jest zadaniem wymagającym długiego okresu przygotowawczego?
- Czasy, kiedy silniki gier wymagały „tajemnej" wiedzy, często związanej z niuansami systemów operacyjnych czy też ze znajomością specyficznego sprzętu, dawno minęły - uważa Krzysztof Krzyścin. - Chociaż większość silników ma swoje osobliwości, czasami dziwaczne, obecna tendencja ujednolicania ich interfejsów i upraszczania edycji światów sprawia, że przestały być używane wyłącznie przez specjalistów. Udostępnione narzędzia pozwalają na stosunkowo łatwą i szybką modyfikację istniejących, podstawowych zasobów gry - dzięki temu nawet mniej doświadczeni użytkownicy bez kłopotu szybko stworzą swoje własne poziomy.
- Oczywiście nie znaczy to wcale, że silniki są przez to mniej skomplikowane. Raczej, że oferują „łagodny start" w świat gamedevu - kontynuuje Krzyścin. - Ponieważ różne typy gier: RPG, strzelanki, strategiczne czy chociażby logiczne u swoich podstaw zbudowane są na podobnych założeniach, np. posiadają poziomy o rosnącej trudności, statystyki gracza i graficzny interfejs użytkownika, różnice w procesie ich tworzenia, w różnych edytorach zacierają się.
Potwierdza to również Jakub Klarowicz, chociaż zaznacza, że w pewnych przypadkach ściślejsza znajomość silnika jest nieodzowna.
- Jeżeli mówimy o rozwoju samego silnika lub narzędzi do niego, to wymaga to specjalistycznej wiedzy - wyjaśnia. - Zakres zagadnień, jakie trzeba znać pisząc silnik jest bardzo szeroki i często dotyczy rzeczy, które nie są ogólnie dostępne, np. związane z konkretnymi rozwiązaniami sprzętowymi poszczególnych platform.
Lider nie musi być jeden
A co sami programiści sądzą o popularnych engine'ach, na których powstają gry? Czy można wśród nich wyłonić absolutnego lidera? Według Chrisa Hardwicka pod względem oferowanych efektów zwycięzca jest jeden.
- Do tej pory najbardziej zaawansowane systemy, jakie widzieliśmy, jeśli chodzi o animację, dźwięk, streaming danych, a także zniszczenia oparte na fizyce, były stworzone na silniku Frostbite 2, firmy DiCE - stwierdza programista. - Ta technologia wybija się w porównaniu z konkurencyjnymi rozwiązaniami, co widać gołym okiem na wszystkich platformach. DiCE często się chwalił możliwościami swojego silnika i, jak się okazało, nie były to czcze przechwałki. Wiele engine'ów udoskonaliło sposób renderowania, ale Frostbite wykonał olbrzymi skok nie tylko w tej dziedzinie, ale również na wielu innych polach.
W przeciwieństwie do Chrisa, Balázs Török nie ma faworyta. Według niego, przy rozpatrywaniu jakości engine'ów należy brać pod uwagę mnóstwo elementów.
- Obecnie jest wiele solidnych silników i nie ma absolutnego lidera - mówi. - Jeżeli spojrzymy na darmowe rozwiązania, można łatwo zauważyć, że Unreal, Unity i CryEngine są najpopularniejsze. Każdy z nich koncentruje się na innym aspekcie, ale wszystkie są bardzo zaawansowane. Unity rządzi na platformach mobilnych, CryEngine słynnie z możliwości graficznych, a Unreal ma bardzo wygodny zestaw narzędzi.
Kontynuacja na następnej stronie.