Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
Animáció Szirmay-Kalos László
2
Animáció = időfüggés T1(t) TV(t) T2(t) Transzformációk alak szín
megjelenítési attribútumok, stb
3
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
4
Valószerű mozgás Fizikai törvények: Fiziológiai 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
5
Newton törvény m d2 F/m = r dt2 = rL d2 TM(t) dt2 r(t) = rL TM(t)
Az erő rugalmas mechanizmuson keresztül hat, azaz folytonosan változik TM(t) C2 folytonos
6
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 px, py, pz, 1 sx sy sz 1 cos sin -sin cos 1 cos -sin 1 sin cos 1 cos sin -sin cos
7
Kvaternió interpoláció
8
Kvaternió interpoláció
q[0,u]q-1 = [0,v] q1 = [cos(1/2), w1 sin(1/2)], |w1 | = 1 q2 = [cos(2/2), w2 sin(2/2)], |w2 | = 1 q(t) q1 q2
9
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
10
Keyframe animáció 5.key 4.key 2.key 1. key 3.key
11
Keyframe animáció görbéi
12
Görbék megváltoztatása
13
Interpoláció: 3-d rendű spline
ri(t) = ai t3 + bi t2 + cit 1 + di ri(ti) = ri, ri(ti+1) = ri+1 ri’(ti) = vi ri’(ti+1) = vi+1 vi vi+1 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 ri+1 r1 rn r0 ri t0 t1 ti ti+1 tn
14
Kohanek-Bartels (Catmull-Rom) „spline”
= -1 ri+1 = 0 Catmull-Rom = 1 ri-1 rn vi r0 ri (1-) tension paraméter t0 ti-1 ti ti+1 tn ri+1 - ri ri - ri-1 1 2 vi = + =0.9 =0.1 ti+1 - ti ti - ti-1 =0.5 (1-)
15
Keyframe animáció
16
Pálya (path) animáció t = spline paraméter vagy az ívhossz
17
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) TM = r(t) zm Explicit up vektor Frenet keretek: zm = r’(t) zm = r’(t) xm = zm up xm = zm r’’(t) ym = zm xm ym = zm xm A függőleges, amerre az erő hat
18
Ívhossz szerinti mozgás
ds ívhossz dz = dz/du ·du r(u) görbe: u 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
19
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 !
20
Egy kis mechanika dr/dt = v dv/dt = F(r,v,t)/m -n(v·n)
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]
21
Folytonos-Diszkrét ütközés detektálás pontra é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
22
Karakter animáció rL rw rw = rL · Rkéz·Talkar·Rkönyök·Tfelkar·Rváll·Tgerinc·Tember homogén koordináta 4-es
23
Csontváz When bone animation is defined, the bones and joints connecting them are also included in the mesh representing the skin. By default, a skin vertex will be transformed by the transformation of that bone which is closest to it. During animation, the bones are rotated in the joints and upper level bones naturally modify all other bones connected to it via joints. The skin is deformed with the resulting transformation matrices of the bones.
24
Séta
25
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 To examine how this can be done in OpenGL, let us consider a skin vertex attached to the cyan bone. When this correspondence is made, the skin vertex is expressed relative to its bone, i.e. in the coordinate system of the bone, resulting in (x,y,z). This point can also be expressed in the coordinate system of the parent bone (brown bone), just the transformation between the reference systems of the two bones should be executed. This is currently a translation along axis x with the length of the bone l. If the child (cyan) bone is rotated, this rotation applies to the skin in its coordinate system, thus rotation happens before applying the translation to the parent system. If the parent bone is rotated, the skin is translated first to the parent’s coordinate system, then rotation takes place. l glRotatef(theta1, 0, 0, 1) glTranslatef(l, 0, 0); glVertex3f(x, y, z); 1
26
Transzformáció hierarchia
glRotatef(theta1, 0, 0, 1) glTranslatef(l, 0, 0); glRotatef(theta2, 0, 0, 1) glVertex3f(x, y, z); 2 l1 1 If both bones are rotated, first child rotation, then translation to the parent’s system, finally rotation of the parent are executed. If the parent is also a child of some other node, or the parent is placed in the world, then new transformations must be added on the top of the hierarchy. Generally, a bone is a rotation transformation for its own skin and a rotation + translation to its children, which should be applied recursively on hierarchical characters. 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)
27
PMan Pman T0 T1, T2 T0 = Pman előremozog T1= váll pozíció
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 Our simple example is the primitive man, which consists of a head, torso, two independent legs and two arms. Let us consider just an arm. Pman swings his arm while walking. The swing rotation is defined in a coordinate system where the origin is the shoulder position. Then, the position of the shoulder with respect to Pman should be defined, i.e. the swinging arm should be expressed in a coordinate system having the origin in the center of Pman. This is a translation. Finally, Pman moves forward, i.e. its center is translated in the world coordinate system. So the arm is first rotated (T2), then translated (T1), and translated again (T0). From these transformations, T0 and T2 change in time, but T1 remains constant, which defines the physiological constraints of the body: Pman can move its complete body and can swing its arm, but cannot remove its arm from its shoulder.
28
Pman rajzolá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; glTranslatef(xsh, ysh, zsh); // T1 glRotatef(angle, xshax, yshax, zshax); // T2 DrawArm( ); glPopMatrix(); … Other arm, legs, torso, head } Pman Arm1 Arm2 Head Torso Transformations follow each other in the program in reverse order of their execution or in normal order of the hierarchy traversal. Only the parameters of T0 and T2 are updated. T2 is a periodic swinging rotation, which is defined by two key frames defining the two extreme angles and the rotation angle is linearly interpolated in between according to the elapsed time. Note that when we step on a lower hierarchy level, the transformation matrix is pushed on stack, and then restored since objects on the same level should not interfere (arms are independent, so are legs). However, the parent affects all its children.
29
Inverz kinematika T0 = előremozgás (forward, up) ???
T2 = láb forgatás(ang) leg ang up The motion defined by constant forward moving velocity and constant angular speed in the hips and shoulders is not realistic since the leg will slip on the floor (like a break dancer) and the body will fly over the floor. In realistic walking one leg should stand still on the floor. In an animation, the point of interest for which constraints are given is called the end effector (a term inherited from robotics). The end effector of the walking is the leg holding the weight of the body. The problem is that we define the character state from top to bottom by setting a sequence of transformations. This is called forward kinematics. The end effector at the end of the transformation sequence will be affected by all transformations. The task is to determine the upper level transformations in a way that the resulting end effector position meets the specified constraint. Such problems are called inverse kinematics. In this simple problem, we can explicitly solve the inverse kinematics problem since the relationship between the position of the character (forward and up) a hip rotation (ang) is defined by a right triangle of hypotenuse equal to the leg length. The end effector is always on the ground, so up directly specifies the distance from the floor. However, Pman walks forward, so its location along the forward direction is not constant. The actual forward position is just relative to the leg, which means that forward is updated incrementally. Támaszkodó nem csúszkálhat forward forward += leg * fabs(sin(angNew) - sin(angOld)); up = leg * cos(angNew);
30
Inverz kinematika 1 l1 2 l2 up(1,2) = l1 sin 1 + l2 sin(1 + 2)
In case of multiple joints and bones, the correspondence between the rotation angles and the relative position of the origin and the end effector may become complicated if the rotation axes are different. However, when rotation axes are parallel (more or less, this is the case for hip and knee rotations), a simple analytic expression can be elaborated. forward(1,2) = l1 cos 1 + l2 cos(1 + 2)
31
Bőrözés
32
Merev és sima bőrőzés
33
5. házi Gólya lépeget: Béka: Síkra vetített árnyék
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
34
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.
35
Motion Capture animáció
36
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 c1 c2 v1 u1 P1 P2 X1, Y1 w = (x, y, z) vrp1 c, u, v, vrp meghatározása: kamera kalibráció
37
Motion capture eredmény
Minden markerre: pozicióadatok x t y z 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
38
Valóságos és virtuális világok képi illesztése
Blaskó Gábor
39
Kamera kalibráció v u X, Y (x, y, z) (x, y, z) (X,Y) vrp
Ismeretlenek: vrp, f, u, v = 8
40
Kompozitálás Blaskó Gábor
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.