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

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

11. prosince 2008, 00.00 | Prozatím jsme věnovali dostatek prostoru novinkám v oblasti modelování, renderování, materiálů a částic, ale animační systém se téměř nepředvedl. Přitom díky Big Buck Bunny a Elephant's dream prodělal nemalé změny. V dnešním díle si proto představíme úroveň, jaké možnosti animace dosáhly.

Ještě než se pustíme do samotných animačních novinek, měli bychom uvést (pakliže se to k někomu z vás ještě nedoneslo), že vyšla nová verze našeho oblíbeného 3D programu - Blender 2.48a

Blender 2.48a splash screen

Již více než před rokem jsme si v článku Přehled nových funkcí v Blenderu 2.44: část 1 popsali některé z nových možností armatur, ovšem nutno dodat, že i ty od té doby prošly menšími či většími změnami. Ačkoliv jde ve spoustě případů pouze o změny kosmetického rázu, i ty jsou důležité, protože významně zpřehledňují a tím pádem urychlují práci.

Dependency Graph

Dependency = závislost, jde tedy o graf závislostí. Tím se samozřejmě nemyslí drogy :). Ačkoli je tento update dostupný v Blenderu již od verze 2.40, není snad zmíněn ani v jednom českém tutorialu a přitom jde o celkem zajímavé vylepšení. Následující část textu bude čistá teorie vysvětlující principy, na jakých Blender zpracovává data při výpočtu deformací, proto, pokud nejde o váš šálek čaje, vás odkazuji na část níže - Logika animace.

S narůstajícími možnostmi Blenderu na poli animace vznikla potřeba zhodnotit a následně i přepsat způsob výpočtu některých operací - jednak kvůli problémům jako poskakování armatur při složitějších rizích (od slova rig = zakostění), jednak kvůli mnohdy zbytečnému druhotnému výpočtu (např. při nastavení několika Constraints; druhotný výpočet se mohl lišit od toho prvotního => nepředpokládatelné výsledky). Proto byl vyvinut DAG - tzv. orientovaný acyklický graf (directed acyclic graph). Ten umožňuje postupný výpočet každé změny - to přináší jak optimalizaci kódu, tak větší rychlost a přesnější výsledky.

Můžeme rozlišit několik typů operací:

  • OB_OB - objekt ovlivňuje objekt; k tomu dochází např. při transformacích rodičovských objektů nebo u Constraints (např. jeden objekt ovlivňuje rotaci jiného atp.)
  • OB_DATA - objekt ovlivňuje geometrii; např. když máme Empty fungující jako hák (Hook) nebo cílový objekt Inverse Kinematics u armatur
  • DATA_OB - geometrie ovlivňuje objekt; např. objekty parentované jen na určitou vertexovou skupinu jiného objektu
  • DATA_DATA - geometrie ovlivňuje geometrii; např. pokud Lattice, Armatura či křivka ovlivňují geometrii jiných objektů
Zde máme pro názornost 2 obrázky z blender.org:

Obrázek se všemi zmíněnými vztahy
DAG

Pokud tedy máme ve scéně jakékoli objekty odpovídající výše uvedeným vztahům, vytvoří se DAG, který seřadí operace a následně je vypočte tak, aby ušetřil co nejvíce výkonu a operace byly co nejpřesnější. K přepočítávání také nedochází vždy; pouze pokud dojde k volání OB_RECALC_OB nebo OB_RECALC_DATA. Tato volání mají za následek buď přepočítání Ipo křivek a matic nebo přepočítání zobrazení geometrie. Např. na obrázku uvedeném výše bude mít pohyb IK-solveru (OB_RECALC_OB) za následek pohyb Armatury v důsledku volání OB_RECALC_OB, což se ve finále projeví na krychli jako OB_RECALC_OB.

Pozn.: Flushing orientovaného acyklického grafu přímo žádné updaty neprovádí, pouze udává, které objekty se musí updatovat; k samotnému updatování slouží jiný příkaz.

Aby se zbytečně nepočítaly operace na objektech, které nejsou umístěny ve viditelných vrstvách, ale zároveň aby se projevily změny např. i pokud je rodičovský objekt v neviditelné vrstvě, Blender prochází vazby zpětně od potomků k rodičům, čímž zajistí flushing pouze na těch objektech, na nichž je to opravdu třeba. Tento flushing se projeví ještě před "RECALC" tagy, tudíž operace založené na voláních "RECALC" tagů se někdy ani nemusí počítat (= šetření výkonu).

Blenderovský modul transform() tak může díky této logice jednoduše sjednotit operace na objektech, jichž se změny týkají, provést pouze potřebný flushing a přitom existuje záruka, že se změny provedou korektně. Flushing probíhá pouze jednou, ukládá informace a v případě, že nedojde ke změně, stačí uložené hodnoty nahrát (= optimalizace).

Animační systém nyní může při přechodu na další snímek označit pouze ty operace, které se mají vypočítat a následně je provést (Ipo, Softbodies, Constraints, ...). Při přechodu na další snímek při renderování se přitom používá volání, které updatuje všechny informace (včetně materiálů, zvuků i skriptů).

Při používání IK solverů a Constraints v Armatuře se též vybuduje DAG, který následně určí pořadí výpočtu pozic jednotlivých kostí. Opět jde o optimalizaci.

Vzhledem k výhodám DAG je v plánu jej v budoucnu zahrnout i v databázových vztazích a při výpočtech světel. Tímto bych kapitolu o orientovaném acyklickém grafu uzavřel a přeostřil bych na další - tentokrát již záživnější - část:

Logika animace

V prvé řadě bychom si měli uvést, s jakou logikou jsou řazeny atributy animace. Armatury skládající se z kostí určují výchozí tvar deformovaného objektu. Změny na Armaturách lze provádět buď v Edit módu (ovlivněna je pouze samotná struktura Armatury) či v Pose módu (změna ovlivní i podřízené objekty). Póza (Pose) nese informace o změnách Armatur v Pose módu; přitom se pro každou kost vytvoří tzv. "Pose Channel" (Kanál Pózy), v němž jsou tyto informace uloženy. Kanál Pózy také umožňuje Constraints (Omezením) použitelnost na jiných Kanálech Pózy či dokonce na jiných objektech (=> jedna Armatura může ovlivňovat libovolný počet objektů). Akce (Actions) obsahují veškeré Ipo křivky z Pose Channels a z Constraints. Příkladem takové Akce může být např. cyklus chůze (neboli walkcycle), výskok s otočkou, tleskání, mrkání atd. Počet Akcí přitom nemusí být stejný, jako počet Pose Channels (který je stejný jako počet kostí). Všechny Akce lze poté namíchat v NLA editoru nedestruktivním způsobem - NLA editor nám vytvoří pracovní Pózu, která je výsledkem kombinace různých Akcí. Action Strip (Pás Akcí) není nic jiného, než několik po sobě jdoucích Akcí sdružených dohromady. Constraints vyjadřují vztahy a závislosti mezi dvěma objekty, většinou právě mezi dvěma kostmi (např. námi již používaný IK Solver).

Armatury - stále lepší

Vývojáři přidali celou škálu nových možností, a to jak těch, které rozšiřují možnosti animace, tak těch, které zpřehledňují práci. Pojďme si přidat nějakou jednoduchou Armaturu, na níž si budeme demonstrovat výklad:

Jednoduchá Armatura
Pozn.: Poslední kost je od řetězce oddělená

A co že se v nových verzích (konkrétně 2.43 a vyšší) změnilo? Jednou z novinek je možnost selekce nadřazené kosti - vše funguje na tom principu, že pokud vybereme potomka v Pose či Edit módu a stiskneme P, označí se tím kost nadřazená. Takto můžeme postupovat až k základní kosti řetězce. Klávesa P sice spouští Hru, stane se tak ale pouze pokud nejsme v Pose či Edit módu Armatury.

Obdobně jako u křivek můžeme klávesou T měnit rotaci jednotlivých kontrolních bodů, můžeme nastavit i rotaci (Bone Roll) jedné či více kostí kolem jejich lokálních os Y. Stačí vybrat požadované kosti a otáčet klávesovou zkratkou CTRL+R. V dřívějších verzích byl Bone Roll řešen poněkud složitěji a v jeden moment jej bylo možné nastavit vždy jen jedné kosti. Pro přehlednost je vhodnější zapnout vykreslování os každé z kostí (tlačítko Axes na Armature panelu):

Nastavení Bone Roll

Pokud budeme chtít anulovat naše úpravy, stačí vybrat požadované kosti a stisknout CTRL+N - objeví se nám další nové menu:

Recalculate Bone Roll Angles menu

Clear Roll nastaví Bone Roll na původní nulovou hodnotu, Align Z-Axis to 3D cursor natočí (jak je patrné z názvu) lokální osu Z na kurzor (resp. na rovinu procházející kurzorem, která je zároveň kolmá na lokální osu Z vybrané kosti).

Další zajímavou novinkou jsou Custom Bone Shapes neboli volitelné zobrazení kostí. Princip je opět jednoduchý - libovolným meshem (jiný typ objektu není podporován) můžeme nahradit kteroukoli kost v řetězci. Přidejme si např. takovýto jednoduchý objekt:

Mesh, kterým nahradíme kost

Nyní už stačí jen v Pose módu napsat u některé z kostí do políčka OB: (Armature Bones panel) název našeho meshe a v panelu Armature zatrhnout možnost Shapes. Pokud však budeme v solid módu a mesh nebude mít žádné facy (právě jako ten náš), nic se nezobrazí, dokud nezatrhneme tlačítko W (Wire) hned vedle políčka s názvem objektu. S tímto aktivovaným nastavením se nám ale také pouze jako drátový model zobrazí i meshe s facy. Takto tedy dopadla naše Armatura, poté, co jsme jí nahradili dvě kosti:

Nahrazení kosti meshem

Dlouho postrádanou možností bylo také kopírování nastavení některých kostí na jiné kosti. Pokud vybereme dvě či více kostí a stiskneme CTRL+C, můžeme z menu Copy Pose Attributes kopírovat většinu nastavení. Kopírovat se budou údaje z naposledy vybrané kosti:

Copy Pose Attributes Menu

Snadno tak lze kopírovat jak Constraints, tak Bone Shape a limity pro IK:

Zkopírované IK limity
Pozn.: Kost reprezentovaná krychlí je nastavena jako IK Solver, proto je na obrázku ona žlutá čárkovaná úsečka. Pokud bychom neměli aktivováno Custom Bone Shapes, i kost nahrazená osmistěnem by se zobrazila žlutě.

Co se týče kopírování pozice, rotace a velikosti, můžeme upřesnit vstupní data: Local (Location, Rotation a Size) nám zkopíruje údaje, které jsme ručně změnili v Pose módu klávesami G, R či S (popř. Manipulátory), Visual kopíruje údaje, které se mění díky působení Constraints (při jejich použití totiž k žádným "skutečným" deformacím nedochází).

K zarovnávání neboli snappingu požíváme menu vyvolané klávesou SHIFT+S (obdobně jako v Object módu). Pravidla pro zarovnávání v Pose módu již nejsou natolik přísná - např. kost může být libovolně upravená. V Edit módu se již zarovnává celá kost, a to tak, že Hlava (Head; širší konec) se zarovná na požadovanou pozici a Ocas (Tail; užší konec) získá stejný offset vůči Hlavě, jaký měl před změnou pozice. Dříve se totiž obojí zarovnalo do jediného bodu...

Armaturám lze také přenastavit pozici Centra - nutno ovšem podotknout, že dříve jsme si o něčem takovém mohli nechat zdát. Pokud bychom ale hledali příslušné tlačítko na notoricky známém místě v Editing buttons, bylo by hledání bezvýsledné - kvůli přehlednosti vývojáři tuto možnost zabudovali pouze do Transform menu, ke kterému se dostaneme buď pomocí headeru 3D okna->Pose->Transform nebo po stisknutí mezerníku:

Přenastavení Centra Armatury

Dříve, pokud jsme spojovali jednu či více Armatur, docházelo ke ztrátě nastavení Constraints. Od verze 2.43 už tomu tak není.

Armature Visualizations

V Blenderu přibyl jeden vcelku užitečný panel - Armature Visualizations:

Panel Armature Visualization
Pozn.: Panel je dostupný pouze v Pose Módu

Plumíferos tým (tedy lidé pracující na projektu Plumíferos - celovečerním animovaném filmu) vznesl požadavky na vylepšení zobrazování tzv. "duchů" - tedy částečně průhledných kostí zobrazující předchozí i následující trajektorii kostí. Abychom změny rovnou i viděli, vytvoříme si krátkou animaci, kdy se kost s nastaveným IK Solverem otočí krouživým pohybem po spirále. Armatuře můžeme zrušit zobrazování Shapes (vykreslování duchů však funguje i s nimi) a klávesou H můžeme schovat nepotřebné kosti (stejně jako v Edit módu je zpětně zobrazíme zkratkou ALT+H). Tím máme nachystaná data; popišme si tedy panel:

  • Roletkové menu - nastavuje způsob, kterým se budou duchové zobrazovat:
    • Around Current Frame - před a za aktuální pozicí kosti
      • GStep - nastavuje, zda se budou duchové zobrazovat na každém snímku, popř. na každém druhém, třetím, čtvrtém,...
      • Sel - určí, zda se duchové budou zobrazovat pouze pro aktuálně vybranou kost, či pro všechny
      • Ghosts - celkový počet duchů
    • In Range - duchové se budou zobrazovat v požadovaném rozmezí
      • GStep - stejné jako výše
      • Sel - stejné, jako výše
      • GSta - snímek, na němž vykreslování začne
      • GEnd - snímek, na kterém vykreslování skončí
    • On Keyframes - zobrazí duchy pouze na klíčových snímcích
      • Sel - stejné, jako výše
      • GSta - stejné, jako výše
      • GEnd - stejné, jako výše

Around Current Frame
Around Current Frame, GStep: 3, Ghosts: 25
In Range
In Range, GStep: 3, GSta: 30, GEnd: 100
On Keyframes
On Keyframes, GSta: 1, GEnd: 101

Obdobným způsobem je možné nechat vykreslit i křivku, po níž se kost pohybuje. Všechna zbývající nastavení se týkají právě vykreslovaných křivek. Pojďme si ještě připomenout Armature Visualizations panel:

Panel Armature Visualizations

  • Calculate Paths - spočítá křivku
  • Clear Paths - smaže křivky
  • PStep - rozestup mezi jednotlivými body křivky (obdobně jako u Ghost)
  • Frame Nums - zobrazí čísla snímků na jednotlivých bodech
  • Show Keys - zvýrazní klíčové snímky
  • Keyframe Nums - zobrazí zobrazí čísla snímků u keyframů
  • Around Current Frame - zobrazí křivku (v nastavitelném rozmezí PPre a PPost, které se objeví po aktivaci tohoto tlačítka) kolem aktuálního snímku
  • Bone-Head Path - nastaví počítání křivky, po níž se bude pohybovat Hlava (v rozmezí PSta a PEnd)

Vykreslení křivky
Show Keys, Keyframe Nums

Pokud v NLA editoru vybereme vybereme jiný Action Strip, zobrazí se ve 3D okně jeho klíčové snímky. Na tomto místě je vhodné uvést několik podstatných detailů ohledně duchů a křivek. Nedoporučuje se nastavovat příliš velký počet zobrazovaných duchů kvůli předpokládatelnému snížení výkonu, stejně tak je možné, že podobný (d)efekt bude mít i zobrazení čísel snímků na jednotlivých bodech křivky. Toto se samozřejmě netýká takovéto jednoduché animace, u rozsáhlejších scén bychom však mohli narazit.

Další novinkou, na kterou animátoři bezpochyby nenechají sedat prach, je možnost barevného odlišení jednotlivých kostí. Barvy se přitom přiřazují podle skupin. Skupiny lze snadno přidat vybráním alespoň jedné kosti a stisknutím CTRL+G (ve vyskočivším menu máme možnost kost/kosti přidávat/odebírat do/z různých skupin). Skupinu také můžeme přidat na Link and Materials panelu v Editing buttons tlačítkem Add Group:

Bones Group neboli Skupina kostí

V roletkovém menu (Default Colors) pak můžeme vybrat požadované barevné schéma - na výběr je celkem z dvacítky přednastavených (posledních pět však nijak nastavených není - obsahují pouze černou barvu).

Barvičky

Políčko nejvíce vlevo (Normal) určuje barvu ploch kostí v Solid módu, prostřední políčko (Selected) určuje barvu obrysů, popř. mřížky vybraných kostí a políčko vpravo (Active) pak barvu obrysů, popř. mřížky naposledy vybrané kosti. Tlačítko ConstCols signalizuje, zda použít původní barvu speciálních kostí (např. IK Solver - žlutá). Podotýkám jen, že barva zvláštních kostí se smíchá s barvou nově nastavenou, což nepůsobí zrovna nejlíp; doporučuji pro zvláštní kosti nastavit zcela odlišnou skupinu, popř. je vůbec nikam neřadit. Pokud jsme nepřiřadili kosti do skupin zkratkou CTRL+G, můžeme tak učinit v Armature Bones panelu (pro každou kost zvlášť):

Výběr skupiny

Pokud se nám stále nezobrazily barvy tak, jak bychom očekávali, pravděpodobně jsme neaktivovali volbu Colors v Armature panelu. Pokud by se nám stávající výběr barev nelíbil, nebo bychom chtěli změnit posledních pět černých schémat, můžeme tak učinit v User Preferences okně pod záložkou Themes (Bone Color Sets v roletkovém menu). Zde nalezneme také tlačítko Dump Colors Codes (vypíše do konzoly barvy aktuálního schématu) a Use Constraint Colouring (aktivováno způsobí, že ConstCols bude u daného schématu automaticky zatrženo). Takto tedy může vypadat naše Armatura:

Obarvená Armatura
Pozn.: Pokud používáme Custom Bone Shapes, změněné kosti budou mít barvy ploch ovlivněny materiálem nahrazujícího objektu

Jestli máme v řetězci příliš mnoho kostí, stačí v Edit módu 2 či více z nich vybrat a stisknout ALT+M - spojíme je tak do jedné jediné:

Spojené kosti

Nyní také mnohem pohodlněji můžeme přidat kost přesně do středu kloubu mezi 2 jiné kosti. stačí vybrat kloub a stisknout klávesu F. Konec nově vytvořené oddělené kosti se zarovná na 3D kurzor:

Nově přidaná kost

Vybereme-li celou kost a stiskneme klávesu F, vytvoří se kost nová, která bude napevno spojena s kloubem, z něhož vystupuje její Hlava. Hlava se vytvoří na tom kloubu označené kosti, který je blíže ke 3D kurzoru.

S automatickým přejmenováváním kostí podle toho, zda se nachází na pravé či levé straně jsme se již seznámili. Nyní byl tento systém obohacen o další 2 možnosti, ty jsou v Edit či Pose módu dostupny pod klávesou W:

  • AutoName Front-Back - podle pozice na ose Y přidá názvu kosti koncovku .Fr či .Bk
  • AutoName Top-Bottom - podle pozice na ose Z přidá názvu kosti koncovku .Top či .Bot
Pozn.: pozice se bere relativně vzhledem k Centru Armatury

Nově máme také možnost v Edit módu separovat jakoukoli kost do nové Armatury, k tomu nám poslouží klávesová zkratka CTRL+ALT+P

Díky další vychytávce můžeme měnit zároveň více kostem některá nastavení. Stačí, když v Edit nebo Pose módu vybereme alespoň dvě kosti, stiskneme některou ze zkratek:

  • SHIFT+W - přepnout nastavení (ze zapnutého na vypnuté a opačně)
  • CTRL+SHIFT+W - zapnout nastavení
  • ALT+W - vypnout nastavení
a vybereme nastavení, které chceme změnit:

Hromadné přepnutí

Každé z těchto nastavení můžeme přepnout v Armature panelu, ale naráz ne pro víc, než jednu kost. V případě nejasnosti významu těchto tlačítek odkazuji na textové popisky v Armature panelu.
Pozn.: Draw Wire se týká Custom Bone Shapes.

V nové verzi je krom výše jmenovaných ještě spousta nových drobností:

  • V Edit módu lze použít mnohonásobné dělení kosti (menu pod W - Subdivide Multi)
  • Zkratkou CTRL+P lze nyní přiřadit rodičovský objekt více kostem zároveň
  • Při kopírování kosti se zkopírují transformační zámky, rotační omezení IK Solverů a také Constraints
  • Zarovnávání 3D kurzoru v Edit módu je nyní prováděno na střed kosti, nikoli jen na Hlavu
  • Editace souměrně podle osy X (X-Axis Mirror) nyní zvládá zrcadlově i tyto operace:
    • Smazání kosti (X)
    • Přepočítání Bone Rollu (CTRL+N)
    • Duplikování kosti (CTRL+D)
    • Odstranění rodičovské vazby (ALT+P)

Na Armature panelu máme k dispozici tlačítko Auto IK. K čemu slouží? Jak název napovídá - k automatickému nastavení inverzní kinematiky. Zrušíme IK Solver Constraint naší Armatuře a aktivujeme Auto IK. Když nyní pohneme kteroukoli kostí, Armatura se pohybuje jinak, než by se dalo čekat. Kolečkem myši měníme délku řetězce, který je ovlivněn Auto IK volbou, kolečkem myši nastavená délka je přitom uchovávána pro každou Armaturu (ale ne zvlášť pro každou kost).

Automatická inverzní kinematika

Vrstvy s jednotlivými kostmi jsou nyní dostupnější díky klávesovým zkratkám:

  • M - určí vrstvu/vrstvy, do kterých bude aktuálně vybraná kost umístěna
  • SHIFT+M - určí vrstvu/vrstvy, které budou viditelné
  • CTRL+M - zrcadlí vybrané kosti

A tímto bych, vážení čtenáři, ukončil dnešní článek. Doufám, že byl pro vás přínosným - byť zatím počet novinek a úprav v žádném případě nelze označit za konečný. Než využijeme naše poznatky v praxi, budeme se muset podívat na zub ještě četným dalším vylepšením. V příštím díle se můžete těšit na popis, ovládání a úpravy NLA Editoru a samozřejmě také indicie, jak za jeho pomoci vytvořit animaci. Věřte mi, že je na co se těšit - minimálně kvůli použitelnosti v praxi. Na shledanou příště,

Tématické zařazení:

 » 3D grafika  

Poslat článek

Nyní máte možnost poslat odkaz článku svým přátelům:

Váš e-mail:

(Není povinný)

E-mail adresáta:

Odkaz článku:

Vzkaz:

Kontrola:

Do spodního pole opište z obrázku 5 znaků:

Kód pro ověření

 

 

 

 

 

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

Uživatelské jméno:

Heslo: