Unreal vs Unity - srovnání áčkových herních enginů pro vývoj VR

Unreal vs Unity - srovnání áčkových herních enginů pro vývoj VR Tagy: Software, Vývoj aplikací
| Publikováno dne

Při hledání nástroje pro vývoj VR her a aplikací narazíte na spoustu obecných i specificky zaměřených programů, nicméně po hlubším zkoumání skončíte u dvojice těch nejvyspělejších - herních enginů Unreal a Unity. V čem se liší, na co jsou vhodné a je volba jednoho či druhého pro vývoj konkrétní hry / aplikace zásadní? Na to se pokusím přinést odpověď v tomto článku.

Článek vychází z mých zkušeností získaných při vývoji VR aplikací. VR aplikace obecného typu vyvíjím s důrazem na efektivitu - dosažení maximální vizuální kvality a realistické fyziky při co nejnižších nárocích na výkon zařízení a vývojový čas - a právě v tom hraje vhodná volba enginu a přidružených nástrojů klíčovou roli.

Předně, oba zmíněné herní enginy jsou vysoce kvalitní, vhodné pro vývoj téměř jakékoliv hry (včetně AAA her) i aplikace na profesionální úrovni. Jestliže jste běžný vývojář, neperfekcionista, chybu neuděláte výběrem ani jednoho z nich. Vývojový čas a výsledná vizuální kvalita se však v závislosti na zvoleném herním enginu může lišit, viz článek.


Historie a současnost

Abychom lépe porozumněli současnému stavu, vlastnostem a způsobu práce s probíranými herními enginy, je nezbytné si je zanést do historického kontextu - za jakým účelem a pro jakou cílovou skupinu byly založeny a původně vyvíjeny.

Unreal engine je vyvíjen společností Epic games. Vyvíjet se začal v roce 1995, a to za účelem tvorby FPS hry Unreal vydané o 3 roky později. Ještě v průběhu svého vývoje (již v roce 1996) byl licencovaný prvními externími herními studii pro vývoj dalších her. Psaný byl a stále je v jazyce C++, první verze byla v podstatě produktem jednoho muže - autorem 90% kódu enginu byl zakladatel Epic Games Tim Sweeney.

Historicky v dané době nebylo o moc více herních zařízení než počítače - a právě na vývoj her pro ně byl herní engine Unreal designován. V té době byl vývoj her výsadou zavedených studií s vysokými rozpočty, od toho se odvíjela i cena licencí. K drastické změně cenotvorby a dalším změnám zaměřeným na zpřístupnění široké mase vývojářů došlo až s vydáním Unreal Engine 4 v roce 2015. Důvodem změny byla konkurence - herní engine Unity.

Unity engine je vyvíjen společností Unity Technologies. První verze byla zveřejněna v roce 2005, a to za účelem „demokratizovat“ vývoj her tím, že jej zpřístupní více vývojářům. Původní zaměření bylo na Mac OS X, krátce poté následovala podpora pro Windows a prohlížeč. V roce 2008 se vznikem App Store okamžitě přibyla podpora pro Iphone, v 2010 s Androidy poté podpora pro Android. Současně s podporou pro konzole a další zařízení se Unity rychle stalo herním enginem pro vývoj her na jakoukoliv platformu s velmi příznivými náklady - a to i pro jednotlivce.

Ačkoliv je vyvinut v C++, vývojáři v něm mohou programovat ve více jazycích, vedle populárního C# (vytvořen Microsoftem v roce 2000), rovněž v modifikovaném JavaScriptu. Mimo to lze prostřednictvím rozšíření pracovat i v grafické programovatelném prostředí na způsob Blueprints vydaného v Unreal engine 4.

Unity engine si svým přístupem začal rychle budovat obří komunitu vývojářů (jednotlivci, malé týmy, velká studia bez chuti platit vysoké poplatky za herní enginy) vyvíjejících hry v jejich enginu. To zároveň spustilo efekt sněhové koule - tito vývojáři tvořili vyjma her i dodatečný obsah - ať již ve formě assetů pro hry (Unity provozuje obchod AssetStore), tutoriálů jak co dělat, a obřího množství obsahu na fórech. Dnes je Uniťácký Asset Store násobně větší než Unreal Engine store, stejně tak najdete pro Unity mnohem širší dokumentaci, vzdělávací obsah, tutoriály na youtube, nebo rychlejší odpověď na fórech při řešení jakéhokoliv problému.


