480 likes | 657 Views
Animáció. Szirmay-Kalos László. Animáció = időfüggés. T 1 ( t ). T V ( t ). T 2 ( t ). Transzformációk alak szín megjelenítési attribútumok, stb. Valós idejű animáció. Legalább 15 ciklus másodpercenként. Óra inicializálás (t start ) do t = Óra leolvasás
E N D
Animáció Szirmay-Kalos László
Animáció = időfüggés T1(t) TV(t) T2(t) Transzformációk alak szín megjelenítési attribútumok, stb
Valós idejű animáció Legalább 15 ciklus másodpercenként Óra inicializálás (tstart) do t = Óra leolvasás for each object o: modellezési transzf TM, o = TM, o(t) Nézeti transzformáció: TV = TV(t) Képszintézis while (t < tend)
Valószerű mozgás • Fizikai törvények: • Newton törvény • ütközés detektálás és válasz: impulzus megmaradás • Fiziológiai törvények • csontváz nem szakad szét • meghatározott szabadságfokú ízületek • bőr rugalmasan követi a csontokat • Energiafelhasználás minimuma
Newton törvény m d2 dt2 F/m = r = rL d2 dt2 TM(t) r(t) = rL TM(t) Az erő rugalmas mechanizmuson keresztül hat, azaz folytonosan változik TM(t) C2 folytonos
TM(t): Mozgástervezés • Követelmény: ált. C2 , néha (C1,C0) folytonosság • 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 p(t) TM(t)= 1 1 1 px, py, pz, 1 cos -sin 1 sin cos 1 sx sy sz 1 cos sin -sincos 1 1 1 cossin -sincos 1
Mozgástervezés a paramétertérben • p(t) elemei ált. C2 , néha (C1,C0) folytonosak • 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
2.key 3.key 4.key 5.key 1. key Keyframe animáció
Pálya (path) animáció lokális modellezési transzf: y = fix z = görbe der. x = vektor t = spline paraméter vagy az ívhossz
Pálya animáció: Transzformáció ym r(t) görbe: orr: z xm xm0(t) 0 ym0(t) 0 zm0(t) 0 r(t) 1 TM= r(t) zm Explicit up vektorFrenet keretek: zm = r’(t) zm = r’(t) xm = zm up xm = zmr’’(t) ym = zmxm ym = zmxm A függőleges, amerre az erő hat
Ívhossz szerinti mozgás ds ívhossz dz = dz/du·du u r(u) görbe: s(u) = (dx/du)2 +(dy/du)2 +(dz/du)2 du s(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) u f(t) t
Fizikai animáció • Erők (gravitáció, turbulencia stb.) • Tömeg, tehetetlenségi nyomaték (F = ma) • Ütközés detektálás (metszéspontszámítás) • Ütközés válasz • rugók, ha közel vannak • impulzus megmaradás alapján
Egy kis mechanika ÜtközésDetektál F(r,v,t) erő sugár: r+v·t m v dr/dt = v dv/dt = F(r,v,t)/m metszés: t* Ha t* < dt Collision 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 } ÜtközésVálasz n = CollisionNormal v’ v -n(v·n) v’ = [v - n(v·n)]-[n(v·n)·bounce]
Folytonos-Diszkrét ütközés detektáláspontra és féltérre n ·(r - r0) > 0 r(ti) sugár: r+v·t v n ·(r - r0) = 0 metszés: t* Ha t* < dt Collision r(ti+1) n ·(r - r0) < 0
Ütközés detektálás háromszög-háromszög gyorsítás: befoglalók O(n2)
Real-time fizikai animáció Konyha Zoltán (autoszimulátor)
Karakter animáció rL rw rw = rL· Rkéz·Talkar·Rkönyök·Tfelkar·Rváll·Tgerinc·Tember homogén koordináta 4-es
2D csont l px,py x, y, 1 cossin 0 -sin cos 0 00 1 1 0 0 0 1 0 0l1 1 0 0 0 1 0 pxpy1
Robot T0 Robot példa T1, T2, T3 Head Torso Leg1 Leg2 Arm1 Arm2 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); T2 T1 T0 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 Arm1 Arm2 Head Torso
up forward „Inverz kinematika” T0 = előrehaladás (forward, up) ??? T2 = forgatás (ang) leg 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));
Csontváz felépítése E = (x, y, z, , , ) end effektor Állapotvektor = egyes ízületek állapota S = (px, py, pz, , , )|i=1..n Strukturális összefüggés: E = F( S )
2 szabadságfokú rendszer 2 l1 l2 S = (1,2) E = (x, y) 1 Strukturális összefüggés: x(1,2) = l1 cos1 + l2 cos(1 +2) y(1,2) = l1 sin1 + l2 sin(1 +2)
Forward kinematika karakter állapot beállítás: S1,E1 karakter állapot beállítás: S2,E2 … karakter állapot beállítás: Sn,En S(t) interpolációval E(t) = F ( S(t) )
Inverz kinematikával karakter állapot beállítás: S1,E1 karakter állapot beállítás: S2,E2 … karakter állapot beállítás: Sn,En E(t) interpolációval S = F-1( E(t) )
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 • t0-ra E0 , S0 ismert • ha Et, Stismert, számítsuk Et+dt= Et+dEt, St+dt = St+dS F S1 F Sn Et+dEt = F(St+dS) = F(St)+ dS1 +…+ dSn F1 S1 F1 Sn dEt,1 dS1 ... Jacobi-mátrix m n lineáris egyenletrendszer ... ... = ... ... Fm S1 Fm Sn dEt,m ... dSn
m n-es egyenletek megoldása, túlhatározottság:m > n ym = Amn ·xn Anm· ym = AnmAmn · xn (AnmAmn)-1Anm·ym = xn T T T T A+ = Anm pseudo inverze minimális kvadratikus hibájú megoldás: |Amn·xn-ym|
m x n-es egyenletek megoldása, alulhatározottság:m < n ym = Amn ·xn Anm·(AmnAnm)-1 ·ym = xn Behelyettesítés: Amn ·xn = Amn· Anm·(AmnAnm)-1 ·ym= ym T T A+ = Anxm pseudo inverze T T minimális energiájú megoldás: |xn|
Inverz kinematika megoldás E = E0 , S = S0 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 2 x(1,2) = l1 cos1 + l2 cos(1 +2) y(1,2) = l1 sin1 + l2 sin(1 +2) l1 l2 1 E = (x, y) S = (1,2) J(1 ,2 ) Jacobi mátrix -l1 sin1 - l2 sin(1 +2) dx -l2 sin(1 +2) d1 = dy l1 cos1 + l2 cos(1 +2) l2 cos(1 +2) d2
Sztereo látás v1 X1, Y1 c2 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 c1 P1 P2 u1 W = [x, y, z] vrp1 c, u, v, vrp meghatározása: kamera kalibráció
x t y t z t Motion capture eredmény Minden markerre: pozicióadatok M1 M2 M2 M3 x t y M3 cos=(M3-M2)0·(M2-M1)0 tengely: d=(M3-M2)x (M2-M1) M4 t z t
Valóságos és virtuális világok képi illesztése Blaskó Gábor
Kamera kalibráció v c (X,Y) (x, y, z) f u (x, y, z) (X,Y) vrp Ismeretlenek: vrp, f, u, v 3 + 1+2+2 = 8
Kompozitálás Blaskó Gábor