Vyhlazování hran, aneb konečná optimalizace modelu
Vážení přátelé modelování a vytváření objektů do hry Rule the Rail. Pokud také pracujete s programem Sketchup, pak jste se, stejně jako já, museli potýkat s problémem, že hrany které jsou v programu Sketchup vyhlazené (smooth edge), jsou ve hře RTR ostré, lámající světlo na dvě přesně oddělené plošky. Pojďme si ten problém ukázat na obrázcích.
Na tomto obrázku, je klasický příklad modelu, vytvořeného v programu Sketchup. Stojan lampy je tvořen vytaženými válci, samotné těleso lampy je tvořeno obecnými zakřivenými plochami, které jsem vytvořil nástrojem "Follow me", tedy orotováním profilové křivky (plochy) po kružnici.
Ve sketchupu existují dva druhy hran. Jedny, ty viditelné, jsou pevné hrany, oddělující plochy od sebe. Ty druhé, v běžném zobrazení neviditelné, jsou tzv. vyhlazené hrany. Pro jejich zobrazení musíte v menu zvolit položku "View: hidden geometry". Tyto hrany jsou speciální tím, že plochy, které jsou sousedící skrze tuto hranu, mají společné normály, a tedy světlo a stíny dopadající na model vytvářejí dojem jednolité zakřivené plochy. Nevypadá to jakoby vedle sebe byly dvě rovné plošky, ale jakoby tam skutečně byla zakřivená plocha. Kliknutím pak na plochu, označíte oblast vymezenou klasickými pevnými hranami, ačkoliv uvnitř plochy může být spousta skrytých a vyhlazených hran.
Každá hrana, lze změnit na tu opačnou: Kliknete-li na tu tečkovanou pravým tlačítkem, je tam možnost "Unsoften" , a hrana se zviditelní a stane se klasickou pevnou hranou. Pokud tuto klasickou hranu chcete opět vyhladit, jděte do menu: Window/ Soften edges.
Otevře se vám okno, ve kterém posuvníkem volíte, zda bude hrana vyhlazená, či nikoliv. Zkontrolujte zda je, stejně jako na obrázku, v okně zaškrtnuta možnost: "Smooth normals". Označte hranu. Chytněte posuvník a jeďte s ním doprava a uvidíte, že se změní tvar objektu, tím jak se hrana vyhladí. Pokud byste neměli zaškrtnutou možnost Smooth normals, hrana by se sice zneviditelnila, ale světlo by se dál lámalo, jako u klasických hran.
Dobře, tolik teorie, pojďme zpátky k našemu příkladu. Jak vidíte na obrázku, ve Sketchupu mám udělanou lampu, která má vyhlazené plochy. Tento model klasicky exportujeme pomocí pluginu a otevřeme ve hře Rule the Rail. Co uvidíme, je ten samý model, ale hrany, které byly ve sketchupu vyhlazené, jsou ve hře všechny ostré !! Viz obrázek:
Ve sketchupu existují dva druhy hran. Jedny, ty viditelné, jsou pevné hrany, oddělující plochy od sebe. Ty druhé, v běžném zobrazení neviditelné, jsou tzv. vyhlazené hrany. Pro jejich zobrazení musíte v menu zvolit položku "View: hidden geometry". Tyto hrany jsou speciální tím, že plochy, které jsou sousedící skrze tuto hranu, mají společné normály, a tedy světlo a stíny dopadající na model vytvářejí dojem jednolité zakřivené plochy. Nevypadá to jakoby vedle sebe byly dvě rovné plošky, ale jakoby tam skutečně byla zakřivená plocha. Kliknutím pak na plochu, označíte oblast vymezenou klasickými pevnými hranami, ačkoliv uvnitř plochy může být spousta skrytých a vyhlazených hran.
Každá hrana, lze změnit na tu opačnou: Kliknete-li na tu tečkovanou pravým tlačítkem, je tam možnost "Unsoften" , a hrana se zviditelní a stane se klasickou pevnou hranou. Pokud tuto klasickou hranu chcete opět vyhladit, jděte do menu: Window/ Soften edges.
Otevře se vám okno, ve kterém posuvníkem volíte, zda bude hrana vyhlazená, či nikoliv. Zkontrolujte zda je, stejně jako na obrázku, v okně zaškrtnuta možnost: "Smooth normals". Označte hranu. Chytněte posuvník a jeďte s ním doprava a uvidíte, že se změní tvar objektu, tím jak se hrana vyhladí. Pokud byste neměli zaškrtnutou možnost Smooth normals, hrana by se sice zneviditelnila, ale světlo by se dál lámalo, jako u klasických hran.
Dobře, tolik teorie, pojďme zpátky k našemu příkladu. Jak vidíte na obrázku, ve Sketchupu mám udělanou lampu, která má vyhlazené plochy. Tento model klasicky exportujeme pomocí pluginu a otevřeme ve hře Rule the Rail. Co uvidíme, je ten samý model, ale hrany, které byly ve sketchupu vyhlazené, jsou ve hře všechny ostré !! Viz obrázek:
Kryt lampy, stejně jako stojan, láme světlo na hranách tak, jako by byly ostré, a nikoliv vyhlazené. Každá hrana je moc dobře viditelná. Pokud jsme tak chtěli vytvořit do hry model, který bude vypadat hezky, museli jsme vytvářet plochy o vysokém počtu polygonů, které by tak zamaskovaly ony ostré přechody.
Schválně jsem k obrázku vložil i model od Dave-ho, Sloup trolejového vedení z archivu catenary. Ačkoliv je jeho sloup tvarově jen obyčejný hranol, ve hře vypadá pomalu kulatěji než moje lampa z 12-ti segmentové kružnice. To právě kvůli tomu, že normály na jeho hranách jsou společné pro obě sousedící plochy a vytváří tak tento odraz světla, který se jeví, jakoby tam žádné hrany ani nebyly. A to je náš úkol. Dave k modelování použil jiný software (zřejme Anim8or), jež umí model exportovat tak, že ve hře vypadá shodně jako v programu.
U nás je tomu jinak. Ačkoliv je Sketchup geniálně jednoduchý a uživatelsky příjemný, tak nemá svou vlastní podporu formátu X.
K exportování používáme plugin třetí strany 3d RAD_Exporter, který zřejmě není tak kvalitní, jak bychom potřebovali. Zejména co se týká právě těch vyhlazených ploch. Druhý jeho nedostatek jsou převrácené roviny YZ a tak musíme pokaždé model převracet podél červené osy. Kdybychom měli kvalitní plugin, žádnou z těchto věcí bychom nemuseli řešit. Čas od času se dívám po novém pluginu, ale stále jsem nic lepšího nenašel.
A tak musel přijít na řadu záložní plán: kterak učinit, aby i naše Sketchupovské modely měly vyhlazené hrany. Jako např. tady ta druhá lokomotiva na obrázku:
Fragmotion - zázrak z nebes
Dámy a pánové, dovolte mi, abych vás seznámil s dalším nástrojem, který budete při své práci potřebovat. Jmenuje se: FRAGMOTION
Krom toho, že se používá především na tvorbu skeletonů a tedy animací, tak v něm lze provádět i dílčí úpravy souborů X, aniž bychom museli tento typ souborů konvertovat do jiného formátu. Fragmotion umí soubory directX jak importovat, tak exportovat. V základní verzi je program zdarma, ale co týden budete muset při spuštění odťukat do klávesnice anglickou podobu modlitby otčenáš, jenž jsi na nebesích ... To se dá přežít :)
Oproti Sketchupu má trošku odlišný způsob práce a rozmístění nástrojů, ale vše se dá naučit a na jejich stránkách mají navíc poměrně vyčerpávající návody a tutoriály, i když pravda, jen v angličtině. Jakmile si ale zvyknete, zjistíte, že tento program toho umí skutečně mnoho!
POSTUP:
1) Klasicky vyexportujte váš model ve Sketchupu pomocí pluginu do formátu X.
2) Otevřete Fragmotion. Zvolte File / Import ... a vyberte váš soubor X
3) Pohledy se natáčí pravým tlačítkem myši. V horní liště si můžete zvolit jiné pohledy, zobrazit drátový model, anebo zviditelnit vertexy (body na koncích hran(alt+V) ). Fajn, až si pohrajete, jděte do menu: Vertex / Weld All
Vyskočí okno, ve kterém zadáváte jakou toleranci má program uvažovat. (Weld znamená svařit. Program tedy spojí všechny body, které jsou takto blízko, nebo tak nějak si to představuju :))) Ponechte (zadejte) hodnotu, která je na obrázku.
Krom toho, že se používá především na tvorbu skeletonů a tedy animací, tak v něm lze provádět i dílčí úpravy souborů X, aniž bychom museli tento typ souborů konvertovat do jiného formátu. Fragmotion umí soubory directX jak importovat, tak exportovat. V základní verzi je program zdarma, ale co týden budete muset při spuštění odťukat do klávesnice anglickou podobu modlitby otčenáš, jenž jsi na nebesích ... To se dá přežít :)
Oproti Sketchupu má trošku odlišný způsob práce a rozmístění nástrojů, ale vše se dá naučit a na jejich stránkách mají navíc poměrně vyčerpávající návody a tutoriály, i když pravda, jen v angličtině. Jakmile si ale zvyknete, zjistíte, že tento program toho umí skutečně mnoho!
POSTUP:
1) Klasicky vyexportujte váš model ve Sketchupu pomocí pluginu do formátu X.
2) Otevřete Fragmotion. Zvolte File / Import ... a vyberte váš soubor X
3) Pohledy se natáčí pravým tlačítkem myši. V horní liště si můžete zvolit jiné pohledy, zobrazit drátový model, anebo zviditelnit vertexy (body na koncích hran(alt+V) ). Fajn, až si pohrajete, jděte do menu: Vertex / Weld All
Vyskočí okno, ve kterém zadáváte jakou toleranci má program uvažovat. (Weld znamená svařit. Program tedy spojí všechny body, které jsou takto blízko, nebo tak nějak si to představuju :))) Ponechte (zadejte) hodnotu, která je na obrázku.
Poté, co jste provedli příkaz, na řádku dole se zobrazí zpráva, kolik Vertexů bylo odebráno.
V našem případě (viz obr.) je to 6540 vertexů. To je hodně, a to se podepíše i na celkové velikosti souboru, který díky tomu bude mít méně kB.
4) Fragmotion ke každému vloženému modelu automaticky vloží první "kost" (bone) a informace o skeletonu. Přímo uprostřed souřadnicového systému můžete vidět modrou kuličku. To je ona kost, která přijde vymazat.
V panelu Tools napravo, vyberte: Select / Select bone. A klikněte a táhněte okolo středu obdelník, abyste označili ony kosti, patřící skeletonu. Jakmile označíte, zmáčkněte Delete, pro jejich vymazání. Všimněte si, že nalevo v panelu Skeleton, se vytratily oba dva záznamy o kostech. Bude tam pouze nápis Skeleton, aniž by pod ním cokoliv jiného bylo.
5) Je na čase model uložit. Jděte do menu: File / Export a zvolte formát - Direct X Files (.x)
Vyskočí okno s nabídkou. Odškrtněte všechny možnosti a ponechte nastavení tak, jak je na obrázku.
Vyskočí okno s nabídkou. Odškrtněte všechny možnosti a ponechte nastavení tak, jak je na obrázku.
TIP ! - Všimněte si jak nám po exportu klesla velikost modelu o příjemných 300 kB.
Když si v programu k prohlížení Direct X souborů (MeshView), otevřete oba naše soubory X. Model před optimalizací a model po exportu z Fragmotion, uvidíte co jsme vlastně provedli. Je zapotřebí v menu prohlížeče zapnout zviditelnění tzv. Creases. Klávesová zkratka "r", anebo tlačítko "C" v liště nabídek. Žlutě se označí všechny hrany, které zůstanou hranami i na modelu, tj. světlo se tam bude lámat ostře. Vše ostatní bude vyhlazené.
INFO: Je důležité pochopit, co se tou operací stane s modelem. Fragmotion vyhladí přesně ty plochy, které byly hladké i ve Sketchupu ! Tzn, třeba střecha, nebo válce nárazníků.
INFO: Také je důležité pochopit, kde všude zanechá hrany: Všude tam, kde byly "pevné" hrany i ve Sketchupu. ALe POZOR ! - existuje jediná vyjímka, kdy může i tuto pevnou hranu vyhladit.
Ten případ je u hrany, jejíchž plochy jsou koplanární a zároveň je na ně promítnuta stejná textura. Tedy plochy, jež leží ve stejné rovině a hrana je tam dá se říci zbytečná, ale zároveň musí platit, že textura na obou plochách spontánně navazuje. Musí být splněny obě podmínky. Jakmile jedna z nich neplatí, pak hranu nikdy nevymaže. To je důležité vědět. Takže pokud máte v ploše kde je nanesena jednotná textura, hranu, kterou chcete, aby tam zůstala, pak pokud plochy, k ní přiléhající, neleží ve stejné rovině, hrana tam zůstane. Viz třeba svislá čára na předním výstupku u modelu vlaku na obr. výše: Na čelo je nanesena jedna souvislá textura, ale protože plochy k ní svírají různé úhly, zůstala tam jako pevná hrana.
Naopak, pokud mám koplanární plochy oddělené třeba i vyhlazenou tečkovanou hranou (tedy v běžném režimu neviditelnou), ale každá plocha má jinou texturu, pak Fragmotion tohle rozezná a při svařování vertexů tam udělá pevnou hranu. Protože ví, že je tam odlišně nanesená textura. Nemusí to být jen jiná textura, může to být ta stejná, jen jinak posunutá, vůči sousední ploše.
Nádrže na obrázcích jsou kompletně vyhlazené, protože ve sketchupu byly taky. (všechny hrany byly jako hidden geometry.) Pokud byste však ve sketchupu hrany zpevnili, pak i po vyhlazení by nádrž zůstala s ostrými hranami. Přestože je na ni nanesena jednotná textura. Fragmotion ctí hrany, které jste měli ve SKetchupu.
TIP ! - Pokud budete zkoušet své modely vyhlazovat. je nutno aby na nich vždy byla textura. Jen plošky, které jsou vedle sebe otexturované navazující texturou, můžou být vyhlazeny. Pokud ze sketchupu vyexportujete model jen tak, bez textury, i po "vertex: weld all" budou plochy s hranami !! Je nutnot pochopit, že Fragmotion pracuje s informací o hraně (jaký je to typ), ploše (jestli leží ve stejné rovině) a textuře ! (je na sousedící plošky nanesena stejná navazující textura?)
Co je navazující textura ? - Třeba nanesená pomocí funkce - projekce (projected). Anebo i když klikáte na plošku jednu vedle druhé a v kyblíčku máte pořád stejnou texturu.
Nenavazující textura je ta: která je projektována z jiného zdroje, anebo dáte pravé tlačítko a texturu manuálně někam posunete. I tohle fragmotion pozná.
Není se však čeho bát, ve většině případů máme textury na modelu naneseny komplexně a následný export z Fragmotion bývá v pořádku. Přesto význačně upozorňuji, abyste pokaždé svůj model překontrolovali, zda jste dostali přesně to, co jste chtěli (prohlédněte si model v MeshView prohlížeči se zapnutými Creases). Rotace levým tlačítkem, posun pravým tlačítkem myši.
Než model spustíme ve hře, je nutno opět upravit cestu k texturám uvnitř samotného souboru X.
6) Otevřete váš soubor X (upravený ve Fragmotion) v poznámkovém bloku. (klávesová zkratka F4, pokud používáte Total commander)
Zmáčkněte Ctrl+End, abyste se dostali na konec, kde jsou vaše textury. A jako obvykle k nim přidejte cestu se dvěma převrácenými lomítky. Viz obr. níže. Po úpravě můžete dát soubor Uložit (Ctrl+S) a zavřít. Váš soubor X je připraven k načtení ve hře !
Pozn: Netuším proč, ale soubory X vyexportované z programu Fragmotion se déle načítají pro úpravu, a navíc mají text nahusto nasázený, takže je v nich horší orientace.
INFO: Také je důležité pochopit, kde všude zanechá hrany: Všude tam, kde byly "pevné" hrany i ve Sketchupu. ALe POZOR ! - existuje jediná vyjímka, kdy může i tuto pevnou hranu vyhladit.
Ten případ je u hrany, jejíchž plochy jsou koplanární a zároveň je na ně promítnuta stejná textura. Tedy plochy, jež leží ve stejné rovině a hrana je tam dá se říci zbytečná, ale zároveň musí platit, že textura na obou plochách spontánně navazuje. Musí být splněny obě podmínky. Jakmile jedna z nich neplatí, pak hranu nikdy nevymaže. To je důležité vědět. Takže pokud máte v ploše kde je nanesena jednotná textura, hranu, kterou chcete, aby tam zůstala, pak pokud plochy, k ní přiléhající, neleží ve stejné rovině, hrana tam zůstane. Viz třeba svislá čára na předním výstupku u modelu vlaku na obr. výše: Na čelo je nanesena jedna souvislá textura, ale protože plochy k ní svírají různé úhly, zůstala tam jako pevná hrana.
Naopak, pokud mám koplanární plochy oddělené třeba i vyhlazenou tečkovanou hranou (tedy v běžném režimu neviditelnou), ale každá plocha má jinou texturu, pak Fragmotion tohle rozezná a při svařování vertexů tam udělá pevnou hranu. Protože ví, že je tam odlišně nanesená textura. Nemusí to být jen jiná textura, může to být ta stejná, jen jinak posunutá, vůči sousední ploše.
Nádrže na obrázcích jsou kompletně vyhlazené, protože ve sketchupu byly taky. (všechny hrany byly jako hidden geometry.) Pokud byste však ve sketchupu hrany zpevnili, pak i po vyhlazení by nádrž zůstala s ostrými hranami. Přestože je na ni nanesena jednotná textura. Fragmotion ctí hrany, které jste měli ve SKetchupu.
TIP ! - Pokud budete zkoušet své modely vyhlazovat. je nutno aby na nich vždy byla textura. Jen plošky, které jsou vedle sebe otexturované navazující texturou, můžou být vyhlazeny. Pokud ze sketchupu vyexportujete model jen tak, bez textury, i po "vertex: weld all" budou plochy s hranami !! Je nutnot pochopit, že Fragmotion pracuje s informací o hraně (jaký je to typ), ploše (jestli leží ve stejné rovině) a textuře ! (je na sousedící plošky nanesena stejná navazující textura?)
Co je navazující textura ? - Třeba nanesená pomocí funkce - projekce (projected). Anebo i když klikáte na plošku jednu vedle druhé a v kyblíčku máte pořád stejnou texturu.
Nenavazující textura je ta: která je projektována z jiného zdroje, anebo dáte pravé tlačítko a texturu manuálně někam posunete. I tohle fragmotion pozná.
Není se však čeho bát, ve většině případů máme textury na modelu naneseny komplexně a následný export z Fragmotion bývá v pořádku. Přesto význačně upozorňuji, abyste pokaždé svůj model překontrolovali, zda jste dostali přesně to, co jste chtěli (prohlédněte si model v MeshView prohlížeči se zapnutými Creases). Rotace levým tlačítkem, posun pravým tlačítkem myši.
Než model spustíme ve hře, je nutno opět upravit cestu k texturám uvnitř samotného souboru X.
6) Otevřete váš soubor X (upravený ve Fragmotion) v poznámkovém bloku. (klávesová zkratka F4, pokud používáte Total commander)
Zmáčkněte Ctrl+End, abyste se dostali na konec, kde jsou vaše textury. A jako obvykle k nim přidejte cestu se dvěma převrácenými lomítky. Viz obr. níže. Po úpravě můžete dát soubor Uložit (Ctrl+S) a zavřít. Váš soubor X je připraven k načtení ve hře !
Pozn: Netuším proč, ale soubory X vyexportované z programu Fragmotion se déle načítají pro úpravu, a navíc mají text nahusto nasázený, takže je v nich horší orientace.
7) Zvalidujte váš upravený soubor X pomocí XValidator, a můžete model otevřít ve hře.
ZÁVĚR: Takže abychom si to shrnuli: Zmenšili jsme velikost modelu o 300 kB (!), a zároveň zvýšili jeho kvalitu tím, že vypadá pěkněji a jeho plochy jsou nyní dokonale hladké.
ZÁVĚR: Takže abychom si to shrnuli: Zmenšili jsme velikost modelu o 300 kB (!), a zároveň zvýšili jeho kvalitu tím, že vypadá pěkněji a jeho plochy jsou nyní dokonale hladké.
Když se třeba koukneme na naší původní lampu, vidíme, že nyní je kryt lampy a spodní část nosné tyče, dokonale hladká. Část tyče v oblouku jsem nechal schválně bez optimalizace, abychom lépe viděli rozdíl.
Je to ten samý model, ten samý počet polygonů, ale provedli jsme úpravu v programu Fragmotion.
Nejen, že to vypadá daleko líp, ale navíc nám to konečně dává možnost, vytvářet ve sketchupu mnohem jednodušší tvary, protože dojem kulatosti už nyní nebude vytvářet počet polygonů, ale spíš svařené vertexy a společné normály vyhlazených hran.
Nyní můžeme vytvořit tu samou lampu s daleko menším počtem polygonů, nechat ji vyhladit a bude vypadat naprosto stejně, a přitom bude mít model daleko méně Kilobajtů. A to je principem kvalitního a hospodárného modelování.
Je to ten samý model, ten samý počet polygonů, ale provedli jsme úpravu v programu Fragmotion.
Nejen, že to vypadá daleko líp, ale navíc nám to konečně dává možnost, vytvářet ve sketchupu mnohem jednodušší tvary, protože dojem kulatosti už nyní nebude vytvářet počet polygonů, ale spíš svařené vertexy a společné normály vyhlazených hran.
Nyní můžeme vytvořit tu samou lampu s daleko menším počtem polygonů, nechat ji vyhladit a bude vypadat naprosto stejně, a přitom bude mít model daleko méně Kilobajtů. A to je principem kvalitního a hospodárného modelování.
Pro další porovnání, jsou na obrázku dva nárazníky. Oba stejný 3d model, u obou válce tvořené z šesti hranových kružnic (hexagony). Zatímco na prvním jdou jasně vidět hrany, ten druhý vypadá daleko kulatěji! :-) Omluvte tak malé obrázky, ale i ve hře jsou nárazníky vidět jen takto.