Tento blogísek i jeho autorka jsou k smíchu.

26. ledna 2011

Omyly startujících vývojářů her 1 - engine

1/26/2011 Posted by Nikola Bornová
Tak tu máme další pokus o sérii článků, kde průmyslovými postupy opotřebená (ale stále ne moudrá) sova radí.

Dnes se podíváme na první zásadní problém, který vývojáři her neustále řeší - herní engine. Engine je takový prubířský kámen vývoje a čím větší projekt je, tím důležitější má úlohu. A jelikož herní projekty se na všech platformách neustále zvětšují, zvětšuje se i význam enginů.

Na začátek je třeba zdůraznit, že engine je něco jiného než ten hezký program, ve kterém si editujete levely - to je editor, který je jen nadstavba enginu. U auta bych editor přirovnala k volantu, pedálům a řadicí páce a engine ke všemu ostatnímu. Engine jsou "střeva hry", je to ta tvrdá část pod povrchem, která se stará o chod hry - vykreslování grafiky, provádění skriptů, přehrávání hudby a zvuků, AI, ovladače atd.

Zdůrazňuji to proto, že je dost enginů, které k sobě nemají žádný editor nebo ho mají jen úplně základní a pracuje se s nimi jen přes programovací jazyk nebo skript. Naopak některé enginy zase mohou využívat víc editorů, kde se v každém dělá něco jiného (v jednom se třeba rozmisťují modely a triggery ve scéně, v jiném se připravují particly, cutscény atd.).

Jak už jsem zmínila na začátku, význam enginů stoupá, protože množství dat a operací, se kterými hry pracují, stále strmě roste a nevypadá to, že by se tenhle postup někdy zpomalil.
Když si vezmete zjednodušený příklad u "obyčejné adventury" a obyčejného rozhovoru dvou postaviček - před mnoha lety stačilo mít nakreslené pozadí řekněme ve dvou vrstvách v rozlišení 640x480, dvě postavičky s pár desítkami framů klapajících tlamiczek (někdy stačily i dva framy, jako to třeba i u hraných filmů s Armoldem Schwarzeneggerem - jdou vidět zuby / nejdou vidět zuby) a k tomu vypisovat na obrazovku text a umožnit kliknutím vybrat textovou větev. A samozřejmě herní logiku, to zůstává stále stejné.

Dnes pro rozhovor dvou postav ve 3D adventuře potřebujete mít kvalitní systém skeletálních animací, systém pro facial animations a pokud možno nějaký lipsync, potřebujete mít robustní systém který se postará o práci s 3D objekty ve scéně, s jejich nasvětlením (dynamickými i lighmapovými) a fyzikou, s navigací postav v 3D prostoru, s přehráváním voice overů,se správným vykreslením textur ve více vrstvách (color mapa, normal mapa, specular), při větší scéně budete zřejmě potřebovat i podporu LOD (level of detail) nebo třeba inverzní kinematiku na nohách pokud postavy vyjdou při dialogu do schodů...

Co tím příšerně dlouhým odstavcem chci naznačit? Chci upozornit na to, že začínat vývoj moderní hry myšlenkou "nejdřív si uděláme engine" je veliké zahrávání si s ohněm. Vytvoření moderního enginu je náročnější než tvorba balíku deseti her před lety. Samozřejmě se k tomu musí připočíst energie a čas nutný k vytvoření editoru, aby mohl krmit engine daty i někdo jiný než programátor, co ho vytvořil. A většinou i na doplňující tooly jako exportéry z grafickách softů apod.
Zásadní je i to, že dokud engine není v opravdu pokročilé fázi vývoje, jsou dost omezené možnosti toho co může zbytek týmu dělat. Možná si řeknete, že třeba grafici můžou klidně připravovat animace a modely "dopředu", ale to je právě ten zásadní omyl. Během tvorby enginu se neustále zjišťují nové věci, upravuje se co bude od dat potřeba atd. takže 3D grafik třeba vytvoří postavu s určitým množství kostí, naváží ji, naanimuje a pak se zjistí, že engine prostě nezvládně na kostře 20 jointů a musí jich být jen 12. To znamená že se skoro všechna práce grafika spláchne do záchoda. To samé platí třeba pro skriptování, level design atd. A podobné věci se dějí POKAŽDÉ když se pracuje na vlastní technologii.

Začínat vývoj hry tvorbou vlastního enginu je dnes ve většině případů zásadní chyba. Existuje totiž několik desítek už použitelných řešení (a stovky nepoužitelných), které vám usnadní neskutečné množství práce. Výběr je opravdu velký. Pokud myslíte na finance tak je chyba si myslet, že vlastní engine v dlouhodobém měřítku ušetří peníze. Jeho vývoj totiž nikdy neustane, musí pořád reagovat na příchod nových technologií a tak mu musí být navěky přiřazeno X techniků, kteří nejen opravují všechny chyby ale neustále ho mění a updatují (a tím přidělávají nové chyby).
Tohle platí nejen pro firmu s s dvaceti lidmi, ale i se sto lidmi nebo skupinku tří amatérů co chtějí ve volném čase udělat nějakou hříčku. V principu je to pořád stejné.
Samozřejmě žádné pravidlo není univerzální, obzvlášť ve vývoji her. Pokud se chystáte na vývoj nějaké velmi jednoduché hry ala Tetris nebo Dáma, není vlastně ani engine v pravém smyslu slova potřeba a opravdu stačí "nahardkódovat" celou aplikaci. Někdy jsou zase požadavky na hru tak hodně specifické, že se těžko hledá engine, který by šel do potřebného tvaru ohnout. Ale i v tom případě existují "core enginy", které se postarají aspoň o základní funkce (třeba pouřijete alespoň engine Bullet/PhysX pro fyziku, SpeedTree pro veškerou vegetaci apod.) a zbytek si nad to dostavíte sami.

Už při tvorbě jednoduché skákačky se ale vyplatí zauvažovat, jestli se nevyplatí sáhnout pro nějakém už hotovém řešení. Nemusí to být hned totálně komplexní Unreal, možností je třeba sestavit si vlastní řešení z více technologií. Spousta z nich je i zdarma, na přehled těch nejzajímavějších stačí kouknout třeba na wiki.