Animáció Szirmay-Kalos László
Animáció = időfüggés T1(t)T1(t) T2(t)T2(t) TV(t)TV(t) Transzformációk alak szín megjelenítési attribútumok, stb
Valós idejű animáció Óra inicializálás (t start ) do t = Óra leolvasás for each object o: modellezési transzf T M, o = T M, o (t) Nézeti transzformáció: T V = T V (t) Képszintézis while (t < t end ) Legalább 15 ciklus másodpercenként
Valószerű mozgás l Fizikai törvények: –Newton törvény –ütközés detektálás és válasz: impulzus megmaradás l Fiziológiai törvények –csontváz nem szakad szét –meghatározott szabadságfokú ízületek –bőr rugalmasan követi a csontokat l Energiafelhasználás minimuma
Newton törvény r(t) = r L T M (t) F/m = r = r L d2dt2d2dt2 d2dt2d2dt2 TM(t)TM(t) Az erő rugalmas mechanizmuson keresztül hat, azaz folytonosan változik T M (t) C 2 folytonos m
cos sin -sin cos 1 T M (t): Mozgástervezés l Követelmény: ált. C 2, néha (C 1,C 0 ) folytonosság l Mátrixelemek nem függetlenek –Tervezés független paraméterek terében pozíció: px, py, pz orientáció: , , skálázás:sx, sy, sz T M (t)= sx sy sz 1 cos -sin 1 sin cos 1 cos sin -sin cos 1 px, py, pz, 1 p(t)
Mozgástervezés a paramétertérben l p(t) elemei ált. C 2, néha (C 1,C 0 ) folytonosak l p(t) elemeinek a definíciója: –görbével direkt módon (spline) –képlettel: script animation –kulcsokból interpolációval: keyframe animation –görbével indirekt módon: path animation –mechanikai modellből az erők alapján: physical animation –mérésekből: motion capture animation
1. key Keyframe animáció 2.key3.key4.key5.key
Keyframe animáció görbéi
Görbék megváltoztatása
Keyframe animáció
Pálya (path) animáció t = spline paraméter vagy az ívhossz lokális modellezési transzf: y = fix z = görbe der. x = vektor
Pálya animáció: Transzformáció Explicit up vektorFrenet keretek: zm = r’(t)zm = r’(t) xm = zm upxm = zm r’’(t) ym = zm xmym = zm xm zm xm ym TM =TM = xm 0 (t) 0 ym 0 (t) 0 zm 0 (t) 0 r(t) 1 A függőleges, amerre az erő hat r(t) görbe: r(t) orr: z
Ívhossz szerinti mozgás r(u) görbe: s(u) = s(u) u Ívhossz szerinti mozgás Megtett út-idő függvény: s(u) = f(t), például a·t u = s -1 (f(t)) r = r(u) ívhossz (dx/du) 2 +(dy/du) 2 +(dz/du) 2 du f(t)f(t) t u ds dz = dz/du ·du
Pálya animáció
Fizikai animáció l Erők (gravitáció, turbulencia stb.) l Tömeg, tehetetlenségi nyomaték (F = ma) l Ütközés detektálás (metszéspontszámítás) l Ütközés válasz –rugók, ha közel vannak –impulzus megmaradás alapján
Egy kis mechanika F(r,v,t) erő m for( t = 0; t < T; t += dt) { F = Erők számítása a = F/m v += a ·dt if ( ÜtközésDetektál ) ÜtközésVálasz r += v ·dt } v n = CollisionNormal v’ v’ = [v - n(v·n)]-[n(v·n)·bounce] v sugár: r+v ·t metszés: t* Ha t* < dt Collision ÜtközésDetektál ÜtközésVálasz dr/dt = v dv/dt = F(r,v,t)/m -n(v·n)
Folytonos-Diszkrét ütközés detektálás pontra és féltérre r(t i ) r(t i+1 ) n · (r - r0) = 0 n · (r - r0) > 0 n · (r - r0) < 0 v sugár: r+v ·t metszés: t* Ha t* < dt Collision
Ütközés detektálás háromszög-háromszöggyorsítás: befoglalók O(n 2 )
Real-time fizikai animáció Konyha Zoltán (autoszimulátor)
Karakter animáció r w = r L · R kéz ·T alkar ·R könyök ·T felkar ·R váll ·T gerinc ·T ember rwrw rLrL homogén koordináta 4-es
2D csont l px,py l 1 cos sin 0 -sin cos x, y, px py 1
Robot példa T0 = robot előrehalad glTranslatef(xr, yr, zr); T1= kar elhelyése glTranslatef(xv, yv, zv); T2= forgatás glRotatef(angle, 1.0f, 0.0f, 0.0f); T3= skálázás glScalef(1.0f, 4.0f, 1.0f); T0 T1 T2 T3 Robot HeadTorsoLeg1Leg2Arm1Arm2 T0 T1, T2, T3
Robot rajzolás + animáció void DrawRobot(float dt) { xr += vx*dt; yr += vy*dt; zr += vz*dt; glPushMatrix(); glTranslatef(xr, yr, zr); angle += av*dt; if (angle>30 || angle<-30) av*=-1; glColor3f(1, 0, 0);// red glPushMatrix(); glTranslatef(xv, yv, zv); glRotatef(angle, 1, 0, 0); glScalef(1, 4, 1);// 1x4x1 cube DrawCube( ); glPopMatrix(); … Másik kéz, lábak, fej, törzs glPopMatrix(); } Robot Arm1Arm2HeadTorso
„Inverz kinematika” T0 = előrehaladás (forward, up) ??? T2 = forgatás (ang) A láb (end effektor) földön legyen és ne csúszkáljon forward += leg * fabs(sin(angNew) - sin(angOld)); up = leg * (1 - cos(angNew)); leg forward up
Csontváz felépítése end effektor Állapotvektor = egyes ízületek állapota S = (px, py, pz, , , )| i=1..n E = (x, y, z, , , ) Strukturális összefüggés: E = F( S )
2 szabadságfokú rendszer 11 22 l1l1 l2l2 E = (x, y) S = ( 1, 2 ) x( 1, 2 ) = l 1 cos 1 + l 2 cos( 1 + 2 ) y( 1, 2 ) = l 1 sin 1 + l 2 sin( 1 + 2 ) Strukturális összefüggés:
Forward kinematika karakter állapot beállítás: S 1, E 1 karakter állapot beállítás: S 2, E 2 … karakter állapot beállítás: S n, E n S(t) interpolációval E(t) = F ( S(t) )
Forward kinematika eredmény
Inverz kinematikával karakter állapot beállítás: S 1, E 1 karakter állapot beállítás: S 2, E 2 … karakter állapot beállítás: S n, E n E(t) interpolációval S = F -1 ( E(t) )
Inverz kinematika eredmény
Inverz kinematika: S = F -1 (E) Az F strukturális függvény általában nem invertálható analitikusan és az inverz nem egyértelmű: ITERATÍV MEGOLDÁS t 0 -ra E 0, S 0 ismert ha E t, S t ismert, számítsuk E t+dt = E t +dE t, S t+dt = S t +dS E t +dE t = F( S t +dS ) = F( S t )+ dS 1 +…+ F S1F S1 F SnF Sn dSndSn = F1 S1F1 S1 Fm S1Fm S1 F1 SnF1 Sn Fm SnFm Sn... dE t,1... dE t,m dS1dS1... dSndSn Jacobi-mátrix m n lineáris egyenletrendszer
m n-es egyenletek megoldása, túlhatározottság: m > n y m = A m n ·x n A n m · y m = A n m A m n · x n (A n m A m n ) -1 A n m ·y m = x n T T TT A + = A n m pseudo inverze minimális kvadratikus hibájú megoldás: | A m n ·x n - y m |
m x n-es egyenletek megoldása, alulhatározottság: m < n y m = A m n ·x n A n m ·(A m n A n m ) -1 · y m = x n Behelyettesítés: A m n ·x n = A m n · A n m ·(A m n A n m ) -1 · y m = y m T T T A + = A nxm pseudo inverze T minimális energiájú megoldás: | x n |
Inverz kinematika megoldás E = E 0, S = S 0 for( t = t0; t < T; t += dt ) { S alapján a transzformációs mátrixok előállítása Képszintézis J(S) Jacobi mátrix számítása J + = J pseudo-inverze E(t+dt) interpolációval (keyframe) dE = E(t+dt) - E(t) dS = J + ·dE S += dS }
Példa: 2 szabadságfokú rendszer 11 22 l1l1 l2l2 E = (x, y) S = ( 1, 2 ) x( 1, 2 ) = l 1 cos 1 + l 2 cos( 1 + 2 ) y( 1, 2 ) = l 1 sin 1 + l 2 sin( 1 + 2 ) = dx dy d1d1 -l 1 sin 1 - l 2 sin( 1 + 2 ) d2d2 -l 2 sin( 1 + 2 ) l 1 cos 1 + l 2 cos( 1 + 2 )l 2 cos( 1 + 2 ) J( 1, 2 ) Jacobi mátrix
Bőrözés
Merev és sima bőrőzés
Példa: sétáló mozgás
Teljes,ciklikus séta
Egyszerű karakteranimáció
Motion Capture animáció
Sztereo látás X1, Y1 P2P2 c1 c2 v1 u1 P = vrp + X/XMAX u + Y/YMAX v c1 + (P1-c1) · t1 = [x, y, z] c2 + (P2-c2) · t2 = [x, y, z] 6 egyenlet, 5 ismeretlen (x, y, z, t1, t2) Hiba: kitérő egyenesek P1 vrp1 W = [x, y, z] c, u, v, vrp meghatározása: kamera kalibráció
Motion capture eredmény x t y t z t Minden markerre: pozicióadatok x t y t z t M2 M3 M1 M2 M3 M4 cos =(M3-M2) 0 ·(M2-M1) 0 tengely: d=(M3-M2) x (M2-M1)
Valóságos és virtuális világok képi illesztése: kamera
Valóságos és virtuális világok képi illesztése Blaskó Gábor
Kamera kalibráció (x, y, z) (X,Y) c v u vrp (x, y, z) f Ismeretlenek: vrp, f, u, v = 8 (X,Y)
Kompozitálás Blaskó Gábor