Zkrocení času v CINEMĚ 4D a technologii XPresso, 2. díl - 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

Zkrocení času v CINEMĚ 4D a technologii XPresso, 2. díl

10. června 2004, 00.00 | V minulém díle jsme práci zakončili v okamžiku, kdy jsme měli čas v číselné podobě a jeho hodnota byla odvozena z odehraných snímků animace. Dnes si čas převedeme na ručičkové hodiny a také vytvoříme ovládací prvky, kterými budeme hodiny nařizovat.

V předešlém díle tvorby hodin jsme se rozloučili v okamžiku, kdy jsme měli vytvořené základní "digitální" hodiny, které začínaly svůj "čas" vždy v prvním snímku animace. Slíbili jsme si ale, že si hodiny doplníme o ručičky a také o možnost nastavení aktuálního času. Jak jsme si slíbili, tak také dnes učiníme. Opět nepůjde o nic zas až tak těžkého či složitého, bude to spíše jen pracné, takže se nikdo nemusí bát, že by náš postup nezvládl. Nahrajme si tedy soubor, který jsme si posledně připravili.

Začneme s vytvořením ručiček ciferníku, které budou ukazovat čas. Vytvoříme si tedy tři objekty podle libosti (to pouze pro názornost, pokud bychom vytvářeli čistě obecné chování, pak bylo asi nejlepší, aby jednotlivé ručičky hodin zastupovaly prázdné objekty Osy, pod které bychom vždy mohli v každé jedné scéně zařadit finální tvar hodinových ručiček). Vytvořené objekty ponecháme bez rotace a také je pravděpodobně (to samozřejmě nemusíme) ponecháme v souřadnicích 0,0,0. Pro názornost a přehlednost si tyto objekty pojmenujeme například r_sekundy, r_minuty, r_hodiny (ručička_název), přičemž jsem všechny tři objekty ručiček pro zjednodušení umístění výsledného chování seskupil do jedné skupiny, jménem ukázka_ručiček.

Nejjednodušší bude tvorba chování sekundové a minutové ručičky. Začneme tedy u nich. Jmenovitě u sekundové. Při její rotaci využijeme hodnoty, který vysílá uzel Mat:Modulo do textové křivky Sekunda (jistě si všichni pamatujeme, že šlo o zobrazené hodnoty v digitální podobě času). Nám přeci stačí, pokud hodnotu v rozsahu čísel od 0 do 59 (Modulo 0/60) převedeme do úhlu od 0 do 2*Pi (tedy 360o) a tento úhel použijeme pro řízení rotace příslušné ručičky. Abychom mohli tato data převádět, musíme si do editoru XPresso vložit speciální uzel Nový nod > XPresso > Počítat > Překladač rozsahu. Tento speciální uzel nám umožňuje jednu z nejdůležitějších věcí, a to převod dat jednoho typu na data úplně jiného typu. Třeba rotaci na obecnou hodnotu, která je použita pro řízení jasu světla. Tento uzel se nejvíce využívá při zadávání automatického řízení ve Správci nastavení.

Ve Správci objektů uchopíme objekt r_sekundy a přetáhneme jej do okna editoru XPresso. Klikneme na modré pole nově vloženého uzlu r_sekundy a vybereme si port Souřadnice > Rotace > Rotace.B. Je načase, abychom si nastavili před chvilinkou vytvořený uzel Překladač rozsahu. Vybereme si jej a tím se otevřou jeho parametry ve Správci nastavení. Upravovat budeme hodnoty na záložce Node. Vstupní rozsah ponecháme na parametru Uživatelsky definovaný, výstupní rozsah zadáme na Radiány. Vypnout můžeme volbu Použít křivku (ale nemusíme, je to jedno). Mimo to musíme zadat také rozsah hodnot, které se mají převádět. Ve výstupu je hodnota 2*Pi (6,283) a tak zde nebudeme zadávat nic, ale ve vstupu musíme zadat maximální hodnotu, kterou má překladač zpracovávat. A tou je stejná hodnota, jakou máme v předchozích uzlech Mat:Modulo, tedy 60.



Nyní tedy pouze spojíme výstup uzlu Mat:Modulo (jistě si pamatujeme, že můžeme hodnotu výstupního portu posílat do více vstupních portů) s Překladačem rozsahu a portem Rotace.B uzlu r_sekundy. Díky tomuto nastavení bude sekundová ručička obíhat tak jako ve skutečnosti.

Jak jsme již poznamenali výše, je pohyb minutové ručičky fakticky podobný pohybu sekundové. Stejně jako ona má minutová ručička 60 poloh pro každou minutu a tak využijeme stejně nastaveného uzlu Překladač rozsahu. Vybereme si tedy uzel Překladač rozsahu u sekundové ručičky a pomocí Ctrl+C a Ctrl+V jej zkopírujeme. Přetáhneme jej do oblasti výpočtu minut. Spojíme výstupní port uzlu Mat:Modulo, který posílá data do uzlu Minuty se vstupním portem nově zkopírovaného uzlu Překladač rozsahu. Uchopíme ve Správci objektů objekt r_minuty a přetáhneme jej do okna editoru XPresso. Klikneme na levý vstupní modrý čtverec tohoto uzlu myší a vybereme port Souřadnice > Rotace > Rotace.B. Tento port spojíme s výstupním portem v předchozím okamžiku kopírovaném uzlu Překladač rozsahu. Díky tomu se nám bude zcela adekvátně otáčet i minutová ručička.



Čeká nás ručička hodinová. Každého asi hned napadne, že bychom to opět mohli udělat stejně, ale to by byla chyba lávky. Stejně to udělat nemůžeme. A to proto, že podle hodinové ručičky přeci poznáme, že je například půl třetí. Kdybychom to udělali stejně jako v předešlých případech, pak by hodinová ručička cestovala pouze po hodnotách 12, 1, 2, 3…. Díky tomu by byl takový pohyb značně nerealistický. Musíme na to jinak, i když velmi podobně.

Opět si vybereme jeden z uzlů Překladač rozsahu a ten si zkopírujeme. Přetáhneme jej do spodní části našeho diagramu, někam pod výpočet hodin. Aby se nám zobrazovali správně hodiny, tak využijeme opět funkci modulo, kterou však nebudeme přebírat z některého uzlu Mat:Modulo, ale kterou nastavíme přímo v uzlu Překladač rozsahu. Vstupní port nového uzlu Překladač rozsahu, který bude určen pro hod. ručičku spojíme s výstupem uzlu Výsledek (nad výstup), který nás, jak si jistě každý pamatuje od minula, informuje o aktuální uběhnuvší vteřině. Jak již bylo řečeno, využijeme jen uzel Překladač rozsahu, kde nadefinujeme vstupní rozsah ve vteřinách, které dohromady dají 12 hodin (jedna otočka hodinové ručičky) a výstupní rozsah bude stále 0 a 2*Pi (6,283). Vybereme si tedy nově vytvořený uzel Překladač rozsahu a ve Správci nastavení zadáme rozsah vstupních hodnot 0 a 12*60*60, což je 43 200, ale zadat můžeme i vzorec. Výstup ponecháme tak jak je, jen se ubezpečíme, že je nastavena v záložce Nod volba Modulo (viz výše).



Ve Správci objektů uchopíme objekt r_hodiny a přetáhneme jej do okna editoru XPresso. Klikneme na levý vstupní modrý čtverec tohoto uzlu myší a vybereme port Souřadnice > Rotace > Rotace.B. Poté tento port spojíme s výstupem právě upraveného uzlu Překladač rozsahu.



V tomto okamžiku máme plně funkční hodiny, které jednak digitálním způsobem vykazují čas v číslicích, ale také se v nich otáčejí hodinové ručičky. Má to jen jednu vadu. Hodiny začínají čas ukazovat od okamžiku 0 animace a prozatím nelze nastavit jinou počáteční hodnotu. Krátce řečeno, nelze hodiny nařídit.



To však není skutečnost, kterou bychom nedokázali změnit. Změníme ji, právě teď. Vytvoříme si tři nulové objekty Osy. Každý z nich si pojmenujeme. První bude například Sek_natoc (natoč vteřinou ručičku), druhý Min_natoc, třetí Hod_natoc. Všechny tři nově vytvořené nulové objekty můžeme seskupit a skupinu můžeme pojmenovat Zadání času. U každého nově vytvořeného objektu XXX_natoc můžeme vytvořit jednoduché vlastní chování XPresso, kterým omezíme možnost umístění a rotace daného objektu. Vybereme si tedy například objekt Sek_natoc a ve Správci objektů zvolíme Soubor > Nové chování > XPresso - chování, čímž si otevřeme jiné okno editoru XPresso. Do tohoto okna přetáhneme objekt Sek_natoc a ve vytvořeném uzlu zadáme modré, vstupní porty pro parametr Pozice (relativní, tedy vztahuje se k nadřazenému objektu Zadání času) Pozice X, Y a Z. Poté vytvoříme dva uzly Konstanta, v jednom zadáme hodnotu 150, ve druhém 0. Uzel Konstanta s hodnotou 150 spojíme s portem Pozice.X. Uzel Konstanta s hodnotou 0 spojíme s porty Pozice.Y a Pozice.Z. Díky tomu bude objekt Sek_natoc posunut ve směru osy X nadřazeného objektu Zadání času o 150. To jen z důvodu přehlednosti. Stejně provedeme u objektu Sek_natoc i omezení, respektive vypnutí rotace v osách H a P. Neovlivněná zůstane jen rotace okolo B, kterou budeme ovlivňovat nastavení sekundové ručičky. Situace vypadá takto.



U objektů Min_natoc a Hod_natoc uděláme totéž s tím rozdílem, že "uzamčení" umístění objektu Min_natoc bude v relativních souřadnicích 0, 0, 0 a objektu Hod_natoc v -150, 0, 0.





Tím jsme si připravili objekty, kterými budeme ovládat řízení hodin. Pokud chceme, můžeme si nastavit rozličné zobrazení těchto nulových objektů v modelačním okně, abychom je lépe rozlišovali a viděli, ale to je drobnost, která nemá s Xpressem nic společného a tak se tím nebudeme zabývat.

Jistě každého už napadne, že pro zadání času bychom měli zase použít uzel Překladač rozsahu, do kterého budou vstupovat data o natočení řídícího objektu, například Min_natoc a vystupovat z něj budou hodnoty převedené na vteřiny. V případě Min_natoc tedy bude vstupní rozsah v radiánech 0 až 2*Pi a výstupní 0 až 60*60, tedy 3 600. Až budeme mít všechna data ze nastavovacích objektů, tak je sečteme a výsledek sečteme s hodnotou uzlu Čas, který nám prozatím jako jediný definoval začátek běhu hodin.

Začneme nastavením hodin. Ty jsou nejdůležitější a fakticky nepotřebujeme ani žádný další regulátor, protože využijeme tak nastavený překladač rozsahu, že pomocí jeho hodnot můžeme nastavit jakýkoliv čas od 00:00:00 až po 11:59:59. My si ale regulátory pro minuty a sekundy vytvoříme také a to z toho důvodu, že se jen velmi těžko bude pouze regulátorem hodin přesně definovat hodnota minut a ještě hůře sekund. Regulátory pro minuty a sekundy tedy vytvoříme hlavně pro precizní ladění času. Měli bychom to mít po dokončení chování na paměti.

Ve Správci objektů uchopíme objekt Hod_natoc a přetáhneme jej do okna editoru XPresso. Tím se nám vytvoří uzel tohoto objektu. Klikneme na pravý červený čtverec tohoto uzlu a vybereme Souřadnice > Rotace > Rotace.B. Osa B by měla být jednou osou, okolo které bychom mohli objekt otáčet. Ostatní osy by měli být uzamčené (viz výše). Stejným způsobem si do okna editoru přetáhneme objekty Min_natoc a Sek_natoc. I u nich nastavíme stejný, červený výstupní port Rotace.B.

Vytvoříme si nový uzel Překladač rozsahu, kterým budeme "překládat" rotaci objektu Hod_natoc na hodnoty sekund. Klikneme tedy pravým tlačítkem myši do volné plochy editoru XPresso a vybereme Nový nod > XPresso > Počítat > Překladač rozsahu. Vybereme si nově vytvořený uzel a nastavím jej ve Správci nastavení. Vstupní typ dat dáme na radiány a výstupní ponecháme na "Uživatelsky definované". Hodnota spodní vstupu bude stále na 0, horní na 2*Pi (tedy 6,283). Hodnoty Spodního výstupu 0 a Horního 12*60*60, což je 43 200. Zapneme také volbu Modulo. Nyní spojíme výstupní port Rotace.B uzlu Hod_natoc se vstupem nově vytvořeného uzlu Překladač rozsahu.



Vytvoříme si další uzel Překladač rozsahu pro definování hodnot z nastavení ovládacího prvku pro minuty. A hodnoty, které do tohoto překladače zadáme ve Správci objektů jsou opět nasnadě. Vstupní typ dat dáme na radiány a výstupní ponecháme na "Uživatelsky definované". Hodnota spodní vstupu bude stále na 0, horní na 2*Pi (tedy 6,283). Hodnoty Spodního výstupu 0 a Horního 60*60, což je 3 600. Taktéž zapneme volbu Modulo. Vstupní modrý port spojíme s červeným výstupním portem Rotace.B uzlu Min_natoc.

Poslední Překladač rozsahu vytvoříme pro převod hodnot pro nastavení sekund. Tento překladač bude na vstupní straně nastaven stejně jako dva předešlé, ale na výstupní straně bude nastavena hodnota horního výstupu na 60 (tedy max. 60 vteřin). Opět zapneme volbu Modulo a spojíme červený výstupní port Rotace.B uzlu Sek_natoc se vstupním portem nově vytvořeného uzlu Překladač rozsahu.

Je načase, abychom všechny hodnoty, které nám poskytují ovládací prvky hodin sečetli. Klikneme tedy do volné plochy editoru pravým tlačítkem myši a vybereme Nový nod > XPresso > Počítat > Mat. Označíme si právě vytvořený uzel a ve Správci objektů přepneme funkci na Sečíst a typ dat na Celá (čísla). Můžeme si všimnout, že na levé straně právě vytvořeného uzlu máme jen dva vstupní porty. My však máme tři hodnoty, které chceme sečíst. Stačí tedy kliknout na pravé modré pole vytvořeného uzlu Mat:Sečíst a vybrat nový port Vstup. Díky tomu nám budou moci do uzlu vstupovat tři hodnoty. Do každého vstupu tedy propojíme jeden uzel Překladač rozsahu pro Hod_natoc, Min_natoc a Sek_natoc.



Máme tedy sečtené hodnoty ovládacích prvků hodin. Abychom však mohli ovlivňovat nastavení těchto hodin, tak tyto hodnoty musíme přeposlat do celého systému jejich zpracování. Musíme tedy tyto hodnoty sečíst s uzlem Čas, který nám prozatím generoval čas hodin, založený na odehraných snímcích animace. A jak je sečteme? Samozřejmě pomocí dalšího uzlu Mat:Sečíst. Klikneme tedy do volné plochy pravým tlačítkem myši a vybereme Nový nod > XPresso > Počítat > Mat. Označíme si právě vytvořený uzel a ve Správci objektů přepneme funkci na Sečíst a typ dat na Celá. Do jednoho vstupu tohoto nového uzlu přeneseme hodnoty z předešlého uzlu Mat:Sečíst (toho, který zpracovává tři vstupní hodnoty řídících prvků hodin) a do druhého vstupu zapojíme výstup z uzlu Čas, který byl vlastně prvním funkčním uzlem, který jsme vytvořili. Výstup přepošleme do vstupního portu uzlu Výsledek (nad výstup).



Tím jsme ukončili tvorbu hodin. Celý postup byl poměrně zdlouhavý, ale nikterak složitý. Naše práce se však vyplatila. Od této chvíle budeme mít po ruce kdykoliv, kdy budeme chtít vytvořit ve scéně hodiny, kvalitní vlastní "plugin", který nám chování hodin vytváří velmi efektně a hlavně reálně.


Měli bychom ještě poznamenat to, co jsme již zmínili. Totiž to, že při řízení hodin bychom měli nejdříve nahrubo nastavit čas pomocí prvku Hod_natoc a teprve pak jej ladit pomocí Min_natoc a Sek_natoc.

Tématické zařazení:

 » 3D grafika  

 

 

 

 

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

Uživatelské jméno:

Heslo: