tom.drin
Založen: 28. 07. 2007 Příspěvky: 65
|
Zaslal: 16. srpen 2007, 20:04:24 Předmět: Vytvoření lowpoly sudu s normal mapou |
|
|
Vytvoření lowpoly sudu s normal mapou
Sud. Po bedně hned druhý nejčastější objekt ve hrách. Dnes si ukážeme jak jeden takový snadno a rychle vyrobit, a protože je doba next-gen grafiky, vytvoříme si hezký sud s použitím color, specular a normal mapy. Ukážeme si jak generovat normal mapu v 3ds Max a jak s pomocí funkce Render to Texture odstranit švy v textuře.
High poly model
Hi-poly model slouží k vygenerování normal map, které posléze aplikujeme na low-poly model.
Normal mapa nám zajistí efekt plastičnosti, takže objekt bude vypadat detailní. Proto nemusíme
low-poly model dělat moc detailní na povrchu, a radši soustředíme polygony do obrysů.
Vytvořit model sudu je velice snadné, protože sud je tvarem dokonalý válec. Proto tedy začneme s cylindrem.
Počet stran zvolte kolem 18-20, bude to bezproblémů stačit (navíc se po meshsmoothu dále vyhladí). Počet segmentů na výšku už volte podle toho, jaký sud chcete dělat. Já se rozhodl pro sud na který budu potřebovat segmentů 25. Výsledný cylinder překonvertujeme na Editable Poly.
Na model aplikujeme modifikátor Meshsmooth. Tento modifikátor nám vyhladí mesh znásobením počtu polygonů. Já jsem použil počet iterací 2, ale jen u renderu, protože nebude zatím potřeba s vyhlazeným modelem pracovat. Dále jsem zaškrtl, aby se vyhlazovalo v závislosti na Smoothing groups. Tato záležitost je výhodná, pokud má model ostré hrany. Pokud by jsme toto nezapnuly, tak by musela být každá ostrá hrana složena z několika hran blízko u sebe, jinak by se zaoblila.
Jednotlivé loopy cylindru si rozestavíme tak, jak budou vroubky na sudu. Vybírání hran si usnadníme tak, že si označíme vždy po jedné hraně z "obvodových kruhů" a zmáčkneme tlačítko loop.
Nyní si vybereme ty loopy, které budou tvořit měkké vroubky a použijeme scale tak aby se kruhy zvětšily jen po ose x a y. To samé provedeme s ostřejšími hranami uprostřed, které zvětšíme nepatrně více.
Teď přichází na řadu vršek a báze sudu. Vybereme tyto polygony a pomocí funkcí extrude a bevel vytvarujeme stěnu sudu a mělkou proláklinu. Stěna by měla být raději silnější, protože musíme počítat s tím, že low poly sud nebude přesný kruh, ale mnohoúhelník, tudíž by mohla být stěna v jistých místech úplně úříznutá.
U vršku sudu uděláme víko. Záleží na naší fantazii. Já se snažil výko tvarovat tak, aby bylo v normal mapě lépe vidět (což se mi, jak dále uvidíte moc nepovedlo). Nakonec přidáme uzáver (opět cylinder) a sloučíme ho se sudem.
Ještě než si výsledou krásu vyrenderujeme, tak musíme nastavit smoothing groups tak, aby modifikátor meshsmooth mohl správně pracovat. V režimu práce s polygony nebo elementy vybereme celý sud a použijeme autosmooth na 45 stupňů. Protože se mohlo stát že střední vroubky po obvodu sudu, svírají moc ostrý úhel, a po autosmoothu polygonům kolem nich přiřadil rozdílný smoothing group, tak to opravíme ručně, a nastavíme jim takový index jako mají ostatní polygony na plášti sudu.
V tomto momentu máme hi-poly model hotový. Pokud by bylo potřeba sud promáčknout (což ve výsledku vypadá reálněji), nastavíme v modifikátoru meshsmooth iteraci na mesh (né na render) a collapsneme stack (klikneme na objekt a překonvertujeme na Editable Poly). Poté ručně (nebo pomocí displace modifikátoru pokud máme vhodnou mapu) vytvarujeme promáčknutí. Při tvarování promáčknutí použijeme funkci soft selection, která způsobí, že budeme ovlivňovat i okolní vertexy.
No a na závěr jeden render dvou pomačkaných a jednoho nepomačkaného sudu.
Low poly model
Vytvoření low poly modelu sudu je ještě lehčí než hipoly model . Vytvoříme si cylinder o stejně výšce a poloměru jako byl hipoly model. Nastavíme mu počet segmentů na výšku 1 a počet stran podle toho, kolik polygonů má mít výsledný objekt. Poté pokud chceme začistíme vršek. Můj výsledný low poly sud má 60 trianglů.
A namapujeme UV koordináty. Jelikož nově vytvořený primitiv už má vytvořené koordináty, stačí nám je pouze upravit pomocí modifikátoru Unwrap UVW. Já raději používám plugin zvaný TurboUnwrap (nebo v nových verzích UnwrapTools), který můžete najít volně ke stažení zde: http://www.chuggnut.com/scripts/unwraptools/unwraptools.htm .
Má podobné rozhraní jako maxovský Unwrap UVW (tedy ten z dřívějších verzí) a nabízí spousty jednoduchých, ale užitečných pomůcek. Vybereme polygony podstavy a vršku a dáme je vedle, tak aby měly samostatný prostor. Nakonec je i s pláštěm vměsnáme do vyznačené oblasti.
Generování normal map
Pokud máme hipoly i lowpoly model hotový, umístíme je tak aby se překrývaly. Označíme si lowpoly model a zmáčkneme 0, což nám vyvolá okno Render to texture. V části Projection Mapping je potřeba kliknout na Pick a vybrat všechny objekty které chceme promítnout do normal mapy. V sekci Mapping Coordinates zkontrolujeme, zda je zvoleno Use Existing Channel (channel 1). Dále přidáme v záložce Output do seznamu renderovaných textur normal mapu.
Renderování normal map v maxovy funguje tak, že lowpoly modelu nastavíme určitou klec (cage). Při renderování pak max sleduje co se vyskutuje od povrchu této klece směrem k povrchu lowpoly modelu a dál za ním. Poté co jsme v minulém kroku použili Projection Mapping se nám nad lowpoly sudem objevil modifikátor Projection. Ten slouží k nastavení klece. V záložce Cage se naléza tlačítko Reset.
Zmáčkneme ho, aby jsme klec dostali do výchozí polohy. Klec upravujeme klasicky posunováním vertexů (nebo použitím funkce push), ale je potřeba si dávat pozor, aby žádná část hipoly modelu nepřečnívala přes klec (aby jsme to lépe viděli, můžeme zaškrtnout Shaded v záložce Cage), jinak by se ve vyrenderované normal mapě objevili chyby (sytě červené fleky).
Renderování budeme muset provést 2x, aby jsme dostali dobrý výsledek. Poprvé pro základnu a spodek, tak že klec nastavíme, aby končila kousek nad vrškem sudu a kousek pod podstavou. Pokud dáme render (pořád v okně render to texture; Nelekněte se, že se vám v maxovi nerenderuje normal mapa, ale nějaká podivná complete mapa. Normal mapu naleznete tam, kam jste maxovi zadali cestu v záložce Output.), uvidíme že plášť se nám vyrenderoval také, ale čáry nejsou úplně rovné.
Proto vyrenderujem podruhé: klec předtím nastavíme tak, že podstava a vršek klece bodou výškově splívat s podstavou a klecí lowpoly modelu a zvětšíme jí po ose x a y tak, aby žádný povrch hipoly modelu nevystupoval z klece (zaškrtneme shaded u projection modifikátoru pod záložkou cage aby to bylo lépe vydět). Po vyrenderování uvidíme že vroubky na plášti jsou už rovné.
Z obou map vybereme to potřebné a dáme dohromady v Photoshopu a případně začistíme okraje. Na low poly model aplikujeme normal mapu. (Do slotu pro bump mapu vložíme materiál normal bump a načteme normal mapu. Ve starších verzích maxe je potřeba použít speciální plugin.)
Více o generování normal map najdete v perfektním tutoriálu od Bena Mathise: http://www.poopinmymouth.com/tutorial/normal_workflow.htm
Textura
K vytvoření color (diffuse) textury nepoužívám žádné speciální placené balíky textur. Používám buď vlastní fotky a nebo jako v tomto případě zabrouzdám na google image a vyhledám si pěkné textury a fotky (dávejte si pozor aby byly skutečně free). Po zadání různých variací na rust, metal atd. jsem si připravil tyto textury:
1,
2,
3,
4
Pomocí pluginu Texporter nebo Turbo Unwrap si vyrenderuju rozložení sítě (budu pracovat v rozlišení 1024x1024) a dám si jí do samostatné vrstvy.
Jako základ použiji texturu 4, přes kterou dám jako overlay desaturovanou (na 50 procent; Ctrl+U) texturu číslo 3.
Poté přidám texturu 1 abych získal hezkou načervenalou barvu rzy.
Když je základ hotový přidáme ještě trochu "původní" barvy. Použiji texturu 2, kterou úpravou Hue a Saturation udělám trochu nazelenalou. Na layer s touto texturou použiji Add Layer mask. Masku vyplním černě aby nebylo nic z této vrstvy vidět a pak bílou barvou měkkým štětcem nanáším texturu.
Odstranění švů
Nyní potřemujeme odtranit šev na plášti, protože vytvořenou color texturu použijeme na vytvoření struktury u normal mapy. Jelikož je zde šev rovný a přehledný, šlo by ho odstranit jednoduše ručně. Ale já vám chci ukázat univerzální metodu, která je sice trochu složitější, ale zato se vám bude náramně hodit u složitějších objektů. Takže nejdříve najdeme šev a polygony kolem něj si zkopírujeme do zvláštního objektu. Potě na něj použijem Unwrap UVW a do druhého kanálu namapujeme tuto část tak aby zde předchozí šev nebyl.
Opět použijeme Render to Texture, ale tentokrát nepoužijeme projection mapping. Zadáme, že chceme aby se textura vyrenderovala podle mapování ve druhém kanálu (Mapping Coordinates > Use Existing Channel > channel 2), a necháme si vyrenderovat diffuse mapu.
Když máme vyrenderováno tak nejjednodušší způsob jak šev přemalovat, je za použití Clone Stamp nástroje z Photoshopu. Opravenou texturu pak použijeme v maxovy jako nový materiál a nezapomenene označit že se má použít kanál 2.
Teď už je to jednoduché. Postupujeme přesně jako před chvílí použitím Render to Texture, jen vyrenderujeme texturu za použití mapování v kanálu 1 (Mapping Coordinates > Use Existing Channel > channel 1). Vyrerenderovanou mapou překryjeme původní a odstraníme černé pozadí.
Zdetailnění normal mapy a specular mapa
Opravenou "bezešvou" color mapu na výrobu specular mapy. Musíme jí však desaturovat a trochu zvýšit kontrast.
Takto vytvořenou specular mapu použijeme i na normal mapu. Zde jí musíme upravit pomocí pluginu Normal map filter od NVidie, který můžete stáhnout na adrese http://developer.nvidia.com/object/photoshop_dds_plugins.html . Já jsem použil následovné nastavení:
citace: |
Height source: Average RGB, Alpha field: Set to 1.0 a scale u Height Generation na 2. Výsledek použijeme jako overlay přes předem vygenerovanou normal mapu. |
A takhle to zatím vypadá.
Dokončení textury
Teď už jen doladíme texturu, přidáme jemné stíny, nápisy a značky.
Stíny můžeme udělat několika způsoby. Buď si nastavíme v maxovy nějaké jemné a rovnoměrné světlo a poté pomocí Render to Texture vygenerujeme Shadow map nebo Light map, nebo využijeme jeden malý fígl, který ale nemusí vždy fungovat. Z normal mapy jsem si zkopíroval jen modrý kanál (v záložce Channels klepněte na Blue kanál, CTRL+A , CTRL+C) a vložil přes color mapu (blending mode: Multiply) - viz.1 Uzávěr víka pak zesvětlíme a kolem něho zetmavíme, případně přidáme nějakou špínu - viz 2
Nakonec přidáme nápis a nějakou výstražnou značku do nové vrstvy. Nový nápis by však nepůsobil přirozeně, proto ho musíme trochu umazat. Použijeme Add Layer Mask a do ní Filter>Render>Difference Clouds. Teď je nápis nepravidelně zašlý, v případě potřeby masku upravíme ručně štetcem.
Výsledek
Jsme u konce a máme hotový sud, který by měl vypadat pod jednoduchým osvětlením nějak takhle:
A zde je ješte video, které předvádí, jak sud reaguje na světlo.
Doufám, že někomu můj tutoriál pomohl. Veškeré námitky, otázky a nadávky směřujte do komentářů pod článkem nebo na e-mail.
Tomáš Dřínovský
portfolio: http://tomdrin.ceske-hry.cz
e-mail: tom.drin@post.cz |
|