Historicky Unity nad Unrealem ztrácelo v grafické kvalitě her. Unreal pak oproti Unity v široké podpoře platforem. Obijí je dnes již minulostí - v obou stěžejních záležitostech došlo, dochází, nebo brzy dojde k sjednocení kvality a vlastností obou herních enginů. Dnes jsou oba enginy vyjma her používány v navazující široké oblasti oborů - od vývoje aplikací, přes architektonické a jiné vizualizace, virtuální realitu či simulace.


Grafická kvalita | Unreal vs Unity

Zažitým tvrzením je, že jestliže se zaměřujete na maximální vizuální a realistickou kvalitu obrazu, musíte používat Unreal. V době vydání jeho 4 verze v roce 2015 to byla pravda, podobná tvrzení se možná objeví i po vydání Unreal 5 v průběhu 2021. Samotná problematika vizuální kvality je nicméně mnohem složitější - vizuál je funkcí kvality vstupních modelů, použitých shaderů, post-preocessingu, nastavení rendereru a dostupného výkonu cílového zařízení. Vezmeme-li identické modely, dokážeme v obou enginech dosáhnout obdobných výsledků, leč v Unity s tím budeme mít více práce.

Legenda horší kvality v Unity byla historicky spjata s využívanou zabudovananou render pipelinou. Dnes je však v Unity dostupná scriptable render pipeline, a to hned v několika předdefinovaných šablonách. V případě použití HDRP pipeline vizuální kvalita dosahovaná v Unity je běžným pohledem nerozpoznatelná od té v enginu Unreal. Ať dnes tedy spustíte první či druhý engine, výsledná kvalita grafiky bude odvislá od zvoleného rendereru a přidruženého nastavení - v obou enginech totiž máte na výběr hned z několika možností. V Unity obecnějších, zaměřených pouze na kvalitu zobrazení, V Unrealu poté i v rámci zaměření - například předdefinovaného nastavení pro architektonické vizualizace.

Možnosti post-processingu a zobrazení informací jsou v obou herních enginech obdobné. Unreal nicméně umožňuje lepší a jednodušší práci s nasvětlením scény (světlost, stíny, odlesky...) - výsledkem je snazší dosahování fotorealistického vzhledu při výkonově optimalizovaném stavu.

Architektonická vizualizace v Unreal Engine 4 zobrazená prostřednictvím brýli Oculus Quest 2.

Rozdíl v grafické kvalité lze zjednodušeně shrnout takto - cokoli vložíte do Unrealu, pravděpodobě bude vypadat dobře s minimem úsilí. U Unity se pro dosažení obdobného výsedku budete muset podívat na zapečení světelnosti a přiřazení shaderů, viz oddíl článku "Práce s modely a materiály".


Podpora importu a práce s modely a materiály | Unreal vs Unity

Použité 3D modely a materiály jsou nejzásadnějším prvkem vizuální stránky her, aplikací i veškerých vizualizací. Obojí se zpravidla netvoří přímo v herním enginu, ale některém ze spousty dostupných 3D modelovacích programů, jež mimo samotné modelace umožňují i aplikaci a tvorbu různých typů materiálů. V těchto modelovacích softwarech je zpravidla možné renderovat krásné fotorealistické snímky v kvalitě 4k a výše - naším cílem je samozřejmě to samé, avšak v reálném čase (v mžiku milisekund) uvnitř námi vyvinuté hry / aplikace běžící na uživatelském zařízení s velmi limitovaným výpočetním výkonem. Prvním krokem k tomu je úspěšné převedení a optimalizace 3D modelu včetně materiálů z designérského softwaru do herního enginu.

Vyvíjíme-li produkt s jasnými vstupními zdroji, lze volit modelovací software a používané materiály s ohledem na jednoduchý převod do herního enginu a hladký běh aplikace. Potíž může nastat v momentě, kdy jsou vstupy neznáme. Příkladem budiž produkt konfigurátoru nemovitosti. Jedná se o aplikaci, na jejímž vstupu je neoptimalizovaný 3D model od architekta nebo designéra. Tento model je vytvořen v libovolném programu, s nespecifikovaným typem materiálů - obvykle kombinace V-Ray, vlastních materiálů a materiálů definovaných použitým softwarem. Při takovémto typu vstupu jsou hned 3 zásadní problémy:

  • 3D model nemovitosti nemusí být výkonově optimalizován, ba dokonce může být nevhodně nastaven
  • Použité materiály nemusí být přenositelné napříč různými programy
  • Realistický vizuál je z velké části odvislý od správného nastavením osvětlení scény

V případě práce s obecnými modely a materiály je pro nás klíčová podpora různých formátů 3D modelů a materiálů herním enginem. Tu najdeme v případě obou zmíněných enginů, avšak zde často narazíme na cenový nepoměr - zatímco u Unrealu to získáme zdarma (jestliže vlastníme licenci na 3D modelovací program, z něhož importujeme), nejhůře za pár tisíc Kč, v Unity za to samé zaplatíme klidně i desítky tisíc kč (roční licence).

Pluginy pro efektivní import modelů a materiálů a práci s nimi v herním enginu

Unity engine

Vyjma samotného přenosu, Unreal aktuálně nabízí pokročilejší práci s materiály, 3D modely a nasvětlením. To samo o sobě nemá vliv na konečnou vizuální kvalitu modelů, avšak zrychluje to vývojový proces aplikací. Nehledě na to, že Unity nenabízí podporu V-Ray materiálů a importu 3D modelů z celé řady softwarů - takovéto modely a materiály je nezbytné na cestě do Unity převádět. To je ovšem nutné často i v případě Unrealu, ovšem ne z důvodu nezbytnosti, avšak touhy modely před importem výkonově optimalizovat. 


Práce v enginu

Možnosti v obou enginech jsou obdobné. Ze zásadních odlišností je programovací prostředí a způsob práce v grafickém prostředí. V Unrealu je nutné programovat v C++ nebo vizuálním scriptovacím rozhraní Blueprints. Dokumentace každé funkce je definovatelná obojím, avšak pro maximální možnosti a výkon je doporučované pracovat v C++. To je oproti C# v Unity náročnější na práci - namísto s jednou funkcí pro konkrétní script se pracuje se dvěma - pro deklaraci a pro definici, ale zároveň je i efektivnější na výkon. Většina vývojářu v Unreal volí pro jednoduchost Blueprints, jež je výkonově zejména v případě komplexnějších funkcí značně neefektivní. Unity vizuální scriptovací prostředí nativně neobsahuje, nicméně lze jej získat prostřednictvím rozšíření typu Bolt nebo Playmaker. Vyjma zmíněných, v Unity lze programovat i v Uniťácky modifikovaném jazyce JavaScript.

Odlišný přístup ke struktuře funkcionalit

S programovacím prostředím souvisí i způsob propojení naprogramované funkcionality s grafickými objekty.

Unity pracuje s velmi jednoduchým, snadno pochopitelným a replikovatelným modelem nezávislých prvků - hierarchie objektů je v otevřeném stylu objektů a k nim relevantních subobjektů. C# scripty poté mohou být jednoduše a nezávisle přiřazeny k jakémukoli objektu. Případné konfigurace se řeší v Inspector okně. Tento design umožňuje velmi snadné přiřazování jakékoli funkcionality jakémukoli objektu.

Unreal Engine seskupuje jednotlivé interaktivní objekty včetně jejich funkcionality do rodičovských tříd. Takovýchto tříd je k výběru hned několik, na základě požadované funkcionality. Výsledkem je logické rozřazení do ucelených komponent, avšak za cenu přidané práce - interaktivní komponenty totiž zpravidla je nutné vytvořit v Unrealu - tím je Unreal v rámci definice funkcionalit a přípravy interaktivit náročnější oproti Unity.

Kde však Unreal nad Unity bezesporu vítězí, to jsou možnosti práce s 3D modely, materiály a nasvětlením scény. Pro dosažení stejného stavu je v případě Unity často nezbytné využít více různých softwarů. Ovšem i zde platí nějaká úskalí použití - zejména v případě průběžných aktualizací modelů v externím softwaru.

Z hlediska původního zaměření enginu Unreal na vývoj her pro výkonnější zařízení, má Unreal i vyšší nároky na vývojový počítač oproti Unity.

Virtuální realita v Unity vs v Unreal

Oba herní enginy obashují nativní podporu pro vývoj XR her a aplikací. Rovněž do nich dostanete základní ineraktivitu prostřednictvím pluginů software development kitů vydaných výrobci VR headsetů. Mnohem efektivnějším způsobem je nicméně používání nástrojů podporující VR headsety napříč výrobci. V případě Unity se jedná o XR interaction toolkit. U Unrealu používám The VR Expansion Plugin (VRE) popř. implementaci od Oculusu). Nutno zmínit, že existuje i řada nástaveb a jiných implementací ulehčujících vývojářům práci - často obasahující řešení repetitivních operací napříč aplikacemi. Pokud zůstanu jen v České republice, příkladem může být mnou psaný XR Framework pro Unity, případně UVRF framework pro Unreal od Jana Horského. Oba frameworky jsou dostupné bezplatně komukoliv jako open-source.

Virtuální realita je oblastí s nejvyššími požadavky na výkon zařízení. Jednak zobrazení probíhá na velmi velkém prostoru a tedy na běžné obrazovce jinak nepozorovatelné chyby se stávají viditelnými, především však samotný render probíhá 2x - pro každé oko zvlášť (dvojice obrazovek), pokud není aktivován stereoskopický rendering.

Osobně se soustředím na vývoj aplikací optimalizovaných pro běh na headsetu Oculus Quest 2. Pro běh přímo v zařízení je nutné používat Lightweight Render Pipeline (LWRP), nebo modernější Universal Render Pipeline (URP). Avšak v propojení s počítačem rád využívám High Definition Pipeline (HDRP) s plnou kvalitou grafiky, odlesků, stínů a dalších vlastností, případně pokročilé nastavení URP zaměřené na maximální možnou kvalitu.

Výchozí šablona pro Virtuální realitu v Unreal Engine
Ukázková scéna (XR Interaction Toolkit) v Unity

Jaký engine zvolit?

Takže Unreal nebo Unity? Osobně se mezi zmíněnými enginy rozhoduji na základě klíčové vlastnosti konkrétního projektu. Unity engine je dle mého názoru mnohem jednodušší na používání - snadněji se pro něj programují obecné nezávislé funkce, jež následně tvůrci mohou snadno a intuitivně používat. Stejně tak se každý tvůrce vlivem lepší dokumentace a větší základny uživatelů dokáže poměrně rychle a snadno dohledat řešení mnoha funkcionalit a problémů. Na druhou stranu, Unity nad Unrealem v mnoha věcech stále ztrácí, zejména v oblastech použití mimo herního vývoje. Nutno zároveň říci, že ony výhody a nevýhody jsou vždy velice relevantní konkrétnímu užití - co je obecná výhoda jednoho enginu může být ve výsledku nepodstatnou záležitostí či dokonce nevýhodou v případě potřeby konkrétního užití.

Já sám jsem velkým fanouškem Unity -  motám se kolem něj řadu let (vývoj řešení pro herní vývojáře), velmi mi vyhovuje způsob práce v enginu i programovací jazyk C#. Aktivně sleduji rychlý vývoj nových funkcionalit a produktů, stejně jako finančních výsledků pro lepší porozumění dlouhodobého vývoje a cílů společnosti - a to jak z hlediska vývojáře tak akcionáře. Přesto, Unity není enginem, jež bych tlačil a na sílu používal ve všech projektech.

Moje volba konkrétního enginu lze naprosto zjednodušit následujícím způsobem: projekty a řešení zaměřené na komplexní interaktivitu vyvíjím v Unity, vizuálně cílené projekty a řešení typu archviz v Unrealu.