Přehled nových funkcí v Blenderu (16. část): Novinky animačního systému potřetí - 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

Přehled nových funkcí v Blenderu (16. část): Novinky animačního systému potřetí

11. února 2009, 00.00 | V posledních dvou článcích jsme si představili novinky v animačním systému Blenderu a NLA Editor. Na poodhalení svého tajemství však stále ještě čeká nemalé množství novinek a vylepšení. Proto si je v dnešním - převážně teoretickém - článku představíme.

Constraints

S Constraints jsme se setkali již dříve - jde o jakési "automatizované ovladače" objektů, především Armatur. Díky Constraints můžeme vytvářet animace, jejichž ruční výroba by trvala nesrovnatelně déle a byla by mnohem složitější.

Constraints se nacházejí v Object buttons (F7):

Nabídka Constraints
Pozn.: pokud bychom neměli vybranou kost v Pose módu Armatury, v nabídce by se nenacházela možnost IK Solver

Úpravy kódu ve verzi 2.46 vedly k optimalizaci výpočtů, lepší použitelnosti a rozšiřitelnosti a mohlo tak vzniknout i několik nových Constraints. Všechny výpočty nyní probíhají v jediném passu a to tak, že Constraints se aplikují v takovém pořadí, v jakém jsou v zásobníku (obdobně jako Modifikátory), s jedinou výjimkou - IK Solver a Rigid Body Joint jsou použity až úplně na konec. Změna architektury pak umožnila přidání několika zajímavých vymožeností, jako např. více Cílů nebo Prostorové Konverze. Pojďme si je představit.

Space Conversions - konverze souřadnic mezi různými prostory

Aby se Constraints mohly počítat ve správném pořadí a aby byly stále pohodlně ovladatelné, musel se vyvinout systém, který by zvládal dostatečně rychle a čistě počítat matice v různých "prostorech". Základním prostorem je tzv. World-Space (Globální Prostor) - z něj se všechny potřebné matice konvertují do dalších prostorů, v nichž se provádějí potřebné operace. Poté se matice konvertují zpět do World-Space a jsou tak připraveny na další operace. Pro Constraints, jichž se týkají Prostorové Konverze je k dispozici nastavení prostoru (záleží na zdrojovém/cílovém objektu).

Přidejme si do základní scény se světlem a kamerou jednu Armaturu:

Scéna

Vyberme Armaturu a přidejme jí Copy Scale Constraint:

Copy Scale Constraint

Nastavení prostor se nachází vedle popsiku C Space: ve dvou roletkových menu - to více vlevo určuje cílový prostor (Target Space), to více vpravo určuje vlastníkův prostor (Owner Space). Nejdříve zatrhneme tlačítko Offset (pouze pro demonstraci jeho funkčnosti - pokud už jsme nějakým způsobem upravili vlastníka, tato změna se přičítá k k transformaci vyvolané Constraint) a libovolně zvětšíme či zmenšíme Armaturu. Když poté budeme škálovat kameru, změna se projeví ihned a to tak, že v potaz se bude brát i škálování Armatury.

Zvětšená kamera i Armatura

Nyní naparentujeme světlo kameře (RMB vybereme nejdříve kameru, SHIFT+RMB pak světlo a CTRL+P parentujeme). Pokud nyní budeme zvětšovat světlo, změna se projeví i na kameře a použijí se přitom koordináty z World-Space, proto se bude měnit i Armatura:

Zvětšování světla
Zvětšila se jak kamera, tak Armatura

Pokud ale v nastavení Constraint vybereme lokální souřadnice (Local (Without Parent) Space) pro Cíl, nastane při škálování světla jiná situace:

Zvětšování světla neovlivnilo Armaturu
Tentokrát nebyla Armatura nijak ovlivněna

Jak vidno z obrázku, s Armaturou se nic nestalo. Čím to? Světlo ovlivňuje kameru v Globálním Prostoru, ale lokální souřadnice kamery se nemění => Constraint nastavená tak, aby přebírala matice z Lokálního Prostoru jednoduše nezaznamená změnu.

