Animáció és szimuláció Jeni László Attila
Animáció - szimuláció Animáció A színtér objektumainak módosítása az idő függvényében, a beállított mozgásoknak megfelelően. Szimuláció Annak meghatározása, hogy hogyan viselkednek az objektumok az idő függvényében a fizikai törvényeknek megfelelően.
Animáció Az animáció célja a valószerű mozgás létrehozása Akkor valószerű a mozgás, ha kielégíti a természet törvényeit (Newtoni dinamika) A mozgás a transzformációs mátrixok elemeinek időbeli változását jelenti Pozíció-orientáció mátrixok interpolációja A mozgásgörbék megadásának több lehetősége is van
Pozíció-orientáció mátrixok Tetszőleges pozíció és orientáció megadható a következő mátrixszal: A q vektor a pozíciót, az A 3x3 pedig az orientációt határozza meg A q vektor elemeit függetlenül vezérelhetjük, a mátrix elemeit viszont nem, mert azok összefüggőek Megoldás: a mátrix helyett orientációs paramétereket interpolálunk
Orientációs paraméterek Használhatjuk az orientáció jellemzéséhez a csavaró- billenő-forduló szögeket Ezeket megadhatjuk a tengelyek körüli adott szöggel történő elforgatással Így végül a mozgás függetlenül vezérelhető paraméterei: Az animáció során interpoláljuk a paramétereket és a köztes értékekből kiszámítjuk az aktuális modellezési transzformációt
Kamera animáció A kamera animáció bonyolultabb, mert több paraméter tartozik hozzá: eye: szempozíció lookat: a pont, amely felé néz a kamera up: az ablak függőleges iránya fov: a függőleges látószög aspect: az ablak szélességének-magasságának aránya f p,b p : az első és hátsó vágósíkok Ezek egymástól függetlenül vezérelhetőek, így a kamera paramétervektora: A paraméter aktuális értékeiből számítjuk a nézeti transzformációs mátrixot
Mozgásgörbék megadása Spline animáció Képletanimáció (script animation) Kulcskocka animáció (keyframe animation) Pálya animáció (path animation) Fizikai animáció Mozgáskövető animáció (motion capture)
Spline animáció Az egyes paraméter-idő függvényeket 2d-s görbékkel adjuk meg A folytonossági és a lokális vezérelhetőségi igények miatt ezeket általában spline-ok segítségével definiáljuk
Képletanimáció A paraméter-idő függvényeket közvetlenül az algebrai alakjukkal adjuk meg Akkor célszerű alkalmazni, ha a mozgás viszonylag egyszerű Például Egy óra mutatóinak mozgatása Egy pattogó labda mozgásának leírása Abs(sin( t+ 0 ))*e -kt
Kulcskocka animáció Itt a mozgástervezés a kulcspontok felvételével kezdődik A felhasználó megad egy t 1, t 2, …, t n idősorozatot és elhelyezi a mozgatandó objektumot a színtéren ezekben az időpontokban A t i időpontban beállított elrendezés az objektum paramétereire egy kulcspontot határoz meg
Kulcskocka animáció Ezeket a kulcspontokat felhasználva a program az objektum paramétereire egy-egy folytonos görbét illeszt Az animációs fázisban a program az aktuális idő szerint mintavételezi a paraméter-függvényeket A paraméterekből kiszámítja a transzformációs mátrixokat Végül a transzformációs mátrixok felhasználásával előállítja a képet
Interpolálás a kulcspontok közt Adottak a kulcspontok: Keresünk egy olyan görbét, amely az adott időpillanatokban a kulcspontok paramétereit veszi fel:
Lineáris intepolálás Egy egyszerű probléma: Az első két pont közti lineáris interpolációra: Innen adódik a teljes görbének az x koordinátája az idő függvényében: Diff-ható?
Spline interpoláció A kis fokszámú Lagrange polinomok megfelelőek, de a fokszám növelésével a kulcspontok közt egyre jobban „ugrál” a görbe 8-adfokú polinom
Spline interpoláció A spline interpoláció sokkal szebb interpolációt eredményez 8-adfokú polinomsplinespline vs. polinom
Probléma a spline-al Figyelni kell a „mellékhatásokra”! A spline interpolációnál is előfordulhat olyan eset, ami nem felel meg a fizikai valóságnak:
Spline interpolációs módszerek Hermite-interpoláció A vonal kezdő és végpontját kell megadni és hozzá két érintővektort Problémás módosítani a pontokat, mert meg kell adni újra az érintőket Catmull-Rom spline Az általános Hermit spline egy formája Érintők helyett a kezdőpont előtti és a végpont utáni pontok megadása szükséges Lokálisan vezérelhető Kochanek-Bartels spline A Catmull-Rom általános esete, ahol minden kulcsponthoz bevezetünk még három kontroll értéket: Feszültség: milyen élesen kanyarodjon a görbe Folytonosság: milyen gyors az irány és sebességváltozás Torzítás: milyen arányban számítson az illeszkedő görbeszegmensek meredeksége a kulcspont meredekségébe
Pálya animáció A mozgást most egyetlen 3d görbével adjuk meg A kiválasztott test a görbe mentén fog végighaladni A görbemodellezés egy p(u) = [ x(u), y(u), z(u) ] függvényt eredményez
Pálya animáció Eddig csak a pozíciót adtuk meg, az orientációt nem Ha differenciáljuk a pályagörbét, akkor megkapjuk a sebességvektort, amely a test eleje felé mutat (és ezzel definiáltuk az orientáció két szabadságfokát) Nincs még megkötve, hogy a haladási irány, mint tengely körül hogyan forduljon el a test. Mondhatjuk, hogy ez a harmadik szabadsági fok mindig legyen a függőleges irány (pl. autóknál) Másik lehetőség viszont, hogy azt „érezzük” függőleges iránynak, amellyel ellentétesen erők hatnak ránk (ezért dőlünk be a kanyarban) A Newton-törvény szerint a gyorsulás iránya megegyezik ezzel, ez pedig a görbe második deriváltja lesz.
Hierarchikus rendszer A valódi objektumok gyakran összetettek, több kapcsolt részből, szegmensből állnak Hierarchikus rendszer Egy objektum (gyermek) mozgását egy másikhoz objektumhoz (szülő) viszonyítva adjuk meg Egy gyermek objektum szintén lehet újabb gyermekek szülője A szülő-gyermek kapcsolatok a szegmensek hierarchikus rendszerét alakítják ki
Példa Egy példa: emberi test, mint hierarchikus rendszer A váll a törzs gyermeke, és a felkar szülője A felkar a váll gyermeke és az alkar szülője Ez a hierarchikus rendszer határozza meg az összetett rendszer által végrehajtható mozgásfajtákat
Szegmensek kapcsolódása Az összetett objektum mozgását az egyes szülő-gyermek párok relatív mozgásaival adhatjuk meg Azaz a közöttük lévő ízületek mozgásaival Az egyes ízületek különböző szabadságfokokkal rendelkezhetnek 1 DOF: térd 2 DOF: csukló 3 DOF: felkar
Karakteranimáció A karakterek a merev részekből álló csontozatukat mozgatják A mozgatásnak rendszerint valamilyen célja van, azaz a rendszer valamely pontját (kéz) szeretnénk valamilyen előírt pontig (sörösüveg) és orientációig (a kézbe belesimuljon a sörösüveg) vezérelni. Ennek két módja van: Előrehaladó kinematika Inverz kinematika
Kinematika A kinematika a mozgások leírásával foglalkozik a mozgás okának keresése nélkül. Előrehaladó Meghatározza a végállapotot az állapotváltozók függvényében Szimulációhoz ideális Inverz Kiszámítja az állapotváltozók értékét, amelyek egy adott végállapotot eredményeznek Vezérléshez megfelelő
Előrehaladó kinematika Előrehaladó kinematikánál először a hierarchia tetején álló testet állítjuk be, amely maga után húzza a többi részt is Ezután elrendezzük a felkarokat (amelyek áthelyezik az alkarokat, …) A hierarchiában felülről lefelé haladunk Egy szegmens modellezési transzformációját az összes ős transzformációinak szorzataként kapjuk meg
Példa Kétszabadságfokú, rotációs csuklókat tartalmazó rendszer A csuklók a z-tengely körüli elfordulást engedik meg végberendezés
Példa Az állapotváltozók értéke adott: 1, 2 A számítógép kiszámítja a végberendezés pozícióját végberendezés
Példa Az állapotváltozók értékeit megadhatjuk spline függvényekkel is
Példa Az állapotváltozók értékeit megadhatjuk kezdeti értékekkel és sebességekkel is.
Inverz kinematika Az előrehaladó kinematika nem használható, ha a strukturális összefüggés erősen nem lineáris Hiába interpolálunk egyenletesen az állapottérben, a végberendezés vadul kalimpálhat a kulcspontok között Például Egy karakter lábát a talaj felett előrenyújtjuk Hiába igazítjuk el a szereplőket a mozgás elején és végén úgy, hogy ne ütközzenek egymással, előfordulhat, hogy a karakter lába beleütközik a földbe Az inverz kinematika a kritikus végberendezés helyzetét interpolálja, majd az állapotváltozók értékét végberendezés interpolált helyzetéből számítja vissza. Az inverz kinematika másik neve a cél-orientált animáció
Előrehaladó és inverz kinematika Az előrehaladó és inverz kinematikát hasonlítjuk össze egy láb két kulcskocka közötti animációjával. A végberendezés a bokánál van. A boka pályája inverz kinematikánál egyenes. Az elfordulási szögek viszont az előrehaladó kinematikánál változnak egyenletesen. Inverz kinematikánál tehát a végberendezés útját tervezzük meg.
Példa Ha ismerjük a végberendezés helyzetét, akkor érdemes inverz kinematikát alkalmazni Végberendezés
Példa A végberendezés helyzetéből visszaszámoljuk az állapotváltozók értékét
Mire is használható az IK? Például a karakter meg akar nyomni egy gombot Vagy meg akar tenni egy lépést A karakter-animátor számára ez egy közelítő megoldást jelenthet egy adott fázishoz, amit később finomíthat Próbáljuk meg előrehaladó kinematika segítségével megvalósítani azt, hogy a csáp vége elérje az „A” pontot.
Problémák az IK-val Három fő probléma Nehéz „természetesnek látszó” mozgást leírni vele Az inverz függvény kiszámítása nem triviális És nem is egyértelmű (redundancia) Példa Megfogunk egy stabil tárgyat (kapaszkodó), de ettől még könyökünket, vállunkat, egész testünket mozgathatjuk
Példa Egyenletek száma: 2, ismeretlen változók száma: 3 Végtelen sok megoldás! Rendszer DOF > végberendezés DOF Az emberi csontváz kb 70 DOF!
Példa
Megoldások Analitikus megoldások Bonyolult a nagy DOF miatt Iteratív megoldások Optimalizálás Inkrementális konstrukciók Mátrix invertálás Jacobi-mátrix
Analitikus megoldás Kétcsuklós rendszer analitikus megoldása IK-val 22 11 a1a1 a2a2 O2O2 O1O1 O0O0 x1x1 x0x0 x2x2 y1y1 y2y2 y0y0 (x,y) 22
Problémák: több cél elérése alap vb2 vb1
Problémák: több cél elérése alap vb2 vb1 Cél 1
Problémák: több cél elérése alap vb2 Cél 2 vb1
Problémák: több cél elérése alap vb2 vb1 Cél 1 Cél 2
Problémák: több cél elérése alap vb2 vb1 Cél 1 Cél 2
EK – IK összefoglalás Előrehaladó Feltételeket (állapotváltozókat) specifikál Meghatározza a végállapotot az állapotváltozók függvényében Inverz Kiszámítja az állapotváltozók értékét, amelyek egy adott végállapotot eredményeznek Cél-vezérelt mozgás Nehéz a számítása!
Mozgáskövető animáció A mozgáskövető animáció mozgástervezés helyett méréssel határozza meg a mozgásgörbéket A mérési eljárásban élő karaktereket mozgatunk, amelyeken markereket helyeztünk el A mérés ezen pontok pályáját határozza meg
Példa
Kulcskocka vs Mozgáskövető
Részecske rendszerek A részecskerendszerek jó megoldást jelentenek amorf, dinamikusan változó és folyékony objektumok modellezésére Felhő, füst, víz, robbanás, tűz, …
Reprezentáció Egy objektumot egyszerű részecskék halmazaként definiálhatunk Ez inkább az objektum térfogatát, kiterjedését határozza meg (ellenben egy sokszöggel vagy vonallal) A részecskerendszer egy dinamikus rendszer A részecskék változnak és mozognak az idő függvényében Az objektumok nem determinisztikusak, alakjuk nincs teljesen definiálva
Egy részecskerendszer modellje Új részecskéket generálunk a rendszerbe Minden új részecskéhez hozzárendeljük a hozzá tartozó tulajdonságokat Azokat a részecskéket, amelyek elérték az életciklusuk végét, eltávolítjuk a rendszerből A többi részecskét mozgatjuk és transzformáljuk figyelembe véve a dinamikus tulajdonságaikat Fontos megjegyezni, hogy a részecskék nem hatnak egymásra! A részecskéket ezután kirajzoljuk a frame buffer-be, gyakran speciális algoritmust használva
A részecskék tulajdonságai Hely: a részecske helye a térben Sebesség: a részecske sebessége, amely az eltelt idővel szorozva a helyváltoztatást fejezi ki Gyorsulás: az eltelt idővel szorozva a sebességváltozást adja Tömeg: kifejezi a rendszerben működő erőtér és az adott részecske gyorsulása közti arányt (azaz milyen mértékben áll ellen az erőtér hatásainak) Tömegváltozás: a részecske tömegének változási sebessége (pl a füstrészecskék folyamatosan hűlnek, felhajtóerejük csökken, azaz növekszik a tömegük) Hátralevő élettartam: a részecske haláláig hátralevő idő (pl ezzel szimulálhatjuk azt a jelenséget, hogy a füst, tűz részecskék idővel elenyésznek) Szín: a részecske színe és átlátszósága (RGBA) Színváltozás: a részecske színének változási sebessége (egy lángrészecske születéskor fehér, de ahogy öregszik egyre vörösebb és átlátszóbb lesz) Méret: a részecske mérete (hány pixelen jelenítsük meg) Méretváltozás: a méret változási sebessége
Dinamika A részecske pozíciója egyszerűen adódik a jelenlegi pozíciója és a sebessége összegéből Ezt még módosíthatja az erőtér (pl gravitáció) Továbbá a többi tulajdonság is változhat Ezek a változások lehetnek globálisak és egyediek is
Részecskék kioltása Amikor létrehozzuk a részecskét meghatározzuk az élettartamát (képkockában) Az élettartam minden egyes képkockával csökken, ha elérte a nullát, akkor a részecske kitörölődik a rendszerből Kitörölhetjük azokat a részecskéket is, amelyek már nem befolyásolják jelentősen a képszintézist (pl az átlátszóságuk egy adott határ alatt van)
Részecskék kirajzolása A részecskék elfedhetek más objektumokat, amelyek mögöttük vannak, lehetnek átlátszóak illetve árnyékot is vethetnek Az objektumok lehetnek sokszögek, felületek vagy más részecskék is
Részecske hierarchia Az egyes részecskerendszerek (mint egy önálló részecske) is alkothatnak részecskerendszert A gyermek rendszer megörökölheti a szülő rendszer tulajdonságait Példa Star Trek II: The Wrath of Khan (következő slide) Részecskerendszerek egy tűzfal modellezésére Megváltozik a szülő rendszer, akkor vele változnak a gyermek rendszerek is Ilyen módon sokkal könnyebb a komplex fuzzy rendszerek kezelése is
Star Trek II: The Wrath of Khan
Metaballs Metaball Gömbök, amelyek összeolvadva, összekeveredve egy felületet alkotnak A részecskéket ilyen labda formában reprezentálva foltos, pacás felületeket lehet létrehozni
Metaballs
Lágy testek Részecskerendszerrel eldeformálhatjuk egy objektum felületét
Felhasználási lehetőségek
Fejlettebb „részecskerendszerek”
Vége