diff --git a/ch2.tex b/ch2.tex index c233614..6e2eac6 100644 --- a/ch2.tex +++ b/ch2.tex @@ -190,7 +190,7 @@ V Unreal Engine verze 5 navíc přidali bohatý na funkcionality editor 3D model \paragraph{Použití cizích assetů} Rychlejší a občas jednodušší je získání assetů třetí strany. K tomu existují různé volně dostupné webové platformy. Jednou z takových platforem je FAB, který navíc má přímou integraci s UE 5. Objektivně FAB nemá dostatečně velký výběr assetů, jelikož nemá ani dostatečnou popularitu vývojářů a tvůrců. Přičinou jsou hlavně větší platformní marže z prodeje a sice jednoduchý, ale přesto nevýhodné licencování produktů pro kupující stranu. Z finančních důvodu, v této praci byli využite pouze produkty dostupné zdarma. Neznamená to, že vše skončí pouhým stahnutím souborů a vložením do editoru. Často (v této práci všech 100%) assety nevypovídají žádnou známku optimalizace nebo profesionální tvorby. Modely tak mají některé normaly plošek invertované, středové body jsou nesmyslně mimo, textury a UV mapy je potřeba kompletně předělat. Nejhorší jsou primitivní objekty, které mají bezdůvodně velké množství vrcholů. V praxi se nachází i náhodné vrcholy, bezúčelně rozházené v prostoru modelu. -\paragraph{Vlastní tvorba} Vlastnoručně jsou tvořeny modely ze staré verze hry a během vývoje této práce se pouze upravovali nebo tvořili textury. Standardem v oboru jsou obecně Maya nebo 3D Max pro všeúčelové zpracování a úpravy, ZBrush pro sculpting a Substance Painter pro texturování objektu. V tomto projektu byl použit výhradně Blender a software pro editaci obrazkových formátů, které jsou k dispozici na internetu zdarma. Výsledný model lze často bez problémů rovnou využít v enginu. +\paragraph{Vlastní tvorba} Vlastnoručně jsou tvořeny modely ze staré verze hry a během vývoje této práce se pouze upravovali nebo tvořili textury. Standardem v oboru jsou obecně Maya nebo 3ds Max pro všeúčelové zpracování a úpravy, ZBrush pro sculpting a Substance Painter pro texturování objektu. V tomto projektu byl použit výhradně Blender a software pro editaci obrazkových formátů, které jsou k dispozici na internetu zdarma. Výsledný model lze často bez problémů rovnou využít v enginu. \paragraph{Modeling a Sculpting} Nejprv se vytvaří tvar modelu. Toho se docíli pomoci modelování polygonů nebo sculptingu. Obě metody jsou velmi odlišné a stejně tak mají odlišný výstup. @@ -198,40 +198,63 @@ Sculpting se provádí předevšim přes grafický tablet, kde pomoci různých Modeling na druhou stranu je obecnější zpracování vrcholů, hran a ploch. Tady se manuálně přidavají resp. odebírají a posouvají vrcholy. Navíc toto prostředí obsahuje funkce umožňující různé druhy chytrého instancování, množinových operací mezi objekty a zjednodušených simulací vrcholů a tedy i objektů. V takovém prostředí se tvoří především komplexní resp. hybrydní nebo tvrdé povrchy jako například nábytek, architektura nebo scény se sculpting modely. +Specifickou scuplting instancí v enginu je Landscape, de-facto siť vrcholů předem určené hustoty, kterou můžeme v editoru sculptovat a napodobovat křivý resp. různě vysoký teren. Manuální sculpting je pomalý a přináší slabé až nevyhovující výsledky. Proto místo sculptingu se používá výškova neboli height mapa, což je textura odstinů šedí, kde káždý pixel kóduje výšku v 3D prostoru. Potom stačí naskénovat nějaký povrch (například reálný teren) a během par minut získat skvělé výsledky. Stejné height mapy lze použivat i jako štětce v běžném sculptingu, pro specifické detalizace povrchů, a samotné height mapy lze získat na nějakých online platformach dokonce zdarma. + \paragraph{Animace} Animace se tvoři v dalším kroku modelingu. Pokud jsme předtím vytvořili model pomoci sculptingu, potřebujeme ho imortovat do modeling prostředí. Začíná se tvorbou umělé kostry z tzv. kostí a kloubů. Klouby slouží pouze k specifikaci hierarchie mezi kosti, tak že nějaká kost propaguje vlastní modifikaci na všechny následující. Navíc specifikují střed rotačního bodu. -Kostí jsou samostatné absraktní označení pro nosič prostorových transformací, pro který můžeme přiřadit množinu vrcholů. Potom v logice nějáké animace stačí pouze posouvat určité kostí a nějaký předrendrovácí engine bude souvislé modifikovat přiřazené vrcholy. Navíc kostí často modifikují vrcholy podle předem úrčené váhy pro každý vrchol, čímz lze škálovat a skládat posuny různých kostí na úrčitých vrcholech. Jen je potřeba brát v úvahu, že skeleton animace neboli modifikace provedené předrendrovacím enginem jsou spouštěné na CPU, jelikož jsou řízeny nějakou logikou herního světa (moderní procesory s instrukčními sady AVX a více jádry v takových úlohach dokažou předvádět poměrně skvělé resp. přebytečně dostačující výkony). +Kostí jsou samostatné absraktní označení pro nosič prostorových transformací, pro který můžeme přiřadit množinu vrcholů. Potom v logice nějáké animace stačí pouze posouvat určité kostí a nějaký předrendrovácí engine bude souvislé modifikovat přiřazené vrcholy. Navíc kostí často modifikují vrcholy podle předem úrčené váhy pro každý vrchol, čímz lze škálovat a skládat posuny různých kostí na úrčitých vrcholech. Jen je potřeba brát v úvahu, že skeleton animace neboli modifikace provedené předrendrovacím enginem jsou spouštěné na CPU, jelikož jsou řízeny nějakou logikou herního světa. Moderní procesory s instrukčními sady AVX a více jádry v takových úlohach dokažou předvádět poměrně skvělé až nadbytečné výkony. V Unreal Engine 5 přidaly rozhraní pro tvorbu skeleton animací přímo v editoru. Předtím bylo možné pouze hotové animace naimportovat. Uvnitř editoru je přiliš mnoho způsobů jak režirovat animace (myšleno přehrávání, slepení přechodů, modifikace, skládání atd.) a lze se v tom jednoduše ztratit. V základu je předpokládáná tvorba state-machine, který bude přehrávat a cyklit jednotlivé animace v závislosti na větvení grafu a podmínkach hran. Táto práce obsahuje pouze jednoduché animace postav, které byli přenesené ze staré verze. Animace hráče navíc disponuje immersivním otačením trupu a animace nohou jsou přitahovány k podlaze pomoci inverse kinematic metody. +Tráva vidítelná na úrovních 1 a 2 je animováná pomoci offsetů vrcholů, zmíněna v předchozí kapitole. V reálnem čase pod hráčem se generují částíce s barevným gradientem kódující offset v prostoru. Takové častíce jsou vidítelné pouze pro speciální render target menší velikosti -- sníma se pouze blízké okolí hráče. Materiál trávy následný render target interpretuje jako texturu, kterou interpoluje spolu s texturou jednoduchého proceduralního shaderu větru dostupného v enginu. Výsledkem je výkonná procedurální animace reakce na vítr a chůzi hráče v okolí objektu obsahující velké množství instancí resp. vrcholů. + \paragraph{Texturování} Za účelem texturování nejdřív potřebujeme objektu úrčit jedinečnou UV mapu, která bude mapovat plochy 3D modelu na normalizovaný prostor 2D obrázku. Často tvůrci mají na začatku problem pochopit o co se vlastně jedná a jak model rozložit. K tomu může napomoct myšlenka s rozlepováním resp. slepováním hran papírové figurky. Celý koncept UV mappingu je totožný se zpětným procesem tvorby například papírove krychlé, kde nějak rozbalenou krychli skládáme z jednoho uceleného kousku materiálu. Když máme hotové mapování, můžeme volně přirazovat textury, které mohou úrčovat barvu vrcholů, modifikovat jejích normalový vektor, lesk, matnost, průhlednost a případně další. Přibližně do roku 2014, kdy vznikl Substance painter a dnes i jeho alternativy, jediný způsob texturování objektu bylo manuální ,,kreslení'' navrch vytvořené mapy. Dnes existují uživatelsky přijemné softwary, kde stačí kreslit rovnou komplexní materiály na povrch 3D modelu a aplikace sama obstará data všech textur. V tomto projektu většína objektů nepoužívá diffusní textury a vybarvování modelů je tvořené pomocí vybarvování určítých skupin jeho ploch. Přesto jsou často využiváné normal mapy nebo masky průhlednosti. Bohůžel se můsely zahodit mapy pro tesselaci povrchů používáné v staré verzi projektu, jelikož s příchodem UE 5 tvůrci odebrali celou podporu tesselace kvůli technologii Nanite. -\paragrah{Exportování} +\paragraph{Exportování a Importování} +Workflow nebo pipeline exportu jsou standardizováné v profesionálních softwarech jako 3ds Max. Blender má pouze základní možnosti exportu, které je potřeba nejdřív přizpusobit spicifickému hernímu enginu. Potřebný minimum je zajištění správné interpretace dopředního a vrchního vektorů celého modelu. Taky se vyplatí: +\begin{itemize} +\item nastavit šablonu pro všechny budoucí projekty, tak aby modelovací program a herní editor sdíleli měřítko jednotek, +\item vyzkoušet jak se chová exportovaná hierarchie modelů v jednou souboru, +\item před exportem ověřit že všechny plošky modelu mají správně natočený normalový vektor (očekává se směr směrující na venek z objektu). +\end{itemize} +Unreal engine se jeví standardem herního oboru a proto verze 5 implementuje systém importovacích pipelines. Jedná se o mocný nástroj, který citelně zrychluje a sjednocuje postupy importování různých assetů nebo dokonce stejných assetů podle specifických filtrů (adresař assetu, typ, obsah, podřetězce názvu atd.). Subjektivně největší výhodou je předání zodpovědnosti specifického importu pouze osobam v týmu s odpovídajícími znalostmi. V praxi týmový senior založí pipelines pro často využíváné importy, tak aby odpovídali vnitřním firemním politikam a proto nováček v týmu resp. celý tým nemá žádné starosti při importu assetů. -\paragrah{Další techniky} -%landscape -%instancovani +\paragraph{Optimalizace} Ikdyž objekty jsou statické, stále vyžadují optimalizace. Takový lze najít i v tomto projektu: +\begin{itemize} +\item Instancování -- jíž zmínene v predchozí kapitole -- se využívá k tvorbě prostorů hustých na specifické modely. V UE se jedná o editovácí prostředek sousedicí vedle Landscape. Umožnuje pokročilé nastavení různých množín instancí a jejích parametry náhodného umístění. +\item Optimální topologie objektu pro minimalizaci vrcholů potřebných k vykreslování. Převážná většina modelů -- patří sem i získáné od třetích stran -- mají růčně přepracovanou topologii. Jedná se nejen o jednoduchou redukci nepotřebných vrcholů, ale taky použití techniky ,,lítající'' neboli floating geometrie. Tato metoda spočívá v protínání plošek, místo skutečného propojení vrcholů někde uprostřed, protože takové propojení by vyžadovalo podrozdělení jedne z ploch a tedy zbytečného zvětšení vrcholů (viz. \Cref{fig:FloatingGeometry}). Taktéž objekty mají redukovanou k-DOP kolizní topologii, pro urychlení výpočtů fyzických simulací. +\item Modely náročné na vykreslování nebo použité v instancování používájí LOD technologii (viz. \Cref{fig:LodShowcase}). Nanite v práci nebyl využit. +\end{itemize} +Optimalizace textur je zprovozněná pouze hlídáním rozumných rozlišení. Jinak některé textury určitě je možné seskupit do jedné textury a vybírat potřebnou instanci podle UV mapy, což zrychlí přístup k datům. -\paragraph{Optimalizace} -%mesh sit -%kolize -%lod/nanite -%animace -%textury co nejmensi velikosti a poctu +Jiná grafická optimalizace není nijak řešená. Modely použité v instancování občas mohou vyvolat snižení výkonu, což by bylo potřeba už řešit nahrazením plnohodnotných modelů na kolekce průhledných textur. + +\begin{figure} +\centering +\includegraphics[width=1\linewidth]{img/FloatingGeometry.pdf} +\caption{Floating geometrie využitá v modelu okna. Vlevo je výsledný vzhled, uprostřed floating topologie (48 vrcholů a 52 trojúhelniků) a napravo naivní běžná topologie (64 vrcholů a 152 trojúhelniků).} +\label{fig:FloatingGeometry} +\end{figure} + +\begin{figure} +\centering +\includegraphics[width=1\linewidth]{img/LodShowcase.pdf} +\caption{Ukázka LOD instancí kytky.} +\label{fig:LodShowcase} +\end{figure} \subsection{Dynamické a procedurální objekty} %animace baked a matinee / sequencer %trava -%voda %modifikace site %optimalizace diff --git a/img/FloatingGeometry.pdf b/img/FloatingGeometry.pdf new file mode 100644 index 0000000..3cc26db Binary files /dev/null and b/img/FloatingGeometry.pdf differ diff --git a/img/LodShowcase.pdf b/img/LodShowcase.pdf new file mode 100644 index 0000000..b36f7fb Binary files /dev/null and b/img/LodShowcase.pdf differ