Unreal vs Unity - srovnání áčkových herních enginů pro vývoj VR
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. Kliknutím na výše zmíněné linky se dostanete na samostatné články obou enginů. Tento článek je zaměřen na jejich srovnání - v čem se liší, na co jsou vhodné a je volba jednoho či druhého pro vývoj konkrétní hry / aplikace zásadní?
Č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í mase vývojářů. 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 programují v populárním 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í Bolt na způsob Blueprints známého z 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 internetu. 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 o něco 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í.
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.
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ámé. 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) a ještě nás to bude stát další dodatečnou práci při implementaci.
Pluginy pro efektivní import modelů a materiálů a práci s nimi v herním enginu
Unity engine
Unreal 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 a jinak upravovat a připravovat.
Při materiálech osobně preferuji řešení Substance od Adobe. To je podporováno v prostřednictvím rozšíření v obou herních enginech.
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++. Oba jazyky lze případně kombinovat (např. při potřebě doplnění funkce do rozhraní Blueprints enginu). C++ 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, odměnou je však vyšší výkonová efektivita při běhu aplikace. Nicméně, spíše než o složitosti je to o zvyku, každý jazyk má něco do sebe. Většina vývojářu v Unreal pracuje s Blueprints, jež je výkonově zejména v případě komplexnějších funkcí neefektivní. Unity vizuální scriptovací prostředí nativně neobsahuje, nicméně lze jej přidat 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 obecným, avšak snadno replikovatelným modelem nezávislých skriptů přiřazených k hiearchii objektů a subobjektů. Jednotlivé C# scripty mohou být jednoduše a nezávisle přiřazeny k jakémukoli objektu nebo do rootu. 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, zvaných actors. Takovýchto tříd je k výběru hned několik, určených pro jednotlivé způsoby použití. Součástí jsou i třídy podporující strukturu podobnou z Unity. Výsledkem je logické rozřazení do ucelených komponent podporujících dědičnost, avšak za cenu přidané práce - interaktivní komponenty totiž zpravidla je nutné tvořit ručním vložením objektů a scriptů do Actoru - tím je Unreal v rámci definice funkcionalit a přípravy interaktivit náročnější oproti Unity.
Z hlediska struktury funkcionalit nelze nazvat jeden způsob lepším než druhý - oba mají své výhody i nevýhody. Rychle zvyknout si lze na oba a při samotné práci neřešíte, co by jste jak dělali v jiném enginu - zkrátka pracujete s tím, co zrovna máte, přičemž si užíváte zrovna výhody onoho konkrétního řešení.
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ů. Na pár rychlých ukázek možností v Unreal se můžete podívat v mém YouTube playlistu Unreal Engine - tipy a triky.
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 v případě Unity 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 Unrealu je to o něco snazší - volí se pouze cílové zařízení (telefon / PC) a požadovaná vizuální kvalita (nízká / vysoká).
Jaký engine zvolit?
Takže Unreal nebo Unity? Volba může záviset od konkrétního užití, ale ve většině případů dosáhnete tíženého cíle v obou enginech. Unity engine je dle mého názoru mnohem jednodušší na používání. Na druhou stranu, Unity nad Unrealem v mnoha věcech stále ztrácí, zejména v dostupných možnostech, kompatibilitě a 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í.
Sám jsem velkým fanouškem Unity - byl jsem s ním v kontaktu po řadu let (vývoj řešení pro vývojáře her), zamlouvá se mi způsob práce v enginu a programovací jazyk C#. Aktivně sleduji rychlý vývoj nových funkcionalit a produktů i finanční výsledky pro lepší pochopení dlouhodobého směru vývoje a cílů společnosti - a to jak z pohledu vývojáře, tak akcionáře. Přesto, Unity není engine, který bych tlačil a používal ve všech případech použití. Po pravdě, poslední dobou používám pouze Unreal. I jeho vývoj je nesmírně působivý, navíc podpořený celkovou otevřeností platformy.