400 likes | 606 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ó. Óra inicializálás (t start ) t prev = t start ; do t = Óra leolvasás ; Szimul áció(t prev , t );
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ó Óra inicializálás (tstart) tprev = tstart; do t = Óra leolvasás; Szimuláció(tprev, t); for each object o: modellezési transzf TM,o = TM,o(t); Nézeti transzformáció: TV = TV(t); Képszintézis; tprev = t; while (t < tend); Legalább 15 ciklus másodpercenként
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 Kvaterniók 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
Kvaternió interpoláció q[0,u]q-1 = [0,v] • q1= [cos(1/2), w1sin(1/2)], |w1 | = 1 • q2= [cos(2/2), w2sin(2/2)], |w2 | = 1 q(t) q1 q2
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ó
vi+1 ri(t) = ait3 + bit2 + cit 1 + di ri(ti) = ri, ri(ti+1) = ri+1 ri’(ti) = vi ri’(ti+1) = vi+1 vi • Ismeretlen vi -k meghatározása: • C2 folytonosság követelményéből: spline • ri’’(ti+1)= ri+1’’(ti+1) + sebesség a kezdő és végpontban • Tervezési paraméterek alapján: Kohanek-Bartels, Catmull-Rom Interpoláció: 3-d rendű spline ri+1 r1 rn r0 ri t0 t1 ti ti+1 tn
= 1 = -1 = 0 Catmull-Rom vi tension paraméter (1-) =0.9 =0.5 =0.1 (1-) Kohanek-Bartels (Catmull-Rom) „spline” ri+1 ri-1 rn r0 ri t0 ti-1 ti ti+1 tn ri+1 -ri ri -ri-1 1 2 vi = + ti+1 -ti ti -ti-1
Pálya (path) animáció 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 (pl. 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 rossz !
Egy kis mechanika F(r,v,t) erő ÜtközésDetektál m r sugár: r+v·t v 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 = Eredő erő(r,v) 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
Karakter animáció rL rw rw = rL· Rkéz·Talkar·Rkönyök·Tfelkar·Rváll·Tgerinc·Tember homogén koordináta 4-es
Transzformáció hierarchia l (x,y,z) glTranslatef(l, 0, 0); glVertex3f(x, y, z); glTranslatef(l, 0, 0); glRotatef(theta2, 0, 0, 1) glVertex3f(x, y, z); l 2 l glRotatef(theta1, 0, 0, 1) glTranslatef(l, 0, 0); glVertex3f(x, y, z); 1
Transzformáció hierarchia glRotatef(theta1, 0, 0, 1) glTranslatef(l, 0, 0); glRotatef(theta2, 0, 0, 1) glVertex3f(x, y, z); 2 l1 1 2 glTranslatef(x0, y0, z0); glRotatef(theta1, 0, 0, 1) glTranslatef(l, 0, 0); glRotatef(theta2, 0, 0, 1) glVertex3f(x, y, z); l1 1 (x0,y0,z0)
PMan Pman T0 T1, T2 Head Torso Leg1 Leg2 Arm Arm2 T0 = Pman előremozog glTranslatef(xpm, ypm, zpm); T1= váll pozíció glTranslatef(xsh, ysh, zsh); T2= váll forgatás glRotatef(angle, xshax, yshax, zshax); T2 T1 T0
Pmanrajzolás és animáció void DrawPman(float dt) { xpm += vx*dt; ypm += vy*dt; zpm += vz*dt; glPushMatrix(); glTranslatef(xpm, ypm, zpm); // T0 angle += av * dt; if (angle>30 || angle<-30) av*=-1; glPushMatrix(); glTranslatef(xsh, ysh, zsh); // T1 glRotatef(angle,xshax, yshax, zshax); // T2 DrawArm( ); glPopMatrix(); … Other arm, legs, torso, head glPopMatrix(); } Pman Arm1 Arm2 Head Torso
Inverz kinematika T0 = előremozgás (forward, up) ??? T2 = láb forgatás(ang) leg ang Támaszkodó nem csúszkálhat up forward forward += leg * fabs(sin(angNew) - sin(angOld)); up = leg * cos(angNew);
Inverz kinematika 1 l1 up(1,2) = l1 sin1 + l2 sin(1 +2) 2 l2 forward(1,2) = l1 cos1 + l2 cos(1 +2)
5. házi • Gólya lépeget: • J: jobbra ford (0.5sec) • B:balra ford (0.5sec) • SP: lecsap (0.5sec) • Sima bőrözés CPU-n • Béka: • ugrik, min 1 sec pihenő • Síkra vetített árnyék
5. házi • Mozgassa meg a 4. házi objektumait. A gólya lépeget előre 1 lépés/sec sebességgel. A támaszkodó láb nem csúszkál (inverz kinematika). A ‘J’ billentyű lenyomására 0.5 sec alatt 10 fokot jobbra fordul célszerűen a támaszkodó láb körül, hasonlóan a ‘B’ billentyű lenyomására balra. A SPACE hatására a nyakát előrehajtva lecsap és ha békatestet talál (végtagok nem számítanak), akkor a béka eltűnik. A békák merev testként akár véletlen irányokba ugrálhatnak, de két ugrás között 1 sec rákészülési időre van szükségük. A terepet illetően két lehetőség közül lehet választani. Az elsőben a terep sík és akkor a testeknek van árnyékuk rajta, amit a nap vet (síkra vetített árnyék algoritmus). A másik lehetőség, hogy a terep nem sík.
Sztereo látás P = vrp + (2X/XMAX-1)u + (2Y/YMAX-1)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 c2 c1 v1 u1 P2 P1 X1, Y1 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 u X, Y (x, y, z) (x, y, z) (X,Y) vrp Ismeretlenek: vrp, f, u, v 3 + 1+2+2 = 8
Kompozitálás Blaskó Gábor