Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Animáció Szirmay-Kalos László.

Hasonló előadás


Az előadások a következő témára: "Animáció Szirmay-Kalos László."— Előadás másolata:

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


Letölteni ppt "Animáció Szirmay-Kalos László."

Hasonló előadás


Google Hirdetések