1 / 35

Animációk

Animációk. 4. előadás. Félév menete. ANIMÁCIÓ. modellezés. Virtuális világ modell. képszintézis. v il ág = s ík. Metafórák: 2D rajzolás. Animáció = időfüggés. Nézeti transzformáció (kamera pozíció, orientáció, látószög, vágósík). T 1 (t). T V (t). T 2 (t). Transzformációk

eugene
Télécharger la présentation

Animációk

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Animációk 4. előadás Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2014

  2. Félév menete

  3. ANIMÁCIÓ modellezés Virtuális világ modell képszintézis világ = sík • Metafórák: • 2D rajzolás

  4. Animáció = időfüggés Nézeti transzformáció (kamera pozíció, orientáció, látószög, vágósík) T1(t) TV(t) T2(t) • Transzformációk • mozgás • alak • szín • megjelenítési attribútumok, stb • kameranézet

  5. Valós idejű animáció Legalább 15 ciklus másodpercenként Óra inicializálás (tstart) do t = Óra leolvasás Nézeti transzformáció: TV = TV(t) for each object o: modellezési transzf TM, o = TM, o(t) endfor Képszintézis while (t < tend)

  6. Folyamatás mozgatás - OpenGL • Követelmények: • animáció folyamatosan fusson (azaz a felhasználó-nak ne kelljen minden lépésnél „léptetni”) • a rendszer reagáljon a felhasználói beavatkozásra (pl leállítás, lövés…) • nem jó egyszerű végtelen ciklus-hurok! • Megoldás: • olyan ciklus, amely felváltva hajt végre egy-egy lépést a rendszer eseménykezelő hurkából és a program szimulációs hurkából

  7. GLUT • Üresjárati eseménykezelő függvény: • glutIdleFunc(myIdleFunc) • Idő lekérdezés: • glutGet(GLUT_ELAPSED_TIME) • Minta program: long oldTime; void IdleFunc(void) { long newTime=glutGet(GLUT_ELAPSED_TIME); myStepFunction(newTime-oldTime); oldTime=newTime; }

  8. Képszintézis és megjelenítés • Animációs hurok: képek előállítása és megjelenítése ciklikusan ismételve • Inkrementális képszintézis eljárások villogáshoz vezethetnek (képet fokozatosan építjük fel) • Megoldás: két külön rasztertár • Egyikben készül a kép, míg a másikat jelenítjük meg • Új képkocka megjelenítése: a két rasztertár gyors kicserélése Rasztertár 1. monitor Rasztertár 2.

  9. Dupla buffer animációhoz (GLUT) Inicializálás: glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); glClear(GL_COLOR_BUFFER_BIT); rajzol… glutSwapBuffers( ); Rasztertár 1. monitor Rasztertár 2.

  10. 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

  11. 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

  12. TM(t): Mozgástervezés • Követelmény: ált. C2 , néha (C1,C0) folytonosság • Mozgás = a transzformációs elemek időbeli változtatása • Tetszőleges pozíció+orientáció megadható az alábbi mátrixszal: • De az orientáció (A mátrix) szabadsági foka csak 3! • szabályos orientáció: sorvektorok egymásra merőleges egységvektorok TM(t)= a11a12 a13 0 a21a22 a23 0 a31a32 a33 0 pxpypz 1

  13. TM(t): Mozgástervezés • TM(t) mátrixelemek nem függetlenek! • Tervezés független paraméterek terében  pozíció: px, py, pz orientáció: , ,    p(t)=[px, py, pz, , ,  ](t) TM(t)= 1 cos sin -sincos 1 1 1 1 px, py, pz, 1 cos sin -sincos 1 1 cos -sin 1 sin cos 1

  14. Orientáció tervezés – gondok… • Változó orientáció-animálás a , ,  csavaró-billentő-forduló szögek független interpolációjával • PRO: minden pillanatban érvényes orientációt kapunk • KONTRA: képzeletbeli tengelyek körül forgatunk, ezért a mozgás nem lesz valósszerű  • a paraméterek egyenletes változtatása egyenetlen mozgást eredményez, a képzeletbeli tengelyek láthatóvá válnak • megoldás: interpoláció kvaterniókkal • (érdeklődőknek részletek: Szirmay-Kalos László et. al. „Háromdimenziós grafika, animáció és játékfejlesztés” 312 oldal – lásd könyvtárban)

  15. 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 • pl: origóból (vx , vy) kezdősebességgel kilőtt lövedék mozgása x(t)=vx t , y(t) =vyt - g t2/2 • kulcsokból interpolációval: keyframeanimation • görbével indirekt módon: pathanimation • mechanikai modellből az erők alapján: physicalanim. • mérésekből: motioncaptureanimation

  16. 4D Stúdió - MTA SZTAKI http://vision.sztaki.hu/4Dstudio/ Forrás: Geometriai Modellezés és Számítógépes Látás laboratórium

  17. Előfeldolgozás

  18. vi+1 vi Interpoláció: 3-d rendű spline r(t) = ai (t-ti )3 + bi (t-ti ) 2 + ci (t-ti )1 + di ha ti ≤t<ti+1 r(ti) = ri, r(ti+1) = ri+1 r’(ti) = vi r’(ti+1) = vi+1 ri+1 r1 rn r0 ri t1 t0 ti ti+1 tn • C2 folytonosság követelményéből: spline • Ismeretlen vi -k meghatározása: • ri’’(ti+1)= ri+1’’(ti+1) + sebesség a kezdő és végpontban • bonyolult lineáris egyenletrendszer megoldását igényli  • Tervezési paraméterek alapján: Kohanek-Bartels, Catmull-Rom • Feladjuk a C2 folytonosság követelményét a görbeszegmensek • kapcsolódási pontjaiban • Legalább szép sima legyen a pálya…

  19. vi Catmull-Rom „spline” r(t) = ai (t-ti )3 + bi (t-ti ) 2 + ci (t-ti )1 + di ha ti ≤t<ti+1 Sebességek előírása: r’(ti) = vi r’(ti+1) = vi+1 vi+1+vi 2(ri+1 -ri) ai= – (ti+1 -ti )2 (ti+1 -ti )3 ri+1 ri-1 3(ri+1 –ri) vi+1 + 2vi – bi= rn (ti+1 -ti )2 (ti+1 -ti ) r0 ri ci= vi t0 ti-1 ti ti+1 tn di= ri ri+1 -ri ri -ri-1 1 2 vi = + ti+1 -ti ti -ti-1

  20. Pálya animáció: Transzformáció ym r(t) görbe: 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 = zmr’’(t) =r’(t) r’’(t) ym = zmxmym = zmx A függőleges, amerre az erő hat

  21. 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

  22. Egy kis mechanika ÜtközésDetektál F(r,v,t) erő Középpont helyzete: 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’ -n(v·n) v v’ = [v - n(v·n)]-[n(v·n)·bounce]

  23. Folytonos-Diszkrét ütközés detektáláspontra és féltérre n ·(r(t) - r0) > 0 r(ti) Sugár indul: r+v·t v n ·(r(t) - r0) = 0 r(ti+1) metszés: t* Ha t* < dt Collision n ·(r(t) - r0) < 0

  24. Ferde hajítás Mozgás+ gravitáció: v(t+t)=v(t)+g∙t r(t+t)=r(t)+v(t)∙t v=g∙t 2 F0 7 1 3 v(0)=v0 Fg=mg 8 6 4 Fg=mg … 5 Rugalmas ütközés: lásd előbb

  25. Vízszintes rugón mozgó labda F(t)=-l(t)∙D a(t)=F(t)/m v(t+t)=v(t)+a(t)∙t r(t+t)=r(t)+v(t)∙t D: rugóállandó l(t): megnyúlás t-ben Labda Rugó center l(t)

  26. Golyók ütközése • Lendület megmaradás: • m1v1+m2v2=m1u1+m2u2 • Mechanikai energia megmaradás • 1/2 m1v12+ 1/2 m2v22= 1/2 m1u12+ 1/2 m2u22 v1 u1 v2 u2 Megoldás: (m1-m2)v1+2m2v2 (m2-m1)v2+2m1v1 u1= u2= m1+m2 m1+m2

  27. Ferde ütközés v1┴= u1┴ v2┴= u2┴ m1v1II+m2v2II=m1u1II+m2u2II ½ m1v21II+ ½ m2v22II= ½ m1u21II+ ½ m2u22II v2 v1 v2 v2┴ v2II

  28. Ütközés detektálás háromszög-háromszög gyorsítás: befoglalók O(n2)

  29. Karakter animáció rL rw rw = rL· Rkéz·Talkar·Rkönyök·Tfelkar·Rváll·Tgerinc·Tember homogén koordináta 4-es

  30. 2D csont l  px,py x, y, 1 cossin 0 -sin cos 0 00 1 1 0 0 0 1 0 0l1 1 0 0 0 1 0 pxpy1

  31. Robot példa Robot T0 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

  32. 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

  33. 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));

More Related