30. prosince 2011

UDK - import static meshů

V tomto tutoriálu se pokusím popsat vše, co je třeba znát k úspěšnému importu, nastavení a použití static meshes (tedy nehybných modelů) v UDK. V první části začnu pouze jednoduchým importováním modelu, poté postupně vysvětlím další témata, která se static meshes souvisí:

- Kolizní modely

- UV souřadnice pro lightmapy a material channels

- Použití mřížky a tzv. modular assets

- LOD modely

Import modelu


Nejdříve tedy zkusíme importovat nějaký jednoduchý model. Předpokládám, že model je již dokončen v některém 3D softwaru a má UV souřadnice pro textury. Prvním krokem bude export modelu do formátu, se kterým si UDK poradí, tj. ASE nebo FBX. Osobně doporučuji používat spíše FBX, pokud je to možné. V nastavení exportu je třeba zaškrtnout uložení smoothing groups (ostrých hran) a UV souřadnic. V UDK potom stačí otevřít Content browser (černá ikona ve vrchní části editoru vedle ikony dalekohledu) a kliknout na tlačítko Import. Nejprve vybereme FBX soubor (pomocí kláves shift a ctrl lze vybrat více souborů zároveň) a poté se zobrazí okno s nastavením.



V části info vybíráme balíček (package) a složku (group), do které se model uloží a název (name) modelu zobrazovaný v content browseru (dále CB). Z dalších nastavení zmíním ještě volbu Combine Meshes. Ta při zaškrtnutí způsobí spojení všech modelů v FBX souboru do jednoho meshe v UDK, v opačném případě by se každý uložil v balíčku jako samostatný mesh. Pokud soubor obsahuje více modelů, které se mají použít jako jeden mesh v UDK, ale používají odlišný materiál, je třeba je spojit ještě v 3D softwaru (viz material channels dále). Pro potvrzení okna slouží samozřejmě tlačítko OK. Pod ním se nachází ještě OK To All, které importuje všechny vybrané soubory automaticky se stejným nastavením (jinak se bude zobrazovat pro každý soubor nové okno). Nyní máte v CB funkční model, zatím ale bez textur (materiálu). Vytvoření materiálu jsem popsal v několika předchozích tutoriálech, teď tedy popíši jen přiřazení už připraveného materiálu k modelu. V CB poklepejte na právě importovaný model. Potom vyberte v CB správný materiál a v pravé části okna static mesh editoru napište do pole pro vyhledávání v properties slovo Material a u nalezené hodnoty (viz obrázek dále) klikněte na ikonu zelené šipky. V případě více material channels v modelu se zobrazí takových hodnot více. Tímto jste přiřadili materiál objektu a bude použit automaticky pro všechny instance v mapě pokud nepřiřadíte konkrétní instanci materiál jiný (např. přetažením z CB přímo na objekt).

[caption id="attachment_256" align="alignnone" width="424" caption="Kliknutím obrázek zvětšíte"][/caption]

Nakonec ještě uvedu krátký popis prostředí editoru. Ve viewportu se pohybujete pomocí levého tlačítka myši - přiblížení / pohyb po odemknutí kamery a pravého tlačítka myši- rotace. Z horních ikon: (1) Realtime přepínač - pokud model používá např. animovaný materiál, tímto přepínačem zajistíte správný náhled v editoru. (2) UV overlay - zobrazí v okně editoru aktuální UV set. (3) Wireframe - zobrazení drátěného modelu. (5) Show collisions - zobrazení kolizních primitiv (viz dále). (6) Zamknutí pohledu pouze na rotaci.

Z panelu properties bych se chtěl ještě zmínit o položce perPoly collisions. Pokud budete chtít na model někdy v mapě aplikovat tzv. decal (otisk, projekce 2D textury), je třeba tuto volbu zaškrtnout.

Kolizní modely


Teď máme v balíčku importován model. Pokud bychom se ale pokusili přidat takový model do scény, zjistíme, že je průchozí a lze jej prostřelit. Nemá totiž definován žádný kolizní model. Mohli bychom sice použít pro kolize jednotlivé polygony modelu (tzv. per-poly kolize; a v UDK to v některých případech opravdu jde), to ale většinou není vhodné řešení ze dvou důvodů:

1) Výkon - Jak si asi dokážete představit, počítat kolize dvou objektů tzv. per poly metodou, kdy se počítá kolize každého polygonu jednoho modelu s každým polygonem druhého, může být pro složitější modely velmi náročné na výpočet.

2) Gameplay - Při použití per-poly metody vznikají na modelu různé malé záhyby, které ve výsledku způsobují třeba zasekávání hráče o prostředí, a to opravdu není to co bychom požadovali. Zvláště když se hráč zasekne v akční hře uprostřed boje.

Řešením obou problémů jsou zjednodušující kolizní modely. Ty nám může v případě jednodušších meshů vygenerovat UDK nebo je můžeme vytvořit ještě před exportem v 3D aplikaci. V prvním případě nám poslouží v editoru static meshů funkce Collisions > Generate collision meshes. Nastavení je třeba upravit podle potřeby podle výsledku. Pro zobrazení kolizního modelu v editoru slouží ikona na předchozím obrázku označená číslem 5.

Druhou možností, hlavně tam kde automatika nedostačuje, je tedy vytvořit si modely ručně. Kolizní modely se vytvoří v 3D aplikaci stejně jako zbytek meshe. Aby je potom UDK při importu rozeznal, používá se speciální pojmenování takových objektů. Pro kolizní modely tvaru kvádru (primitivum box v maxu) se použije předpona UBX v názvu. Pro libovolný konvexní tvar potom UCX. Zde je důležité slovo konvexní - jde o tvar, který nemá žádné záhyby směrem dovnitř. V přesné definici je to tvar, ve kterém můžeme z libovolného bodu sestrojit úsečku k jinému libovolnému bodu, tak aby vždy byla celá délka úsečky uvnitř objektu.



Ve většině případů se doporučuje používat objekty typu UCX. Kolizní modely tvaru kvádru nelze neproporcionálně zvětšovat, tzn. pokud změníte velikost objektu s takovým kolizním modelem pouze v jedné ose, kolize přestanou fungovat. Pokud budete potřebovat vytvořit kolize pro konkávní objekt (určitě se to časem stane), řeší se to tak, že každý takový objekt lze rozřezat na několik konvexních.

UV a material channels


V této části budu předpokládat, že čtenář už ví, co jsou to UV souřadnice a jak je správně vytvořit v 3D softwaru (využití místa, stretching, zrcadlení, smooth groups). Import UV souřadnic pro textury modelu probíhá v UDK automaticky, jak jste si mohli ověřit v první části. Pokud ovšem použijete v mapě tzv. statické osvětlení (tj. osvětlení počítané předem v editoru, ve hře se již nemůže měnit), bude třeba vytvořit pro většinu modelů ještě jednu sadu UV souřadnic. To proto, že se vypočítané hodnoty osvětlení ukládají do automaticky generovaných textur, tzv. lightmap.

Teoreticky je možné použít pro lightmapy stejné UV jako pro textury. Problém ale nastává ve chvíli, kdy vaše původní UV souřadnice používají např. zrcadlení, tedy že se některé polygony na výsledné textuře překrývají. To by samozřejmě byl pro lightmapy problém. V mapě bude na objekt z jedné strany pravděpodobně dopadat jiné množství světla než z druhé (která ale má na symetrickém modelu často stejné UV souřadnice). Druhou "verzi" osvětlení by potom nebylo kam uložit.

Podobně jako u kolizních modelů máme opět dvě možnosti. Tou první je nechat UDK vygenerovat novou sadu UV automaticky. To ale na rozdíl od kolizních meshů většinou není dobrý nápad. Výsledné UV jsou většinou nepoužitelné. Pokud byste i tak chtěli tuto metodu zkusit, více naleznete v oficiální dokumentaci. Druhou možností je vytvořit druhý UV set v 3D aplikaci. Např. v 3ds maxu toho docílíme přidáním druhého UVW Unwrap modifikátoru s jiným číslem Map channel. Vytvoříme tedy další UV set, tentokrát tak, aby se žádné dvě části nepřekrývaly a aby mezi jednotlivými ostrovy byly dostatečné mezery s ohledem na rozlišení výsledné lightmapy. Exportujeme model stejným způsobem jako vždy a v static mesh editoru nastavíme v části properties Lightmap Coordinate Index číslo námi vytvořeného UV setu. Pomocí položky Light Map Resolution můžeme měnit rozlišení lightmapy použité pro tento mesh (čím menší číslo, tím větší lightmapa).

Mřížka a modular assets


O tomto rozsáhlém tématu se zmíním jen krátce, o vytváření modelů pro opětovné použití v levelu a použití mřížky toho lze totiž napsat mnoho a hodně užitečných tutoriálů (v angličtině) bez problémů najdete na webu.

Účelem takových modelů je úspora času a prostředků (i když vytvoření jednoho assetu může znamenat trochu více času na začátku). Použitím mřížky se zjednoduší a urychlí umisťování modelů v mapě, navíc je tak možné podstatně snížit počet vytvářených modelů i textur. Pokud jste někdy zkoušeli postavit vlastní trať třeba ve hře Trackmania nebo staré Stunts, pak už víte, co to modular asset je. Každý ze stavebních kamenů, každá zatáčka či sloup je vlastně modular asset znovu používaný v celé hře a přesně sedící na mřížku mapy.

Použití mřížky v UDK je jednoduché. V pravém dolním rohu jsou tři položky se zaškrtávacími políčky. Jedna z nich patří přichytávání k mřížce, rozbalovací seznam vedle určuje "rozlišení" s jakým se bude k mřížce přichytávat, tedy velikost nejmenšího dílku mřížky, který se použije. Další dvě položky slouží k přichycení na konkrétní hodnoty úhlu při otáčení a na procentuální podíl při změně velikosti. Abychom ale mohli mřížku s výhodou použít, je třeba správně nastavit mřížku i našem modelovacím softwaru. Čísla pro dělení mřížky by měly být v mocninách dvou (pro 3ds max např. 16 a dělení 8), jednotky by měly být nastaveny na základní, např. Generic units v maxu. Velikost modelu v UDK se v unreal units bude rovnat velikosti v modelovacím softwaru. Potom už nám nic nebrání ve vytváření vlastních modular assets.

Většina modelu by tedy měla kopírovat mřížku. Nejdůležitější jsou místa, kde předpokládáme nějaké napojení na jíný model. Aby se ještě více ulehčilo umístění modelu v mapě, je třeba správně umístit pivot point (= gizmo, osy, střed otáčení). Tady ovšem pozor, UDK při importu nepoužije pivot point objektu z 3D aplikace, ale vždy jej umístí na střed souřadného systému modelu. Stačí tedy potom, co nastavíte správně umístění pivotu nastavit jeho pozici na 0,0,0. Bod musí jednak vždy ležet na mřížce (jinak celý systém postrádá smysl - přichycení na mřížku pracuje právě a pouze s tímto bodem), pro co nejvyšší efektivitu je ale třeba promyslet jeho umístění. Jednak by u modelů, u kterých se dá předpokládat, že je může chtít level-designer v průběhu práce nahradit jiným, je dobré umístit pivot point pro oba modely na stejné místo. Výměna totiž potom znamená v UDK pouze několik kliknutí pomocí Replace. Dále potom objekty, které budou ležet v jedné rovině (např. stěna a okno) by měly mít pivot point na stejné rovině. Podobně je vhodné u různých zatáček jej umístit do středu pomyslného kruhu, který by zatáčka vytvořila při kopírování.

Stejně jako modely lze opětovně použít i textury. Buď rovnou celé (a třeba i využít tileable textury) nebo využít s výhodou mřížku i na rozložení textury. Jednotlivé modely potom správným nastavením UV souřadnic použijí pouze tu část textury, kterou potřebují.

To bude tedy dnes vše. Pokud něco není z textu jasné, pište do komentářů. Také si můžete napsat o konkrétní tutoriál o některé součásti UDK, rád se pokusím nějaký sepsat, pokud mi k tomu budou stačit moje znalosti.

Žádné komentáře:

Okomentovat