Pro objekty tedy existují dva druhy prostorů:

  • World-Space - souřadnice objektu jsou relativní vůči globálním souřadnicím
  • Local (Without Parent) Space - souřadnice objektu jsou relativní vůči lokálním souřadnicím nadřazeného cílového objektu
Pro Armatury, resp. kosti pak existují ještě další prostory:
  • World-Space - viz výše
  • Pose-Space - změny v Object módu nejsou brány v potaz, počítá se pouze s těmi z Pose módu
  • Local with Parent - projeví se sice změny lokální, ale rodičovský objekt bude stále ovlivňujícím faktorem
  • Local - striktně lokální transformace; relativní vůči výchozí pozici kosti
Pojďme nyní demonstrovat, k čemu slouží Owner Space. Vytvořme si jednoduchou scénu se dvěma Armaturami a jednou krychlí:

Dvě Armatury a jedna krychle

Armatura na kraji se jmenuje A1, ta uprostřed A2 a krychle má název K. Přidejme A2 Copy Rotation Constraint (bude kopírovat rotaci A1). Poté nadřadíme K Armtuře A2 (vybereme A2, pak K a CTRL+P). Nyní, pokud zkusíme zarotovat krychlí, pravděpodobně se stane něco jiného, než bychom očekávali:

Podřízená kost se neotočila
Podřízená kost se nijak neotočila

Čím to, že se A2 neotočila, i když její rodič změnil rotaci? Odpověď je jednoduchá - změna rotace A1 se na A2 projeví v globálních souřadnicích (kvůli nastavenému World-Space) a ty se proto nezmění ani když zarotujeme A2, ani když zarotujeme nadřízeným objektem (v našem případě krychlí). Pokud nastavíme hodnotu Local, všechno již proběhne podle předpokladů:

Předpokládaná rotace

Předpokládaná změna proběhne i při natočení A1:

Opět správné natočení

To by bylo k jednotlivým prostorům vše, proto se nyní podíváme na další novinku.

Více Cílů, více možností

V minulosti nebylo nic takového možné, dnes - po četných úpravách kódu - však už ano. Z této popory těží především IK Constraint - díky více cílům lze nyní určit, kam mají být natočeny oba konce kosti. Pojďme si vše předvést na příkladu. Klasickým předmětem takovéto situace může být noha:

Armatura nohy
Pozn.: koule u kolena a objekt u paty - požití Custom Bone Shapes, o nichž jsme hovořili v předminulém díle

Kost u paty se jmenuje solver, koule má název rot. Takto nastavíme Cíle pro IK Constraint prostřední ("holenní") kosti:

Cíle IK Solveru

Při pohybu kostí solver se koleno stále natáčí směrem k rot.

Koleno natočené směrem ke kouli

Toto by ovšem tak samozřejmě neproběhlo, kdybychom vymodelovali stehenní a holenní kost v jedné přímce - holeň by se poté nemohla "rozhodnout", jakým způsobem se má ke kouli točit. Ze stejného důvodu se obecně doporučuje při modelování Meshe a vytváření Armatury myslet právě na takovéto drobnosti - ve výsledku totiž mohou ušetřit drahocenný čas. S Pole Target souvisí i nové nastavení - Pole Offset (na stejném panelu) určuje, o kolik stupňů bude kost otočená od Pole Target objektu.

Pokud jako cíl (např. u Track To Constraint) nastavíme jakoukoli kost, můžeme vybrat, která její část má být sledována. Toto lze nastavit na panelu Constraints tlačítkem Head/Tail:

Nastavení sledované části

Nulová hodnota znamená, že se sledující kost zaměří na začátek sledované kosti, jednička pak zaměří její konec. Výsledek hodnoty 0.5:

Head/Tail: 0.5

Díky této novince je spousta rigů mnohem snazších, dříve se totiž musela nadřadit kost např. Empty objektu (ten musel být umístěn v požadované pozici) a tento Empty byl poté nastaven jako sledovaný objekt.

U Meshů a Lattices, které mají vertexovou skupinu, se tato může nastavit jako sledovaná část v kolonce VG:, která se objeví poté, co jako sledovaný objekt nastavíme Mesh či Lattice.

Cíl: Vertexová skupina

V potaz se při výpočtu bere průměrná pozice všech bodů skupiny, normálová orientace faců a dokonce i deformace skupiny (např. v rámci Shape Keys). Obdobně jako u Head/Tail, i zde bylo dříve potřeba vypomoci si Empty objektem.

Nové Constraints

PyConstraints mají tu výhodu, že si je uživatel může naprogramovat sám. K programování se používá opět Python a přednastavený template je k dispozici v textovém editoru v záložce Text-Script Templates-Script Constraint - zde se také nacházejí další instrukce.

PyConstraint template

Chlid-Of představuje Constraint umožňující více rodičovských vazeb a bylo v plánu jako část původního konceptu pro Constraints, nakonec ale nikdy nebylo implementováno. K dispozici je nastavení, který z atributů bude rodič ovlivňovat (pozice, rotace i přesun, pro každou z os zvlášť). Dalšími tlačítky na panelu jsou Set Offset (přesune potomka na místo, v němž byl parentován) a Clear Offset (potomek se přesune na takové místo, které mu absolutně určí jeho rodič).

Child-Of

Transformation přenáší vzájemně mezi sebou informace o rotaci, pozici a velikosti a konvertuje je do různých rozsahů. Lze například nastavit, aby se zvětšování cílového objektu projevilo v pozici vlastníka a přitom aby se vlastník pohyboval jen v jisté vymezené oblasti. Tlačítka vlevo určují, které údaje se v jakém rozsahu budou přenášet z Cíle, tlačítka vpravo pak vymezují účinek a jeho rozsah na vlastníkovi. Volba Extrapolate určuje, zda se hodnoty přesahující vymezené rozsahy ořežou, či zda budou pokračovat i za stanovenou hranici.

Transformation Constraint

Limit Distance vytvoří pomyslnou kouli kolem Cíle s určenou vzdáleností (Distance) od vlastníka. Poté lze nastavit, zda se dané operace budou projevovat pouze pokud bude vlastník uvnitř, vně, či na povrchu oné koule.

Limit Distance

Pole působnosti se určuje výběrem z roletkového menu Clamp Region:

Pole působnosti

Typickým příkladem využití může být IK Solver, po němž chceme, aby se nedostal dál, než mu to umožňuje např. délka paže. V takovém případě je vhodné umístit na začátek řetězce (rameno) pomocnou kost, která bude oním Cílem pro Limit Distance IK Solveru - aby nedocházelo k cyklickým chybám. Abychom nemuseli ručně počítat maximální vzdálenost, necháme Blender, aby to udělal za nás. Vybereme Cíl, poté vlastníka a CTRL+ALT+C vyvoláme menu pro přidávání Constraints. Vybereme Limit Distance...a voilà! V políčku Distance máme vyplněnou hodnotu s přesností na čtyři desetinná místa.

Vylepšené Constraints

Změny kódu rozšířily možnosti i pro stávající Constraints, proto byla většina z nich upravena, popř. vylepšena. V prvé řadě se toto vylepšení týká Action Constraint - funguje obdobně jako Driver u Shape keys, ale neovlivňuje vertexy, nýbrž Akce. Vyzkoušejme si, co nám Action Constraint nabízí na nějaké jednoduché Armatuře:

Armatura

Nyní vytvoříme Akci, při níž se během pěti snímků poslední dva články ohnou k počátku řetězce:

Ohyb Armatury

Je vhodné také nějaké smysluplné pojmenování Akce v Action Editoru:

Pojmenování Akce

Nyní přidáme kosti k2 (viz obrázek) Action Constraint a vyplníme potřebná políčka:

Action Constraint

Jmenovitě jsou to pak následující:

  • Target - určuje cílový objekt - v našem případě nejdříve Armaturu a pak kost driver
  • AC - název Akce, která se bude vykonávat
  • Roletkové menu - zde vybereme operaci na ovladači, která bude spouštět Akci (Armatura na obrázku byla přidána v pohledu shora, proto bude Akci ovládat rotace kolem osy Z)
  • Start, End - počátek a konec Akce
  • Min, Max - udává spodní a horní limit pro zadanou operaci
Nyní vybereme k3 a SHIFT+LMB i k2 a CTRL+C vyvoláme menu pro kopírování atributů pózy a vybereme Constraints.... Poté jen kliknutím potvrdíme volbu (v našem případě jediné) požadované Constraint. Ta se tedy se vším všudy zkopírovala z k2 na k3. Je vhodné smazat z Armatury Akci, aby se nevykonávala v oněch pěti snímcích, ale aby byla řízena pouze kostí driver. Tou pokud nyní zarotujeme v zadaném rozsahu -90° (tak jsme ji umístili) až -180°, vykoná se zároveň i Akce na obou kostech:

Action Constraint v akci

Space Conversions vděčíme za to, že Akce mohou být ovládány i změnou pozice či velikosti cílového objektu, kterým nově už zdaleka nemusí být jen kost Armatury.

Co se týče Copy Constraints (ať už se kopírování vztahuje na polohu, rotaci či velikost), všechny mají nyní tlačítko Offset, které zaručí, že transformace vlastníka se připočte k transformaci převzaté z Cíle. Blender.org doporučuje používat stejné typy prostorů pro vlastníka i Cíl.

Tím posledním, co si dnes představíme, je Clamp To Constraint. Je jakousi obdobou Follow Path Constraint - díky ní tedy můžeme pohybovat objektem po libovolné křivce. Oproti Follow Path je zde ale jeden podstatný rozdíl: animovat můžeme přímo objekt, a to pohybem po dané souřadnici. U Follow Path je třeba zadávat hodnoty na Speed křivce v IPO Editoru, což je v některých případech zcela nevyhovující, nehledě na to, že výsledkem by potom ani nemusela být plynulá animace. Stinnou stránkou Clamp To je fakt, že neexistuje možnost, jak přenést rotaci objektu při pohybu na křivce obdobným způsobem, jako činí Follow Path. Nutno ovšem dodat, že to často ani není potřeba - koneckonců, pohodlnějsí použití Clamp To dělá z této Constraint zajímavou (a mnohdy také použitelnější) volbu.

Clamp To Constraint

Do políčka Target se píše jméno cílové křivky, volby v části Main Axis určují, že se objekt bude pohybovat po křivce pouze tehdy, když jím budeme posouvat po ose X, Y či Z. Je též možné nechat Blender automaticky zvolit tuto osu tlačítkem Auto. Tlačítko Cyclic pak určuje, zda se při překročení limitu pro danou osu objekt objeví opět na začátku křivky a pohyb po ní se tak bude moci opakovat.

A to by bylo pro dnešek vše. Constraints jsou na poli animace široce využívaným nástrojem a v kombinaci s ostatními možnostmi Blenderu (NLA Editor) lze dosáhnout leckdy až neuvěřitelných výsledků. Nutné je také dodat, že Constraints se zdaleka neomezují jen na Armatury, např. Clamp To Constraint není pro Armatury vůbec doporučena! Možná právě proto jsou (při plném využití jejich potenciálu) ve spoustě případů jediným východiskem. Několik novinek animačního systému sice stále čeká na své odhalení, ale svým rozsahem je lze zařadit do praktického příkladu, na němž konečně vyzkoušíme naše dosavadní poznatky. Příště se můžete těšit na tvorbu modelu, který budeme v budoucnu animovat. Na shledanou příště.

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: