EGTwins - logo

O VÝVOJI HER

Skoro každý hráč si někdy přál vytvořit vlastní počítačovou hru, která by byla přesně podle jeho gusta. Stejným způsobem jsem s vývojem začínal i já s Honzou. Jako nadšení hráči jsme odehráli spoustu různých her, ale u každé hry nám něco chybělo nebo vadilo. Například nedostatečná grafika, divné zvuky, hloupé AI (umělá inteligence) postav, nezáživný příběh v byť v graficky hezky udělané hře... Z počátku jsme se věnovali vývoji 2D her podobných jako například Super Mario. Postupem času jsme se snažili naše znalosti posunout dále a dostali jsme se až k vývoji 3D her. Zanedlouho jsme si uvědomili, že samotný vývoj není nic snadného, pokud si k tomu člověk všechny modely a skripty udělá sám. Samozřejmě nešlo vše od začátku jako po másle. V průběhu jsme se poučili z chyb, seznámili se s problematikou vývoje her a postupně se čím dál tím více zdokonalovali.

Chcete si vytvořit svůj projekt nebo se pouze o toto téma zajímáte a kladete si stejné otázky jako my, když jsme s vývojem her začínali? Jak postupovat? Čemu se vyvarovat a na co klást důraz, aby byl projekt funkční a optimalizovaný? Pak si přečtěte tento článek, který se Vám pokusí zodpovědět na Vaše otázky a případné nadšence do her seznámí stručně s tím, na co myslet při jejich vývoji.

Něco málo na úvod

Modely her se vytváří v některém 3D programu (např. Blender, Cinema 4D...), umožňující vymodelovat a rozpohybovat objekt. Následně se objekty vkládají do softwarových frameworků zvaných jako herní engine (např. Unity, CryEngine, Unreal Engine...). V těchto programech se následně poskládá celá scéna, pomocí různých programovacích jazyků se vytváří AI (umělá inteligence), případně se přidají různé zvuky, hudba, objekty a tak dále. Při vývoji je nutné myslet na následující prvky:

Příběh

Samozřejmostí, stejně jak u filmů, je vymyslet příběh. Možná se to tak nezdá, ale i on může pomoci s vývojem umělé inteligence. Pokud člověk není zběhlý v programování, může si přes různé triggery (spouštěče nějaké akce) usnadnit práci při vývoji AI.

Například bude v příběhu vytvořena nějaká akční scéna, kdy se vojáci stahují k helikoptéře, schovávají se za překážky a střílí po nepříteli. Na první pohled to může vypadat fantasticky, že se sami kryjí a chovají se, jako by byli živí. Pokud by to bylo udělané přes nějaký trigger, jednalo by se o pouhou animaci, kterou mají předem přesně předdefinovanou. Takže kdyby ve scéně nebyli žádní nepřátelé a nikdo by po nich nestřílel, vojáci by se i přesto kryli a stříleli by někam do prázdna. V lepším případě, kdy je programátor zběhlejší, by si vytvořil různé funkce pro různé typy chování a voják by se schovával a střílel dle situace. V tom nejlepším případě pak postavy ve hrách využívají i naučenou neuronovou síť!

Hra s příběhem může některé hráče zaujmout více a donutit je tak dohrát hru až do konce.

Modely a textury

Jedná se o celkem obsáhlé téma, zkusím Vám jej alespoň ve stručnosti přiblížit.

Kvalitní modely a textury jsou důležité, chce-li vývojář mít objekty ve hře s realistickými detaily. Je však nutné myslet na to, že velikost modelů a textur nemusí hned značit kvalitu. Náročné modely a textury mohou hře spíše uškodit, než ji vylepšit.

Každý model ve hře se skládá s tzv. polygonů (z řeckého poly - mnoho a gónia - úhel), což je jakási část objektu. Společně s hranami, vertexy (body v prostoru) a jinými prvky tvoří 3D model. Tyto polygony mohou mít různý počet bodů. Například čtverec může být čtyřhranný polygon. Takže z těchto šesti čtvercových polygonů lze například vytvořit krychli. Čím více polygonů model má, tím více detailů může mít, ale za cenu vyšších nároků na HW (Hardware) počítače. Stejně tak to platí u textur.

V ideálním případě se ve hrách využívají tzv. „low-poly“ objekty, které mají sice málo polygonů a nelze na nich vymodelovat různé oděrky a detaily. V tomto případě je lze kompenzovat například texturou, na které jsou různé oděrky, špína a podobné věci, které objekt více přiblíží realitě. Pomocí této „iluze“ je možné vytvořit na první pohled hezký objekt, který je i méně náročný na hardwarové požadavky.

Další možností je přenesení detailů z „high-poly“ modelu do textur jeho zjednodušeného (zjednodušení se také říká decimace) „low-poly“ duplikátu. Tomuto procesu se říká texture baking. Za zmínění stojí i fakt, že lze přenést nejen detaily, ale také třeba informaci o přímém/nepřímém osvětlení (viz dále). Na obrázku níže je ilustrativní ukázka texture bakingu, kde se informace o detailech „high-poly“ objektu přenesla do normal mapy (více o ní v případných dalších článcích) a ta se následně použila u „low-poly“ modelu.

Texture baking - ilustrace | EGTwins

U textur je vhodné využít různé formáty s kompresí. Například u textur bez průhlednosti určitě neuškodí, budou-li ve formátu JPG. Ten se oproti PNG formátu nemusí na první pohled příliš lišit v kvalitě, ale velikost souboru již bude patrná.

Modely lze buď vymodelovat ručně v některém 3D programu, nebo naskenovat. Skenování objektů zaručí jejich fotorealistický vzhled. Je však důležité myslet na skutečnost, že oskenované objekty mohou být velmi náročné a nemusí se správně vytvořit. Níže můžete vidět náš rychlý sken postavy do 3D objektu, naším algoritmem – Honza si chtěl zahrát jako hlavní postava ve hře 😉. Ve finále by se ruce úplně odsekly a domodelovaly, případně doskenovaly zvlášť.

3D scan - ilustrace | EGTwins

Osvětlení a stíny

Z naší zkušenosti jsme došli k závěru, že osvětlení a stíny jsou ve hře nejdůležitější parametry, je-li vyžadována co nejhezčí vizuální kvalita. I z ošklivé low-poly scény vytvoří kvalitní osvětlení a stíny slušný projekt. Každopádně, díky tomu, že tyto prvky někde něco přidají (zkrášlí samotnou scénu), někde zase musí ubírat. Osvětlení a převážně stíny ve hře jsou totiž celkem náročné na HW. Tento fakt lze vidět například u řady počítačových her. Pokud se u nich sníží kvalita osvětlení (pokud to nastavení hry umožnuje), lze pocítit výrazné zrychlení a plynulost. Každopádně i s osvětlením a stíny se dá pohrát tak, aby neubírali razantně výkon počítače. Stíny se jsou buď real-time (v reálném čase), baked (doslova vypečené) nebo obojí dohromady.

Real-time

Pokud chce mít vývojář hru na úrovni s dynamickou grafikou, real-time stíny jsou jasná volba. Jsou dynamické, takže hráč může vidět různé stíny postav, které se mění při každém jejich pohybu. Jsou však celkem výpočetně náročné a musí se s nimi ve hře řádně hospodařit. Je tedy nutné myslet na „malé“ vyhlazování stínu, případně na vzdálenost vykreslování stínu (tzv. render-distance, platí i u modelů).

Real-time lighting - ilustrace | EGTwins

Baking

Tento pojem byl nakousnutý výše. Lze použít nejen na přenesení detailů, ale i osvětlení. Baked textury se doslovně zapečou do textur objektů. Tyto stíny vznikají většinou již v nějakém 3D programu, nebo až v samotném herním engine. Stíny se jednoduše vykreslí na texturu objektu, na který tento stín dopadá. Tyto stíny jsou však statické, takže pokud by objekt, který stín vrhá, zmizel, jeho stín by na textuře jiného objektu zůstal. Přesto jsou tyto typy stínu velmi využívané a na první dojem může hra působit kvalitně. Skoro všechny nové hry kombinují jak real-time, tak baked stíny.

Baked lighting - ilustrace | EGTwins

Animace

Animace udávají pohyb samotných objektů ve hře. Animace objektu lze vytvořit buď „ ručně“, kdy animátor různě posouvá a tvaruje objekty (případně armaturu) dle sebe, nebo pomocí technologie motion-capture.

U dnešních her se využívá již zmíněné technologie motion-capture, protože je na pořízení nejen jednodušší než animace od ruky, ale také více realistická. U této technologie je princip v tom, že je herec (případně objekt) postaven před různými senzory, které monitorují jeho pohyb, respektive pohyb jeho markerů, které má herec na sobě. Pohyb herce se následně přesune na kostru postavy ve hře. Níže můžete vidět ukázku z naší hry, na které momentálně pracujeme. Jedná se pouze o testovací objekt, proto není tak kvalitní. Honza si zahrál na vojáka a pomocí žlutých teček na jeho oblečení jsme schopni jeho pohyby přenést do virtuálního světa.

Motion capture - ilustrace | EGTwins

Zahrajte si zdarma EGTwins hry

Dostali jste po přečtení tohoto článku chuť si něco zahrát? Vyzkoušejte námi vytvořené hry. Potrpíme si na vlastní práci, proto všechny skripty a modely ve hře jsou čistě naše práce. Na hrách prozatím pracujeme pouze my dva a hry mohou obsahovat "bugy". Každopadně na "bugách" v průběhu času zapracujeme, stejně tak na vylepšení grafiky a AI v dalších hrách. Jelikož chceme primárně tvořit free-to-play hry a tvoříme je převážně v našem volném čase, budeme velmi rádi za Váš dobrovolný finanční příspěvek, který použijeme na vývoj dalších a lepších her. Jakákoli čáska nám při vývoji pomůže. Také nám pomůže, když si vypnete AdBlock. Doufáme, že Vás naše hry budou bavit. Rovněř budeme rádi za zpětnou vazbu (ať už pozitivní, negativní, nebo rady pro vylepšení). Jste-li podnikatel, můžete na našich herních stránkách propagovat Vaši firmu (pro více informací nás prosím kontaktujte přes e-mail, nebo telefonicky).

Libí se Vám toto téma? Chtěli byste se dozvědět více i z technického hlediska nebo popsat problematiku více do hloubky? Rádi o tom sepíšeme další článek. Budeme tedy rádi za jakékoli připomínky, rady, zpětnou vazbu a nápady na témata, o kterých bychom měli napsat další články.

Pokud se Vám článek líbil, budeme rádi za sdílení, lajkování na Facebooku nebo jiné sociální síti.

Tento článek byl napsán ze zkušeností autora.


Přidáno 05-05-2020, Autor: Milan Řehoř, Ilustrace: Jan Řehoř