Kompletní animace v Blenderu: dokončení - část 2/2 - 3D grafika - 3Dscena.cz: 3D grafika jako na dlani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



3D grafika

Kompletní animace v Blenderu: dokončení - část 2/2

10. ledna 2008, 00.00 | Vítám vás zpět u naší mechanické paže. V dnešním druhém dílu dokončíme animaci se vším všudy. To znamená, že se podíváme na unwrapy, materiály, nasvícení,
nastavení animačního systému a v neposlední řadě také na node editor.

Vítám vás zpět u naší mechanické paže. V dnešním druhém dílu dokončíme animaci se vším všudy. To znamená, že se podíváme na unwrapy, materiály, nasvícení, nastavení animačního systému a v neposlední řadě také na node editor. Připomínám jen pohled na model vytvořený minule:

Mechanická paže z minula

Pozn.: Pakliže vám nebudou vycházet některé unwrapy, je možné, že máte špatně přepočítané normály. To lze napravit stiskem CTRL+N v editmodu při vybraných všech polygonech.

Unwrap

Bez váhání se můžeme pustit rovnou do práce. Prvním krokem bude vytvoření unwrapů všech objektů ve scéně - nebudeme nic zanedbávat a každému objektu nakreslíme texturu. Začneme podstavou. Nejinteligentnějším místem pro řez bude svislá hrana na odvrácené straně od kamery:

Místo řezu

Unwrap má jedno negativum - máme na ploše spoustu volného místa. Spojíme tedy ještě s dalším objektem:

Spojené meshe podstavy
Pozn.: Nejsvrchnější válec se bude na rozdíl od zbytku otáčet kolem své vlastní osy, to ale budeme řešit vertexovými skupinami

I když je na unwrapu stále ještě nevyužité místo, pro přehlednost v 3D okně a úsporu času při renderingu již nebudeme spojovat s žádným dalším meshem:

Unwrap spojených meshů
Pozn.: Unwrap se provádí v UV image editoru zkratkou CTRL+E

V minulém díle jsem naznačil jistý postup u řezů meshů. "Hranol" na spodu stojanu necháme tak, jak jsme jej nachystali minule, malá změna ovšem proběhne u krytu. Vzhledem k ušetření polygonů i plochy, na kterou budeme kreslit texturu, odstraníme vertexy z vnitřní strany:

Úprava meshe

Po unwrapování se nám opět nelíbí spousta volného místa, takže můžeme spojit s dalším objektem, který má stejnou hodnotu subsurf. Můžeme spojit například s držáky hydrauliky. Po umístění náležitých řezů vznikne mnohem lepší unwrap, myslím, že místa řezů si domyslí každý sám:

Unwrap

Objekt stojanu je poněkud složitějšího charakteru, a proto budeme kombinovat metody unwrapu. Nejprve je potřeba opět umístit řezy pro unwrap:

Řezy na stojanu

Možná, že se někdo podiví nad tím, proč jsme umístili vodorovný řez na spodu obrázku. V tomto náhledu je síť opět přizpůsobena subsurfu a řez se tedy ve skutečnosti nachází hned pod hranou. V celém tomto prostoru bude textura se žlutočernými pruhy a my ji tímto řezem pouze oddělíme od zbytku textury. Po unwrapu nám vyjde vcelku nehezký obrázek:

Nehezký unwrap

Špatné rozložení bodů způsobuje jejich velká hustota a do jisté míry i samotné LSCM, resp. způsob, kterým unwrap provádí. V tomto případě bude lepší na inkriminovanou část meshe použít jinou metodu - cylinder from view, což rozloží síť válce na čtverec, popř. obdélník. Toto je třeba provést z čelního pohledu:

Cylinder from view

S využitím tohoto postupu a několika úprav v UV image editoru vypadá unwrap už mnohem lépe:

Lepší unwrap

Nyní nás čeká unwrap "ulny":

Ulna neboli kost loketní

Zde bude umístění řezů zřejmé, jde o kvádrovitý objekt, pozastavím se pouze nad spodní částí a hlavicí kulového kloubu. Spodek ulny bude mít řezy na vesměs stejných místech jako horní část stojanu:

Řez na spodu ulny

Hlavice kloubu bude mít raytracový odraz, ale záměrně je spojená v jeden mesh s ulnou. Toto budeme řešit jednoduše namalováním textury, která bude určovat, na kterých místech se raytracový odraz bude projevovat. K texturám se ale dostaneme, až budou všechny objekty unwrapovány. Takto budou umístěny řezy na kloubu:

Řezy na kulovém kloubu

Pro úplnost unwrap:

Unwrap ulny

Pokračujeme unwrapem polokoule na kloubu:

Polokoule

Zde ani není potřeba dělat jakýkoliv řez, LSCM si síť rozloží opravdu pěkně:

Jednoduchý unwrap polokoule

Minule jsme již umístili řez do jedné podpěry manipulační "ruky". Podpěry jsme poté zkopírovali, takže řezy zůstaly na všech. Nyní již stačí unwrapovat:

Podpěry ruky

Unwrap podpěr

Další unwrap se bude týkat části, ve které jsou mechanické pojezdy:

Řez

A samotná síť:

Unwrap

Předposlední řezy provedeme na objektech pojízdných lopatek, doufám, že místa řezů napadnou každého i bez obrázku:

Řezy na lopatce

Unwrap vypadá sice poněkud kuriózně, nicméně postačí:

Unwrap lopatek

Poslední unwrap se bude týkat pístu. Pro snadnější orientaci můžeme pospojovat opět více částí, samotnou animaci budou řídit především armatury, takže nebude docházet k nežádoucím deformacím:

Píst

A pro ukázku místa vybraných řezů:

Řez vrchní části pístu
Řez v místě, kde se píst zasouvá
Řez na spodu hydrauliky

A unwrap:

Unwrap pístu

Nasvícení

Nyní, když už máme unwrapovány všechny objekty ve scéně - tedy nachystané na textury - měli bychom scénu nasvítit, abychom mohli kontrolovat, jak budou textury vypadat po vyrenderování. Nejlépe se mi osvědčil způsob nasvětlení několika spoty a jedním hemi. Nepoužívám jedno univerzální nasvětlení pro každou scénu, to by potom samotné nasvětlování ztratilo kouzlo, nehledě na to, jak důležitou roli hraje při vytváření atmosféry obrázku či animace. Naše animace bude o to složitější, že jediný způsob vytváření postprocesu bude použití node editoru - nemůžeme tedy stíny dokreslit ve 2D editoru. Nasvícení je potřeba věnovat nemenší pozornost, než např. unwrapování.

V této scéně jsem použil tři světla, dva spoty a jedno hemi. Nastavení uvádět nebudu, v tomto případě je opravdu lepší, když si každý se světly pohraje podle svého, na mě bude pouze, abych uvedl několik klíčových faktů:

- kvalitu stínu určíme mimo jiné parametrem ShadowBufferSize, postačí 2 880
- parametr Soft určuje, jak budou stíny rozostřené, pro horní světlo má hodnotu 32 a má částečně napodobovat GI (upozorňuji, že toto je velice ekonomické - výsledek možná není nejlepší, ale rendertime je rozhodně skvělý). Tzv. fake GI se provádí se spoty naparentovanými na polokouli z icosphere, ty směřují do středu koule a při správném nastavení tak vytváří jemné stíny z každé strany
- kvalita světla se ovlivňuje i parametrem Samples, počet samplů se ale odvíjí od parametru Soft - větší rozostření si vyžaduje více samplů, aby se na výsledek dalo dívat
- Hemi má aktivovanou volbu NoSpecular, což zaručí, že toto světlo nebude na objektech vytvářet odlesky, bude ovlivňovat pouze difúzní stínování
- boční Spot jsou vlastně dvě světla - první je Spot, který má energii okolo 1.8 s nastavenou volbu Only Shadow, a druhé je též Spot, energii má okolo 0.7 a nevrhá stíny. Touto kombinací vzniká tmavý stín, který je vyvolán ne příliš ostrým světlem
- boční Spot má namodralý nádech, a je tak v lehkém kontrastu s Hemi, které má lehce nažloutlý odstín

A takto vypadá naše mechanická paže po renderu:

Paže shora

TEXTURY

Nyní budeme vytvářet textury pro každou z unwrapovaných částí. Parametr, nad kterým bychom se rozhodně měli pozastavit, je velikost textury. Blender exportuje texturu ve tvaru čtverce o libovolné velikosti do 16 384 pixelů. Spousta lidí zastává názor, že textury by měly být aspoň dvakrát větší než renderovaný obrázek/animace. Nevím, zda se sem řadím i já, vždy kreslím textury na ploše mezi 1 500 x 1 500 a 3 500 x 3 500, nicméně musím přiznat, že zatím jsem nerenderoval ve větším rozlišení než 1 280 x 532. Záleží samozřejmě i na výkonu počítače, ne každý (včetně mě) si může dovolit kreslit v tak obrovských rozlišeních jako 16 384 x 16 384, navíc pro "denní" potřebu postačí přibližně do 4 000 x 4 000.

Budeme chtít, aby se paže přiblížila realitě, kromě škrábanců tedy bude i na některých místech zrezivělá. K nakreslení textur je vždy lepší použít některý z "vyšších" programů (tzn. takový, který dokáže zpracovat vrstvy), já osobně střídám mezi Photoshopem a Gimpem a využívám zrovna to, co ten druhý zvládá lépe, popř. jak jsem zvyklý. Myslím ale, že je to individuální, věřím, že se najdou i takoví, kteří používají např. Corel PhotoPaint. Princip "špinění" není nijak složitý, popíšu postup jak pro Photoshop, tak pro Gimp:

Photoshop

Myslím, že leckdo z vás tuto "fintu" zná, nejde o nic jiného než režim prolínání vrstvy. Začneme tedy exportem textury do .tga formátu:

Menu uložení unwrapu

Nyní nahrajeme do Photoshopu a provedeme rutinní postup. Unwrap je černá síť na bílém podkladu, takže jej nenecháme nečinně přihlížet. Vrstvu s UV zkopírujeme a horní nastavíme režim krytí na násobení. Spodní vyplníme bílou barvou a vložíme jednu (později možná i více) vrstvu mezi ně:

Nastavení vrstev

Nyní vyplníme barvami:

Vyplnění barvami

Jako vrstvu nad těmito barvami je nejvýhodnější použít nějakou fotku zašlého plechu, železného plátu atp. Kvalitním zdrojem textur může být třeba mayang.com/textures nebo cgtextures.com, ovšem pozor! Limit pro mayang činí 16 stažených textur za den, u cgtextures je to 15 MB/den.

Textura zašlého plechu

Tuto texturu případně ořežeme a umístíme na unwrap tak, že ji umístíme do zvláštní vrstvy pod barvou. Samozřejmě podle fantazie upravíme jas, kontrast a krytí. Nezapomeňte, že je lepší, když ve švech nebude textura příliš výrazná, k její úpravě na takovýchto místech je vhodné použít gumu s velkou plochou a nastavením krytím např. na 10 %. Nyní nastavíme volby prolnutí v okně Styl vrstvy pro naši vrstvu s barvami (okno lze vyvolat i dvojkliknutím na obrázek vrstvy v okně Vrstvy):

Tato úprava funguje na principu, že podkladová vrstva se bude prolínat na těch místech, kde stupně šedi překračují hodnotu, kterou nastavíme posuvníky. Pokud před kliknutím držíme ALT, posouváme jen jeden trojúhelníček a nastavujeme tím sílu přechodu. Po chvíli nastavování již vypadá textura celkem k světu:

Textura

Po aplikaci na model dostaneme v celku ucházející výsledek. Samozřejmě, s texturou by se dalo ještě pohrát, nastavit specifické plochy, které budou bez škrábanců, nicméně úkolem tohoto tutoriálu je podat návrh, jak kreslit texturu; do vyčerpávajících podrobností zabíhat nebudu, tyto nechť každý podrobí své vlastní fantazii. Takto vypadá prozatímní render:

Paže s otexturovanou podstavou

Gimp

Následující postup by se dal uplatnit i ve Photoshopu, my si jej ovšem vyzkoušíme v Gimpu, protože ten, až pokud mé znalosti sahají, nemá možnost prolínání podkladové vrstvy. Budeme tedy pracovat s maskami průhlednosti. Začneme podobně jako u předchozího postupu - nahrajeme .tga soubor, vytvoříme kopii, spodní vrstvu vyplníme bílou, horní nastavíme na násobení a vložíme další, ve které určíme barvy. Poté přidáme další násobící vrstvu, do které umístíme škrábance:

Vrstvy v Gimpu

Po vložení textury plechu a po chvíli hraní si s jasem a kontrastem můžeme dostat např. takovýto výsledek:

Textury Gimpem

Dalším krokem bude přidání alphamapy vrstvě se škrábanci, aby se objevovaly jen na některých místech. Vzhledem k tomu, že rád experimentuji, jsem použil jako alphamapu upravenou fotografii mušlí:

Upravená fotka mušlí

Tento obrázek tedy zkopírujeme do masky vrstvy. Pro ty, kteří se s maskou vrstvy setkávají poprvé, osvětlím způsob jejího použití: maska určuje průhlednost obrázku díky černobílé škále. Černé body jsou zcela průhledné, bílé body jsou zcela neprůhledné. Pro práci s maskou se používá kombinací ALT+LMB (na obrázek masky v okně Vrstvy) - k přepnutí na editaci masky/vrstvy - a CTRL+LMB - k zapnutí/vypnutí použití masky. Po vložení obrázku vznikne poněkud kuriózní překrytí, nicméně i přesto jej můžeme aplikovat na model:

Textura získaná v gimpu

Výsledek i přes svůj kuriózní postup opět docela ujde. Kdyby ovšem maska vrstvy se škrábanci měla větší viditelnost, výsledek by to neovlivnilo nejpříznivěji.

Otexturovaná podstava

Jeden z těchto dvou postupů použijeme i na zbytek modelů. Jediný, u kterého se pozastavím, bude stojan, který bude mít černé pruhy. Na unwrapu stojanu máme rovnou plochu, díky které budou pruhy namapovány přesně tak, jak chceme, aniž by byly viditelné švy. Kdyby měl unwrap této části modelu nepravidelný tvar, nakreslení bezešvých pruhů by bylo téměř nemožné. Po nahrání obrázku vytvoříme ve zvláštní vrstvě černý pruh, který nakloníme:

Textura s 1 pruhem

Nyní pruh uřízneme přesně hranách a zkopírujeme do této pozice:

Přesun pruhu

Za pomoci nástroje Posun a držením SHIFT klávesy přesuneme vodorovně přesně na hranu - vznikl nám tak bezešvý pruh:

Bezešvý pruh

Spojíme pruhy do jedné vrstvy a nakopírujeme podle citu nahoru i dolů:

Nakopírované pruhy

A výsledek je otřesný. UV koordináty výrazně rozhazuje síť s poměrně malým počtem polygonů. Jediný způsob, jak toto napravit, je horizontálně použít multicut (K - Multicut) na spodní část stojanu. Čím více řezů, tím přesnější bude mapování, já jsem použil 20. Nemusíte se obávat přetváření unwrapu, síť, kterou upravíte pouze řezáním, se updatuje sama v UV image editoru. Po aplikaci řezů je výsledek opravdu takový, jaký jsme chtěli. Dokonce i švy téměř zmizely:

Takřka neviditelné švy

Pro ostatní objekty můžeme nestydatě zkopírovat materiál spoje mezi podstavou a stojanem. Ovšem pro hydraulický píst a ulnu je musíme zkopírovat tlačítkem Single User - tlačítko s číslem vedle názvu materiálu - na nich totiž budou místa s odrazem okolí, to znamená, že budou lehce odlišné. Pojďme se podívat, jak vyřešit tento drobný oříšek.

Stejný materiál takřka na všem

Na unwrapy nakreslíme jednoduchou texturu sestávající pouze z bílé a černé barvy, přičemž bílá bude definovat místa, která budou odrážet okolí. Takto bude vypadat reflexní mapa pro píst:

Reflexní mapa pístu

Připomínám jen unwrap pístu:

Unwrap pístu

V material editoru nastavíme RayMir, ale posuvník necháme na 0. Map To samozřejmě UV a v Map input necháme zatrhlou pouze volbu RayMir. Chceme, aby byla odrazivá část pístu viditelná i bez nějakého výraznějšího okolí, takže DVar snížíme přibližně na 0.86, aby efekt odrazu nebyl 100 %. A zde je výsledek:

Odrazivá část pístu

Totéž provedeme s koulí na vrchu ulny, čímž dokončíme texturování.

Animování

Jediná část, která nebude přímo animována armaturami, je samotný úchopový mechanismus. Svírání lopatek bude nejlepší vyřešit Shape keys. Ve výchozím tvaru tedy budou lopatky od sebe a ve druhém u sebe.

Armatury se budou starat o co nejjednodušší systém animování, vzhledem k tomu, že jsme vytvořili mechanicky se pohybující objekt, budeme muset armatury přesně situovat do středů kloubů, což ovšem není žádný problém. Spodní část armatury zarovnáme ke středu podstavy a konec první kosti ke středu kloubu.

Zarovnání armatury
Pozn.: Dejte si dobrý pozor, jak kosti zarovnáte. Stalo se mi, že jsem po hodině neúspěšného zkoušení všech možných omezení zjistil, že mám jednu kost posunutou o desetinu Blender jednotky

Vršek druhé kosti zarovnáme ke středu koule a poslední článek vytáhneme prostě kousek nahoru - nemá žádné omezení. Celkově máme 8 kostí - 1 na stabilní podstavu, 3 na deformaci paže, 2 na deformaci pístu, jeden IK solver a zvláštní kost, která bude určovat směr natočení "dlaně" (vážně už mě nebaví vypisovat každý název zvlášť :) ):

Systém armatur

Poměrně velkou péči musíme věnovat i parentování jednotlivých kostí. Spodní část pístu (pist1) bude podřízená stojanu a horní část pístu (pist2) bude podřízená ulně. Zvláštní kost ani IK solver nebudou podřízeny ničemu. Doporučuji odzkoušet funkčnost systému ještě předtím, než jej aplikujeme na paži. "Ruka" (žlutá kost) má nastavený jako IK solver kost ik a constraint Copy Rotation s těmito parametry:

Parametry omezení

Díky této Copy Rotation můžeme ovlivňovat rotaci "ruky" externí kostí - to usnadňuje ovládání. Co se týče hydrauliky - pro horní i dolní část postačí omezení Locked Track, díky kterému bude jedna kost "sledovat" druhou:

Ukázka nastavení Locked Track

Co se týče limitů jednotlivých kostí:

- podstava má zamčenou rotaci ve všech osách
- stojan má zamklé osy X a Z
- ulna má zamklé osy X a Y, osu Z má omezenou od -115 do 0 stupňů
- "žlutá kost" má limity na X a Z rotaci, oboje od -40 do 40 stupňů

Limity kostí

Bohužel tím, že jsme nastavili limit pro ulnu, že může rotovat pouze na část jedné strany, jsme znemožnili plné využití IK solveru. Pokud je ulna stočená dolů a my s ním pohneme za jistou hranici, ulna se narovná nahoru a i ostatní kosti nepříjemně poskočí. Tento problém můžeme v animaci řešit jedině tak, že budeme rotovat celým objektem armatury. Je možné, že tento neduh je bug, nicméně se spíš přikláním k možnosti, že jde o logickou chybu - na druhou stranu nemůžeme nechat ulnu rotovat i na druhou stranu, tím bychom odsoudili systém hydrauliky k nefunkčnosti:

Chyba při nerespektování limitů

Nezodpovězenou otázkou dosud zůstaly hadičky. I s nimi lze udělat krátký proces. Klíčovým faktem bude, že ani jedna hadička nebude podřízena úplně. Začneme tím, že pomocí ALT + C převedeme na mesh a vytvoříme vertexové skupiny stojan a pist1. Skupina stojan bude obsahovat všechny vertexy hadičky a pist1 jen přibližně 1/3 vertexů na konci spojeném s pístem. Přepneme se nyní do weight paint modu (CTRL + TAB nebo tlačítkem na headeru 3D okna):

Weight paint mode

Nyní nastavíme v Edit buttons na panelu Paint různé hodnoty od 0 do 1 a nakreslíme na model - 0 (modrá) nebude ovlivňovat deforaci nijak, 1 (červená) úplně:

Vyznačení míst s různou intenzitou ovlivnění deformace

Nyní stačí tento postup zopakovat i pro druhou hadičku a můžeme naparentovat armaturu všem objektům. Tím jsme téměř u konce:

Paže v póze

Jak jsem již zmínil, tento animační systém nesplnil svůj úkol na 100 %, k ovládání nám totiž nestačí pouze posouvání IK solveru, ale musíme rotovat i celou armaturou. Doufám ovšem, že tento drobný problém nikoho neodradí.

Node editor

Po nachystání několika animačních klíčů si můžeme pohrát i s node editorem, já jsem se spokojil pouze s nastavením Vector Bluru:

Nastavení Vector Bluru

A zde je animace na 130 framu:

Paže v pohybu

Na závěr bych chtěl říct jen to, že úkolem dnešního ani minulého článku nebylo podat dokonalé konstrukční řešní takovéhoto přístroje - jsem si vědom, že bych od techniků obdržel nehezké poznámky - ale podat jakési povědomí o možnostech využití Blenderu v oblasti animace. Doufám, že byl článek přínosný, a těším se příště na shledanou.

Tématické zařazení:

 » 3D grafika  

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: