Animace tankového pásu, od píky a na díly (2) - Grafika.cz - vše o počítačové grafice

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

Animace tankového pásu, od píky a na díly (2)

6. srpna 2009, 00.00 | Připraveni a vyzbrojeni základními informacemi nás dnes čeká samotná tvorba pásu ve velkém a za využití dvou technologií. Téma si vyzkoušíme za pomoci knihovny MoXPig a také modulu MoGraph. Obě samozřejmě v CINEMĚ 4D.

Animace pásu, úvod

Víme již, jak můžeme animovat jeden objekt. Je ale pravdou, že animace více objektů po stejné křivce je trochu složitější úloha už proto, že bychom museli stále rozpočítávat úvodní pozice jednotlivých částí. Že je tento popis mírně zmatečný? Dobrá, zkusíme si jej rozvést jednoduchým příkladem.

Pokud již známe animaci po křivce tak si můžeme říci, že chceme, aby se nám po křivce pohybovaly objekty dva. A aby byly rozmístěny pravidelně, s pravidelnými rozestupy. První objekt bude tedy startovat v pozici 0, druhý v pozici 50. Jakmile se první pohne na pozici 20, tak druhý se pohne na pozici 70 a tak dále. Rozestup bude stále 50. Můžeme si tedy uvedenou situaci matematicky popsat tak, že nějaký objekt X (OX)=PoziceO1+100/počet objektů celkem*pořadí daného objektu, přičemž pořadí je určeno od nuly, první objekt tak má polohu určenou pořadím. Navíc do uvedeného systému vstupuje úvodní nastavení, úvodní odsazení objektů, které můžeme nastavit ručně, a tak vychází výsledný vzorec jako:

OX=PoziceO1+100/počet objektů*pořadí objektu+úvodní posun

Pokud bychom měli v systému více objektů než dva, například čtyři, byly by kroky vzdálenosti mezi nimi 0, 25, 50 a 75. V případě uzavřené křivky (což je u pásu pravidlem) je pak poloha 0 a 100 stejná.

MoXPig, animace pásu poprvé

První animaci pásu si připravíme za pomoci knihovny MoXPig, kterou jsem kdysi vyrobil. Jedná se o sestavu objektů a nastavení, která jsou pro nekomerční užití zdarma, a která řeší některá „MoGraph“ zadání jednodušší, ale stále funkční cestou.

Uvedenou knihovnu naleznete na adrese http://www.digitalmedia.cz/plugins/moxpig/index_cz.aspx a instalace souboru je velmi jednoduchá. Stačí si jej rozbalit a umístit do adresáře CINEMY 4D/library/browser.

Poté si jen musíme uvedenou knihovnu najít v Prohlížeči obsahu a v této knihovně si najdeme a otevřeme objekt MoXPig spline a přeneseme si tento objekt do scény. Tím jsme učinili první krok pro vytvoření pásu.

V dalším kroku bychom si měli vytvořit planární křivku pásu, přičemž křivka by měla mít všechny vlastnosti, které jsme si popsali výše. Měla by tedy být nastavena interpolace mezilehlých bodů na volbu „jednotná“ a také bychom možná mohli mírně zvýšit počet vzniknuvších bodů. Pro orientaci, mnou vytvořená křivka měla celkové rozměry X, Y a Z 0, 200 a 712. Těmto rozměrům pak odpovídaly také rozměry článků pásu.

V tomto kroku si tedy vytvoříme články pásu. Abychom neměli od počátku potíže se zarovnáním, vzpomeneme si na to, co jsme psali výše. Nejméně problémů je vždy se směřováním objektu ve směru osy Z a tak se tohoto faktu budeme držet a články řetězu vytvoříme tak, aby po křivce směřovaly ve směru osy Z.

Vytvoříme si novou primitivní křivku Obdélník (velikost této křivky odpovídá velikosti křivky cesty uvedené výše) a zadáme velikost křivky na 35x8, s rovinou generování nastavenou na ZY. Interpolaci mezilehlých bodů zadáme na Adaptivní (tato interpolace distribuuje mezilehlé body tak, že zjišťuje úhel změny směru křivky a pokud je tento úhel větší než hodnota zadaná, pak se v tomto místě vytvoří nový bod, jedná se o nejběžnější nastavení v případě planárních tvarů, protože se tímto nastavením vytváří body jen tam, kde jsou skutečně zapotřebí). Ještě než opustíme nastavení křivky, tak zadáme hodnotu úhlu interpolace mezilehlých bodů. Aby jich nevznikalo zbytečně mnoho, zadáme úhel na 22,5 stupně.

Necháme křivku v původní poloze 0, 0, 0 a vytvoříme si nový objekt VytaženíNURBS (i to ponecháme ve výchozí poloze) a nově vytvořenou křivku zařadíme pod tento objekt. Vybereme si objekt VytaženíNURBS a přejdeme do Správce nastavení, záložky Objekt. V této záložce zadáme hodnotu celkového vytažení do prostoru. Nejdříve tedy vynulujeme hodnotu vytažení ve směru Z (Z=0) a zadáme vytažení ve směru X=29, proč ne rovnou třicet uvidíme za okamžik.

Přejdeme do stránky Uzávěry. Zde necháme vypnutou volbu pro počátek (otevřený), ale konec nastavíme na zaoblený uzávěr s hodnotami 2 kroků segmentace a poloměrem 1. Abychom si nezvětšovali křivku (o hodnotu poloměru 1) aktivujeme si také volbu Dodržet obrys.

A proč jsme zadali hodnotu 29 jako hodnotu vytažení? Protože k této hodnotě se přičítá i zaoblení a tak je celková výška vytažení objektu 30.

Vytvoříme si nový objekt Symetrie a i tento objekt necháme v původní poloze. Nastavíme mu hodnotu roviny symetrie na ZY a umístíme pod něj právě vytvořené VytaženíNURBS. Symetrii si můžeme pojmenovat například „Vnitřní článek“.

Zkopírujeme si objekt Vnitřní článek a přejmenujeme si jej na Vnější článek. Vybereme si v novém objektu křivku Obdélník a umístíme ji ve směru osy X na hodnotu (lokálních souřadnic, ale je to vcelku jedno) 31. Opět platí, že hodnota 30 je koncová pro předchozí článek a v této hodnotě bude začínat článek další. Aby se nám ale zase neprotínala zaoblení, musíme mít křivku o jednu jednotku dále, než bychom možná mohli čekat.   

Necháme si nastavený objekt VytaženíNURBS tak jak byl s jedním jediným rozdílem. Hodnota vytažení ve směru osy X bude jen 28 (plus 1 zaoblení na počátku a 1 na zaoblení na konci dá výslednou hodnotu 30).

Soustředíme se nyní na nastavení zaoblení. Jak na počátku, tak na konci nyní nastavíme zaoblený uzávěr s hodnotami segmentace 2 a poloměry 1. Opět aktivujeme volbu Dodržet obrys a tím jsme ve finále. Náš objekt již nepotřebuje dalších úprav a máme oba dva podstatné články pásu...

 

Již nějakou tu chvilku máme vytvořený objekt MoXPig spline. Ten se skládá ze dvou objektů. Samotného objektu MoXPig spline a také objektu „End“, který musí zůstat vždy na posledním místě podobjektů zařazených pod objekt MoXPig spline.

Naše dva nové objekty Vnitřní článek a Vnější článek si umístíme jako podobjekty objektu MoXPig spline, ale nad objekt End. Poté si vybereme vlastnost Natáčet ke křivce u objektu MoxPig spline, stiskneme klávesu Ctrl (CMD) a přeneseme vybranou vlastnost i na oba dva nově zařazené objekty. Vybereme si objekt MoXPig spline a přeneseme do jeho parametru Curve - distribution jméno křivky, kterou jsme si připravili dříve. Od této chvíle by měly být oba objekty zarovnány po křivce a to automaticky a animovaně.

 

Musíme si ještě vytvořit kopie obou objektů. Kolik? Přesně tolik, aby vznikl pěkný pás. Vybereme si nejdříve první z našich objektů (níže položený) a použijeme příkaz pro vytvoření instancí (Objekty > Modelování > Instance). Vytvoří se nám instance níže položeného objektu. Pak totéž uděláme pro objekt výše uložený.

Uchopíme obě instance (vybereme si je najednou) a vložíme je tak, jak jsou ve stejném pořadí pod objekt MoXPig spline. Zkopírujeme si na ně opět vlastnost Natáčet ke křivce, to je podstatné, bez toho systém nepracuje.

 

A objekty se nám opět automaticky rozmístí. Nyní si jen vytvoříme tolik kopií instancí (již vytvořených s vlastností Natáčet ke křivce), kolik jich je jen potřeba. Nejlepší přitom bude, pokud si vybereme právě vytvořené instance a ty si tahem s Ctrl (CMD) zkopírujeme, načež vybereme všechny čtyři instance a ty opět zkopírujeme, vybereme si všech osm instancí a ty si již jen budeme kopírovat tolikrát, dokud nevznikne pěkný výsledek. Musíme si přitom dát pozor jen na jednu věc, a to, aby byly pravidelně zastoupeny vnitřní a vnější články a pravidelně se střídaly.

A to je vlastně vše, jediné co si můžeme nyní zkusit je animovat parametr Moving (Posun) u nastavení objektu (pozor, objektu, nikoliv vlastnosti) MoXPig spline. Aktivujeme si také volbu „Tangencial“ – tangenciálně, aby se naše instance správně zarovnaly.

 

Mimo to si také můžeme vyzkoušet zarovnání podle další křivky. V našem případě by asi stačilo, pokud bychom si zkopírovali křivku naší cesty a kopii umístili stranou, vedle křivky mateřské. Novou křivku si můžeme například pojmenovat „cíl“.

Vybereme si objekt MoXPig spline a soustředíme se na jeho nastavení ve Správci nastavení. Zde najdeme již zmíněný parametr Align to spline, zarovnat ke křivce a do tohoto pole zadáme křivku, kterou jsme si vytvořili kopírováním. Můžeme si opět spustit animaci a pohybovat při tom touto křivkou. Voila, náš pás je hotový a připravený do provozu.

Jaké ještě máme k dispozici parametry a nastavení, která by nás mohla zajímat? Primární je v první řadě otázka to, kam se má pás pohybovat. Jeden směr je většinou primární, a tak by naše křivka měla stoupat indexy svých bodů právě v tomto směru. Cílem je, aby body byly zarovnány v pořadí odpovídajícím směru primárního posunu objektů. Pokud by tomu bylo obráceně, museli bychom hodnotu posunu snižovat místo zvyšovat a pak by se nám všechny objekty seshromáždili na prvním bodě křivky do jednoho místa. Pokud bychom potřebovali posouvat pás rovnoměrně vpřed i vzad, pak není problém. Jen musíme nastavit vysokou výchozí hodnotu, která nám zaručeně zajistí pohyb oběma směry.

MoGraph, animace pásu podruhé

MoGraph je vynikající nástroj, který nalezne své uplatnění vskutku v mnoha oblastech a samozřejmě primárně v animacích. Příprava anmovaného pásu je v případě Mographu velmi snadnou záležitostí, která zdaleka nedosahuje náročnosti práce s MoXPigem. Ale MoGraph je přece jen nástrojem dražším a v tom je síla MoXPigu.

Pro větší názornost si můžeme převzít příklad minulý a to jak oba články pásu, tak křivku, po které tyto objekty vyklonujeme a budeme animovat.

Vytvoříme si nový objekt MoGraph > Klonování. Pod tento objekt vložíme oba objekty pásu a to do stejné úrovně.

Vybereme si vytvořený objekt Klonování a přeneseme naši pozornost do Správce nastavení, ve kterém jsou načteny jeho parametry. Jak jsme si slíbili, nastavení bude velmi snadné, protože MoGraph je prostě silný nástroj. V našem případě postačí, pokud v záložce Objekt nastavíme parametr Režim na Objekt. Poté budeme moci do pole „objekt“ přenést jméno křivky a můžeme si ihned všimnout, že se nám po křivce vytvoří instance našich objektů.

Aby se pás vytvořil vskutku korektně, musíme nastavit parametr Klony na volbu Opakování (ona je ve výchozím stavu aktivní, ale kdyby náhodou). Díky aktivaci této volby budou vznikat instance v zadaném pořadí a toto pořadí se bude cyklicky opakovat. Pokud bychom například klonovali tři objekty A B C, pak by vznikaly postupně instance A, B, C, A, B, C, A, B, .... a tak dále. V našem případě se jedná o ideální volbu.

Musíme samozřejmě nastavit vhodné množství instancí, přičemž počet musí být vždy logicky sudý, aby nám oba články do sebe pěkně zapadaly (a jestli se dobře pamatuji, pak celkově by měl být výsledný počet při vydělení dvěma lichý, aby se neopotřebovávaly stále stejné zuby kontra stejné články pásu). Počet instancí se definuje v parametru Počet.

Z pohledu animace je podstatný ještě jeden parametr na záložce Objekt. A to parametr posun, kterým můžeme zcela volně posouvat instance bez omezení. Vynikající animační parametr.

Naše instance ale nejsou možná zcela korektně zarovnány. Přejděme tedy do záložky Transformace, ve které můžeme definovat (včetně animování) parametry pozice jednotlivých instancí. Zadáme zde vhodné natočení instancí tak, aby odpovídal jejich směr posunu po křivce. V uvedeném příkladě se jednalo o osu B.

Něco pro ty zkušenější

Aby někdo neřekl, že jsem zapomněl na ty zkušenější, tak něco pro každého. Předpokládejme, že máme na pás připravené čtyři pět textur povrchu a chceme, aby se nám neopakovaly a byly aplikovány náhodně. Jak to ale udělat, když instance, které po objektech rozmisťujeme, se opakují. Budeme si muset pomoci objektem efektoru a to efektoru Náhodnost. A také použijeme jeden speciální shader.

Dobrá tedy. Vybereme si objekt Klonování a následně vytvoříme nový efektor MoGraph > Náhodnost efektor. Vybereme si tento efektor a přejdeme do Správce nastavení. Zde vypneme parametry pro Pozici a jediné co aktivujeme je parametr Režim barvy > Efektor barva a alfa, také můžeme aktivovat parametr Použít alfu/intenzitu. A hned máme naše instance divoce barevné. Prozatím ale nemůžeme tyto barvy nikterak řídit.

Všechny instance MoGraphu můžeme řídit jedním jediným materiálem, který ale zpracovává speciální kanálový shader. Můžeme si to celé demonstrovat na jednoduchém materiálu s kanálem Barva, do kterého načteme shader MoGraph > Multi shader.

Multi shader nám umožňuje zajímavou věc. Umožňuje nám totiž vkládat jednotlivá vstupní data ve formě dalších shaderů či textur (textur kovu, například), která můžeme, pomocí tohoto shaderu a také pomocí již vytvořeného efektoru Náhodnost distribuovat po objektech. Vytvoříme si tedy pomocí tlačítka Přidat několik položek shaderů a do těch načteme podle potřeby textury, šumy a nebo jen jiné shadery barvy. Můžeme jich přidat podle citu a potřeby, nic nás v tomto smyslu neomezuje.

Co ještě musíme udělat? Musíme nastavit režim, podle kterého se budou na povrchu rozmisťovat jednotlivé textury. To můžeme nastavit opět v tomto shaderu pomocí parametru Režim, kde zadáme „Jas barvy“. Situace se pak má tak, že efektor Náhodnost generuje náhodnou barvu povrchu, kdy každá barva má nějaký jas. Tento jas je analyzován shaderem a podle jasu je aplikována další textura či obecně barva. Perfektní. Nyní již stačí jen aplikovat celý materiál na objekt Klonování a jsme vskutku hotovi.

Slovo závěrem 

Přiznávám bez mučení, tento návod se poměrně protáhl a byl velmi podrobný. Přesto to asi není chybou a jen doufám, že až někdo bude hledat odpověď na otázku – jak animovat množství objektů po křivce, i když nemá chuť studovat manuál, vezme zavděk článkem. Snad nezapadne. A ti co mne kritizují, že píši málo článků snad mají na chvilinku radost, že jsem to zase jednou alespoň trochu napravil.

Tématické zařazení:

 » Rubriky  » VSE  

 » Rubriky  » 3dscena  

 » Rubriky  » Go verze  

 » Rubriky  » 3D grafika  

 

 

 

 

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

Uživatelské jméno:

Heslo: