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

1. června 2004, 00.00 | Pomocí technologie XPresso si vytvoříme komplexní chování, kterým budeme generovat naprosto reálné a plně automatické chování chodin a to jak digitálních, tak ručičkových. Vytvoříme tedy hodiny, které se budou chovat naprosto nezávisle a při výrobě animace nebude potřeba tyto hodiny dále editovat. Vždyť Čas plyne sám....

Čas, divný to patron, někdy se ho nedostává jindy zas jsme rádi, když nám utíká rychleji. Hlavně v pátek. Však to všichni známe. Ale my se na něj dnes podíváme poněkud jinak. A to z úhlu virtuálního světa. Je to přece skvělé, vytvářet si svůj vlastní svět. Jak si ale ulehčit práci, když ve scéně mají být hodiny. Tím myslím prosté nástěnné či stojící hodiny, které pokojně a zcela bez zájmu o okolí otáčí ručičkami svých ciferníků. Jak vytvořit efekt, kdy si nejdříve nastavíme počáteční čas, spustíme přehrávání snímků animace a jak čas utíká, tak se automaticky otáčejí ručičky hodin. Kamera může hodiny zabrat třeba jen na počátku a konci animace, ale čas který uvidí bude vzhledem k animaci naprosto přesný a odpovídající. Jak tedy takový efekt připravit? Odpověď se jistě naskýtá. Můžeme si napsat skript C. O. F. F. E. E., či celou záležitost odbýt XPressem, což je jistě jednodušší a přehlednější varianta pro většinu z nás, včetně mne a tak využijeme právě tento editor. Poslední možností je samozřejmě vytvořit hodiny ovládané klíčovými snímky, ale pak bychom museli pro každou scénu vytvářet nové nastavení animace těchto hodin a to by nebylo příliš efektivní.

Aby nebyla celá záležitost zas až tak složitá, nebo možná spíše méně nepřehledná, vytvoříme si nejdříve jakousi formu digitálního budíku a teprve poté si nastíníme způsob převedení dat na ručičky hodin. Začátek tedy bude velmi jednoduchý, jako ostatně celý "skript", který v Xpressu vytvoříme, přesto však bude ke konci vytvořené chování svou strukturou (nikoliv funkcí) poměrně složité a nutno poznamenat, že možná i trochu nepřehledné. Musím tedy apelovat na ty, kteří chtějí pouze opakovat níže popsané kroky bez základního zamyšlení se nad zvolenou strukturou a algoritmem, aby si nejdříve přečetli celý postup, zkusili jej pochopit a teprve poté jej zpracovali. Jejich práce tak bude efektivnější a také povede k hlubšímu pochopení celého příkladu a technologie XPresso, což je jistě cílem našeho snažení. V tomto bodě se budu tak trochu opakovat, ale XPresso je vskutku fenomenální nástroj, který je škoda nevyužívat.

Neodpustím si ještě jednu poznámku. Vím, že články o XPressu si nezískávám přespřílišné sympatie čtenářské obce. Je to logické, čtenář raději pěkné obrázky a ne nějaké "oplzlé" vývojové diagramy. Chápu, avšak coby autor zde nejsem pro prezentování svých děl a nápadů, ale pro zprostředkování možností programu. A z toho důvodu doufám, že se nad XPressem budeme potkávat i nadále.

Nějak jsem se dnes na úvod rozepsal. Konec řečí! Jdeme na to!

Vytvoříme si novou scénu a do ní si vložíme tři křivky Text. Ve Správci nastavení v každém tomto objektu vymažeme výchozí nápis "Text" a každý jeden z těchto objektů nově pojmenujeme. První "Hodiny", druhý "Minuty" a třetí "Sekundy". Vybereme si ve Správci objektů objekt textové křivky Sekundy a v tomto správci zvolíme Soubor > Nové chování > XPresso - chování. Tím si otevřeme okno editoru XPresso, které je prozatím panensky neposkvrněné, jako bílý list papíru. Ale ten se dá popsat.



Klikneme do okna editoru XPresso pravým tlačítkem myši (Windows, uživatelé MacOS tlačítkem myši za stisku klávesy Command, na tento jev nadále nebudu upozorňovat) a vybereme Nový nod > XPresso > Hlavní > Čas. Tím v okně editoru vytvoříme první uzel, neboli nod. A to uzel nejdůležitější, který nám bude generovat čas na základě již přehraných snímků animace. Díky tomu budeme mít čas, který v počátku animace bude vždy 00:00:00 a s přehranými snímky bude vzrůstat. To bude základ naší struktury.

Můžeme si všimnout, že se ve výchozím stavu na výstupní straně uzlu Čas nachází port Čas. Tento port použijeme, ale z důvodu testování animace můžeme využít i jiný port, třeba Snímek. A to z důvodu, že kontrolovat chování hodin, třeba ve 12:00 může být časově náročné (asi tak zhruba :-) 12 hodin). Uzel Čas s portem Čas na výstupní straně generuje hodnotu, která vychází ze vzorce "Číslo snímku/počet snímků za vteřinu", přičemž výsledek zaokrouhluje dolů. Při snímku 100 bude tento uzel vysílat hodnotu 3 v případě, že je nastaveno 30 snímků za vteřinu v nastavení projektu.

Nejdříve zajistíme, aby se nám v editoru zobrazovalo množství proběhnuvších vteřin. Uchopíme ve Správci objektů objekt Sekundy a přetáhneme jej do okna editoru XPresso. Tím se vytvoří pro tento objekt nový nod, uzel. Stejně tak přetáhneme i objekty Minuty a Hodiny. U každého z uzlů těchto objektů klikneme myší na levý modrý roh a vybereme parametr portu Vlastnosti objektu > Text. Díky tomu budou tyto textové objekty zobrazovat aktuální čas jako digitální hodiny (samozřejmě že bychom měli ve scéně tyto objekty také vhodně rozmístit aby se nám nekryly, ale to je samo sebou).

Základní jednotkou času je jedna sekunda. Abychom měli celkový přehled o uběhlých sekundách, klikneme pravým tlačítkem do volné plochy editoru XPresso a vybereme uzel Nový nod > XPresso > Hlavní > Výsledek (nad výstup). Tento uzel není ničím jiným, než jen pomocnou jednotkou, která ve svém poli zobrazuje vstupující data a zase je posílá ven. Na funkčnost tedy nemá žádný vliv.

V prvé řadě si vytvoříme zobrazení adekvátních hodnot vteřin. A to pomocí uzlu Nový nod > XPresso > Počítat > Mat. Označíme si právě vytvořený uzel Mat a ve Správci nastavení (záložka Nod) změníme jeho funkci na Modulo a Datový typ na Celá (tím se myslí celá čísla). Je asi namístě vysvětlit funkci Modulo. Jde vlastně o vytvoření cyklů, kdy vstupující hodnota zvyšuje výstupní hodnotu o stejnou jednotku do okamžiku dosažení vrchní hranice cyklu, kdy se výstupní hodnota skokem vrátí na počáteční hodnotu cyklu. Vše asi nejlépe objasní příklad. Modulo je nastavené na 0 až 10, díky čemuž budou vstupující hodnoty převedeny na výstupní podle následujících příkladů (vstup/výstup) 5/5, 8/8, 10/0, 11/1, 22/2 atd.

Nyní máme dvě možnosti. Do uzlu Mat budeme posílat hodnoty uzlu Výsledek nad výstup, ale tyto hodnoty budeme v Mat upravovat pomocí funkce modulu. Jednu hodnotu tedy máme, druhou musíme zadat. Můžeme ji zadat při vybrání uzlu Mat ve Správci nastavení na záložce Parametr (Vstup [2]), ale osobně preferuji jiný postup, ve kterém ve správci XPresso vidíme i vstupní hodnoty. Klikneme tedy pravým tlačítkem myši do prázdné plochy editoru a vybereme příkaz Nový nod > XPresso > Hlavní > Konstanta. Nový uzel označíme a ve Správci nastavení zadáme hodnotu 60 (vteřin je na hodinách vždy nejvíce 60, respektive 0-59). Je načase vytvořit první spojovací vedení. Tahem vytvoříme spojení (vždy v pořadí výstup, červený port - vstup, modrý port) mezi Čas - Výsledek (nad výstup) - Mat:Modulo vrchní port - Sekundy. A ještě do uzlu Mat:Modulo zadáme do druhého vstupního portu hodnotu uzlu Konstanta. Pokud nyní přehrajeme animaci (a pokud bude dostatečně dlouhá), tak si můžeme zkusit, že se v textové křivce Sekundy budou vypisovat hodnoty 0 až 59. Pokud chceme přehrávání zrychlit, můžeme změnit port v uzlu Čas (například na Snímek, více viz výše).



Je to prozatím snadné, že. A stále ještě bude. Můžeme si všimnout, že v uzlu Konstanta je vidět zadaná hodnota 60. A to hned na první pohled. Proto jsme tento uzel využili, abychom viděli co do Mat:Modulo vstupuje. Myší za stisknuté klávesy Shift vybereme propojené uzly Konstanta a Mat:Modulo. Jejich kopie použijeme pro zobrazení minut. Máme-li tedy oba uzly vybrané, tak je pomocí dvojhmatu Ctrl+C a Ctrl+V zkopírujeme. Kopii posuneme někam dolů pod vytvořený řetězec se sekundami.

Nyní si zobrazíme uběhlé minuty. Jistě si všichni pamatujeme, že v chování máme uzel Výsledek (nad Výstup), ze kterého nám vycházejí hodnoty uběhlých vteřin. Abychom mohli zobrazit množství uběhlých minut, tak musíme hodnotu uběhlých vteřin vydělit 60 a výsledné číslo zpracovat modulem (právě jsme si přeci zkopírovali Mat:Modulo). Přičemž modul bude opět 60 (jako u vteřin). Je-li idea jasná, klikneme 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 Mat a ve Správci nastavení (záložka Nod) změníme jeho funkci na Dělit a Datový typ na Celá. Vybereme si některý z uzlů Konstanta a zkopírujeme jej (to bude hodnota, kterou budeme dělit vstupující vteřiny). Musíme si ještě říci, že do každého vstupního uzlu (levého) může vstupovat jen jedna hodnota, ale z výstupního portu může hodnota vycházet do libovolného počtu vstupních portů. My této vlastnosti využijeme.

Propojíme tedy výstupní port uzlu Výsledek (nad výstup) - Mat:Dělit (vrchní první vstup) - Mat:Modulo (vrchní první vstup, toto je jeden z dříve kopírovaných uzlů) - Minuty. Do druhého spodního vstupního portu Mat:Dělit napojíme naposledy zkopírovaný, samostatně stojící uzel Konstanta, ve kterém máme hodnotu 60. Do spodního portu uzlu Mat:Modulo by nám měl vstupovat uzel Konstanta, který jsme spolu s tímto uzlem před chvílí zkopírovali. Při přehrávání animace by se nám nyní měly zobrazovat jak sekundy, tak minuty, jejichž hodnota by se vždy měla zvýšit o 1 v případě, že se změní hodnota sekund z 59 na 0. V okamžiku kdy dosáhne hodnota minut 59 a sekund 59 a uplyne právě jedna vteřina, obě hodnoty se posunou na 0 a 0.



Máme-li hotovo, tak nás pro zobrazení základní funkce digitálních hodin čeká již jen zobrazení hodin. Ale to bude hračka. Vždyť to vlastně bude podobné jako s minutami! Vybereme si tedy celý řetězec tvorby minut a ten zkopírujeme. Přesněji řečeno vybereme uzly Mat:Dělit včetně vstupního uzlu Konstanta a Mat:Modulo opět včetně vstupního uzlu Konstanta a pomocí obligátní zkratky Ctrl+C a Ctrl+V si celou tuto strukturu zkopírujeme a přesuneme opět o něco níž.



Rovnou můžeme spojit výstup uzlu Mat:Modulo se vstupem uzlu Hodiny. Musíme však upravit hodnoty vstupujících uzlů Konstanta, které zasahují do výpočtu hodin. V prvé řadě ale spojíme výstup uzlu Výsledek (nad výstup) s prvním vrchním vstupním portem nově zkopírovaného uzlu Mat:Dělit. Díky tomu budeme hodnoty vteřin posílat do výpočtu hodin. Jedna hodina se skládá z 3 600 vteřin, z toho důvodu změníme hodnotu uzlu Konstanta, který vstupuje do uzlu Mat:Dělit u výpočtu hodin na 3 600. Hodnota vystupující z uzlu Mat:Dělit u výpočtu hodin poté vstupuje do uzlu Mat:Modulo, který by měl zadávat cykly, po kterých se bude hodnota hodin opakovat. Abychom zachovali kontinuitu s cílem našeho snažení, ciferníkovými hodinami, zadáme hodnotu 12. Tím máme elektronickou podobu hodin, které vždy začínají pracovat s prvním snímkem animace, hotovou. Opět si můžeme změnit port u uzlu Čas kupříkladu na Snímek a nastavit počet snímků animace na více jak 43 200 (díky tomu se bude animace odehrávat více jak 12 "hodin") a posunem jezdce časové osy si můžeme chování vyzkoušet.



Na tomto místě dnešní část návodu necháme poněkud uležet. V příští části si vytvoříme ovládací prvky na nařízení počátečního zobrazeného času, díky čemuž bude například ve snímku 0 animace počáteční čas 9:43:15 a také si převedeme číselnou podobu času na "ciferníkovou".

Tématické zařazení:

 » 3D grafika  

 

 

 

 

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

Uživatelské jméno:

Heslo: