XPresso 3, manipulace s vektory, třetí tutoriál na editor XPresso v CINEMĚ 4D - 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:



Go verze

XPresso 3, manipulace s vektory, třetí tutoriál na editor XPresso v CINEMĚ 4D

28. května 2003, 00.00 | Pomocí editoru XPresso nastavíme chování psa a jeho pána. No opravdu! Kam půjde objekt pána, tam podle délky vodítka půjde i objekt psa. To vše díky technologii XPresso a práci s vektory.

Vektory jsou jedny z nejpoužívanějších elementů v 3D prostoru. Definují totiž pozici, orientaci a také velikost objektu.


Před prací na tomto tutoriálu bychom měli mít za sebou úspěšné zvládnutí předchozích tutoriálů, týkajících se témata XPresso. V tomto tutoriálu se totiž předpokládá základní znalost problematiky.

Vektory jsou tvořeny třemi hodnotami, jako například (-1.5;9;13). Čísla mohou reprezentovat pozici XYZ nebo HPB orientaci komponentů vektorů. Manipulace s orientací a délkou vektorů může být použita u rozličných aplikací. V tomto tutoriálu vytvoříme virtuální spojení vodítkem mezi dvěmi objekty.

Je to v zásadě jako procházka se psem. Pes je omezen v pohybu poloměrem tvořeným vodítkem. Jakmile se budeme pohybovat, budeme tedy táhnout vodítkem, tak nás pes bude následovat. Abychom tento jednoduchý příklad poněkud rozšířili, tak vytvoříme variabilní délku vodítka, které se tak může jakoby automaticky navíjet.

Vytvoříme novou prázdnou scénu.

Vložíme do scény primitivní objekt Sphere (koule) a pojmenujeme jej Dog (pes).

Z hlavní lišty zvolíme menu Object a z tohoto menu vložíme do scény Null Object (nulový objekt, obsahující vlastně jen osy) a ten pojmenujeme Master (pán).

(Nová scéna obsahuje kouli a nulový objekt.)

V Object manageru vybereme objekt Master a přidáme mu tag chování XPresso.

Tažením z Object manageru umístíme objekty Master a Dog do editačního okna XPresso.

(Objekty Master a Dog budou používány coby uzly (nody) objektů v editačním okně XPressa.)

Pro použití výpočtů pozice objektů Master a Dog musíme oba tyto objekty umístit do editoru XPresso.

V XPresso editoru v obou uzlech objektů klikneme na červené pole pro zadání výstupního portu a vložíme do výstupních portů Global Position (globální pozice)(Coordinates > Global Position > Global Position)(souřadnice, globální pozice) .

(U obou uzlů jsme vytvořili výstupní port s nastavením globální pozice.)

Úkolem kalkulace je vypočítat vzdálenost mezi dvěmi objekty a je vhodné použít globální pozici, protože objekty mohou být rozdílně umístěny ve struktuře scény (hierarchicky). I když v našem případě jsou objekty na stejné úrovni. Použití globálních hodnot znamená, že objekty mohou být přemístěny do nové hierarchické struktury bez toho, že by se narušil efekt, vytvořený pomocí nastavení chování XPresso.

Vytvoříme nový uzel zvolením New Node > XPresso > Calculate > Distance (vzdálenost) a spojíme vstupní porty tohoto uzlu s výstupními porty Global Position uzlů Master a Dog.

(Uzel Distance vypočítá vzdálenost mezi pozicí objektů Master a Dog.)

Uzel Distance vypočítá vzdálenost mezi dvěmi zadanými pozicemi. Když spojíme první port uzlu Distance s výstupním portem Global Position uzlu Dog a to samé provedeme mezi porty uzlů Distance a Master. Výstupní port uzlu Distance nyní bude vysílat pozici mezi objekty Master a Dog jakémukoliv uzlu, který na tento výstup bude připojen.

Poznámka: pozice objektů Dog a Master je zadána vektorem, ale hodnota vypočtené vzdálenosti uzlem Distance je číslo.

V Object manageru vybereme objekt Master a v Attributes manageru zvolíme User Data > Add User Data (uživatelská data, přidat uživatelská data).

Objektem Master potřebujeme kontrolovat vodítko, objekt Master samotný musí obsahovat vložená uživatelská data. Jak jsme viděli v předchozích příkladech, uživatelská data jsou výhodná tím, že nám dodávají větší míru kontroly nad jednotlivými hodnotami XPresso. V tomto případě jsou uživatelská data použita pro definování délky vodítka.

V dialogovém okně Add User Data (přidat uživatelská data) zadáme jméno Distance.

Nastavíme Data Type (typ dat) na Float.

Nastavíme Interface (typ rozhraní) na Float Slider (plovoucí posuvník).

Nastavíme jednotky na metry.

Nastavíme hodnotu Min na 0 a hodnotu Max na 1000.

Tím říkáme, že když budeme upravovat aktuální hodnoty uživatelských dat pro Distance, tak tyto hodnoty nemohou být menší jak 0 a větší jak 1000 m.

Nastavíme velikost Step (krok) na 1 a klikneme na OK čímž zavřeme dialogové okno.

(Pomocí nastavení uživatelských dat v Attributes manageru budeme moci ovlivňovat vzdálenost od objektu Master.)

Vybereme v Object manageru objekt Master a v Attributes manageru přepneme na stránku User Data a nastavíme vzdálenost Distance na 200.

Pro účel našeho příkladu stačí nastavit délku vodítka na 200 m.

V XPresso editoru klikneme na červený roh portu uzlu Master a z nabídky vybereme uživatelská data Distance.

V XPresso editoru vytvoříme uzel Clamp (omezení) (New Node > XPresso > Calculate > Clamp).

Spojíme výstupní port uzlu Distance se vstupním portem Value (hodnota) uzlu Clamp.

Spojíme výstupní port Distance uzlu Master s portem Max uzlu Clamp.

(Uzel Clamp srovnává délku vodítka s aktuální vzdáleností mezi psem a pánem.)

V Attributes manageru nastavíme hodnotu Min portu Clamp na 0.

Od tohoto okamžiku je vrchní limit omezující vzdálenosti definován uživatelskými daty Distance. Výsledná hodnota je vysílána z portu uzlu Clamp a ta nemůže překročit hodnotu uživatelských dat Distance.

Aktuální vzdálenost mezi psem a pánem, která je vyčíslována uzlem Distance a vstupuje do uzlu Clamp, pouze ukazuje, jak daleko je omezovaný výstup, když hodnota leží uvnitř hraničních hodnot 0 a zadanou vzdáleností. Vzdálenost mezi dvěmi objekty nemůže být logicky nižší než 0, tak jak jsme to nastavili pro port Min pro uzel Clamp. Tato hodnota je konstantní a může být i nadále nastavena pomocí Attributes manageru.

V XPresso editoru vytvoříme uzel Math (New Node > XPresso > Calculate > Math)(nový node > XPresso > počítat > Mat).

V Attributes manageru zvolíme Data Type na Vector a Function na Subtract (odečíst).

V XPresso editoru spojíme výstupní port uzlu Dog s vrchním vstupním portem uzlu Math.

Spojíme výstupní port uzlu Master Global Position se spodním vstupním portem uzlu Math.

(Uzel Math nám umožní odečítat jeden vektor od druhého pro výpočet vektoru mezi dvěmi pozicemi.)

Uzel Math nám zprostředkovává velký počet možných výpočtů. Poskytuje základní funkce – sčítat, odečítat, násobit, dělit a modulo – jejichž hodnota může být měněna v Attributes manageru, ve kterém je tento Math uzel aktivní. Uzel Math není omezen jen na vstupní číselné hodnoty, může také zpracovávat vektory.

Poznámka: oba vstupní porty přijímají hodnoty téhož typu, jiné druhy hodnot jsou upraveny automaticky a to může být příčinou, že číselné vstupy „zmizí“, nebo že jsou vektory konvertovány do jednoduché skalární veličiny, což vede k neočekávaným a nechtěným výsledkům. V našem případě je odečítán jeden vektor od jiného, čehož výsledkem je jiný vektor. Výsledný vektor charakterizuje orientace, která je výslednicí orientací vstupních vektorů.

Významné je tedy i pořadí umístění vektorů při výpočtu. Obecně se tím říká, že odečtená poloha je výslednicí mezi cílovou polohou a stávající polohou, přičemž výsledný vektor je orientován podle trajektorie mezi stávající a cílovou polohou. V našem případě pána a psa, uzel Math vypočítává směr, který je potřebný pro uchycení psa za pánem. Vektor vypočítaný uzlem Math také obsahuje informace o vzdálenosti mezi pánem a psem. Omezení není aplikováno na objekt psa a tato hodnota by mohla spadat mimo délku vodítka. Ale nemusíme si dělat starosti, protože náležitá vzdálenost mezi pánem a psem je vypočítána v uzlu Clamp.

V XPresso editoru vybereme Universal node (univerzální node) (New Node > XPresso > Adapter > Universal).

V Attributes manageru nastavíme Data Type na Normal.

V XPresso editoru spojíme výstup uzlu Math se vstupním portem uzlu Universal.

(Uzel Universal může být použit pro konverzi dat.)

Nyní je možné kombinovat různé druhy vstupních dat. Orientace vektoru mezi psem a pánem je vypočítána pomocí uzlu Math; ten charakterizuje směr, kterým bude ovlivňován pes z pozice pána. Délka vektoru může přesahovat mez ohraničenou pomocí vstupu uživatelských dat Distance. Jinou hodnotou je vzdálenost mezi psem a pánem. Tato hodnota se mění na “platnou” hodnotu díky uzlu Clamp a hodnotě Distance.

Úlohou změn v uzlu Math je orientovat vektor a úlohou uzlu Clamp je vypočítat jeho délku. V případě, že je vše správně, tak výsledkem uzlu Math bude vektor o délce 1. Tato hodnota je následně jednoduše násobena na odpovídající délku pomocí uzlu Clamp.
Délka vektoru 1 je prostým matematickým elementem. Takové vektory se nazývají normálné, nebo normály. Tento typ vektorů však již dobře známe z modelování polygonů, jsou to ty malé žluté čáry zobrazené po vybrání polygonů. Konverze vektorů do normál, kterými definujeme směr, ale nikoliv délku, je způsobena uzlem Universal. Tento „adaptér“ ulehčuje konverzi jednoho typu dat na jiný, například vektoru na normálu.

V XPresso editoru vytvoříme nový uzel FloatMath (New Node > XPresso > Calculate > FloatMath).

V Attributes manageru nastavíme typ dat Data Type na Vector a funkci na Multiply (násobit).

V XPresso editoru spojíme výstupní port uzlu Universal se vstupním portem Input uzlu Float Math.

Spojíme výstupní port uzlu Clamp s portem Float Value (hodnota Float) uzlu FloatMath.

(Uzel FloatMath může kombinovat rozdílné typy matematických dat, bez jejich předchozí konverze. Může být použit pro násobení normál vektorů s reálnou hodnotou vzdálenosti mezi psem a pánem.)

Jak bylo popsáno dříve, uzel Math konvertuje rozdílné typy dat automaticky do odpovídajícího jednotného typu. Uzel FloatMath má téměř stejnou funkci jako uzel Math až na to, že pracuje s rozdílným typem dat bez jejich předešlé úpravy. Tímto způsobem může být pomocí uzlu Universal snadno násoben normálný vektor s reálnou hodnotou z uzlu Clamp. Výsledkem je orientovaný vektor s odpovídající délkou.

Do XPresso editoru vložíme další uzel Math.

V Attributes manageru nastavíme Data Type (typ dat) na Vector a funkci na Add (sčítání).

V XPresso editoru spojíme výstupní port Global Position uzlu Master se vstupním portem nového uzlu Math.

Spojíme výstupní port uzlu FloatMath se vstupním portem nového uzlu Math.

(Od tohoto okamžiku bude vypočítaný orientovaný vektor umístěn na správném místě působení.)

Vypočítaný orientovaný vektor uzlem Float Math směřuje správným směrem a má odpovídající délku, ale není na správném působišti. Orientace vektoru je definována spojnicí mezi pánem a psem, to ale neřeší tento problém. Jednoduše použijeme jako působiště vektoru pozici pána a orientace bude zadávána směrem k psovi.

Tato kombinace pozice a orientace vektoru může být použita díky sčítání dat v novém uzlu Math. Protože jsou obě vstupní hodnoty ve stejném formátu (jsou to vektory) tak není ani třeba tyto hodnoty před vstupem do uzlu konvertovat. Když používáme funkci Add (sčítání) s vektorovým typem dat v uzlu Math, tak není důležité, jak velké spojované hodnoty jsou.

V Object manageru uchopíme objekt Dog a přetáhneme jej do XPresso editoru, čímž vytvoříme nový uzel.

XPresso vypočítá novou pozici objektu Dog, pokud délka vodítka, která je kontrolována skrz uživatelská data Distance objektu Master, nepřekoná stávající pozici. Pro dokončení nastavení se nová globální pozice přesměruje zpět na objekt Dog.

V XPresso editoru klikneme na modrý roh nového uzlu Dog a zvolíme Global Position.

Spojíme nový vstupní port Global Position nového uzlu Dog s výstupním portem posledního vytvořeného uzlu Math.

(Nově vygenerovaná globální pozice bude posílána na objekt Dog, pomocí jeho nového uzlu.)

Toto spojení zajišťuje, že se objekt psa nemůže pohybovat ve větší vzdálenosti od objektu Master (pán), než jaká je nastavena v uživatelských datech Distance (tu jsme dříve nastavili na 200 m). Na druhou stranu můžeme objektem Master pohybovat zcela volně a pes bude pána následovat pouze po „napnutí vodítka“.

Souhrn
Viděli jsme, jak můžeme vytvořit komplexní vztah mezi dvěmi objekty tak, že není podstatné, jak se naanimujeme řídící objekt, protože pohyb navázaného objektu je limitován pouze hodnotami nastavení.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » 3dscena  

 » Rubriky  » 3dscena - vlastni  

 » Rubriky  » Go verze  

 

 

 

 

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

Uživatelské jméno:

Heslo: