Virtuell Verklighet D, VT-04 Animering av rotationer Innehåll • Referenssystem – Kartesiskt koordinatsystem • Matriser – Ortogonal • Rotation • Rotationsrepresentationers för- och nackdelar vid animering – – – – ”Euler angle” ”Fixed angle” ”Angle and Axis” Quaternioner • Partikelanimering 1 Referenssystem • Kartesiskt koordinatsystem i 3 dimensioner – Koordinataxlar • Ortogonal mängd av 3 nollskilda vektorer • Linjärt oberoende – ligger i olika plan • När 2 vektorer valts för x- och y-axeln finns det 2 olika val för den positiva sidan av z-axeln – Högerhänt koordinatsystem • OpenGL, OpenSceneGraph – Vänsterhänt koordinatsystem • DirectX • • Tumme, pekfinger och långfinger på höger respektive vänster hand symboliserar axlarna x, y och z (i den ordningen) Positiv rotation – Högerhandsregeln – tummen pekandes i axelns riktning (högerhänt koordinatsystem), fingrarna pekar i positiv riktning • En VR-miljö ofta består av ett flertal olika koordinatsystem – scengraf, sensorer, fysikmotor, osv 2 Peter Sunna, [email protected] 1 Virtuell Verklighet D, VT-04 Animering av rotationer Referenssystem • Vänsterhänt • Högerhänt y y z x x z • • • Det viktiga är inte namngivningen av axlarna, utan den positiva riktningen som axlarna har i förhållande till varandra För att konvertera punkter och vektorer från ett högerhänt koordinatsystem till ett annat högerhänt koordinatsystem, och vice versa, krävs en rotationsoperation För att konvertera punkter och vektorer från ett högerhänt koordinatsystem till ett vänsterhänt koordinatsystem, och vice versa, krävs en speglingsoperation 3 Referenssystem • • • • Ett annat sätt att definiera högeroch vänsterhänt koordinatsystem är genom kryssprodukten, se beräkningar till höger Determinanten av en matris uppbyggd med basvektorerna från ett högerhänt koordinatsystem är 1 Determinanten av en matris uppbyggd av basvektorerna från ett vänsterhänt koordinatsystem är -1. Hädanefter i denna text behandlas endast högerhänta koordinatsystem, detta eftersom dessa är vanligast och mest intuitiva. Högerhänt i = (1,0,0) i× j = k j = (0,1,0) k = (0,0,1) Vänsterhänt i = (1,0,0) j = (0,1,0) k = (0,0,−1) i × j = −k 4 Peter Sunna, [email protected] 2 Virtuell Verklighet D, VT-04 Animering av rotationer Matriser (1) • ”Column major” (premultiplied) – c' = Mc, där c och c' är kolumner – Vanligt inom matematiken • ”Row major” (postmultiplied) – r' = rM(transponat), där r och r' är rader; r=c(transponat), r'=c'(transponat) – Vanligt i grafiktillämpningar M 11 M 21 M 12 M 22 M 13 M 23 x y M 31 M 32 M 33 z [x M 11 y z ] M 12 M 13 M 21 M 31 M 22 M 23 M 32 M 33 • Hädanefter i denna text behandlast endast ”Column major” 5 Matriser (2) • En inverterbar matris M kan betraktas som en transformation från ett koordinatsystem till ett annat • Till höger visas hur kolumnerna mappar basvektorerna till det nya koordinatsystemet M 11 M 12 M 13 1 M 11 M 21 M 31 M 22 M 32 M 23 0 = M 21 M 33 0 M 31 M 11 M 12 M 13 0 M 21 M 31 M 22 M 32 M 23 1 = M 22 M 33 0 M 32 M 11 M 12 M 13 0 M 21 M 31 M 22 M 32 M 23 0 = M 23 M 33 1 M 33 M 12 M 13 6 Peter Sunna, [email protected] 3 Virtuell Verklighet D, VT-04 Animering av rotationer Ortogonal matris • • En ortogonal matris definieras av att dess invers är lika med dess transponat Ortogonal – Radvektorerna är vinkelräta mot varandra – Kolumnvektorerna är vinkelräta mot varandra • Normaliserad • Ni bör kunna bevisa att ortogonal och normaliserad följer av definitionen Borde således egentligen kallas ortonormal matris Bevarar längder och vinklar när den används för att transformera vektorer – Alla rader och kolumner har längden 1 • • – ||Mv|| = ||v|| – (Mv) (Mw)=v w (där = ”dot”-produkt, skalärprodukt) 7 Rotationsmatris • En rotationsmatris är en ortogonal matris M som uppfyller det(M) = 1 – Den bevarar, förutom längder och vinklar, även höger-/vänsterhänt koordinatsystem • Är däremot det(M) = -1 innehåller M en spegling (se tidigare slide om referenssystem) • Att byta plats på två rader i en matris ändrar tecken på determinanten • Att multiplicera en rad med en skalär, a, multiplicerar även determinanten med a 8 Peter Sunna, [email protected] 4 Virtuell Verklighet D, VT-04 Animering av rotationer Algebraisk grupp • En algebraisk grupp <G,*> är en mängd G, sluten under en binär operation, som: – Är associativ – Har en invers för alla element – Innehåller en identitet • Rotationsmatriserna är en icke kommutativ grupp under multiplikation • Vid multiplikation av rotationsmatriser är således svaret alltid en rotationsmatris (ev avrundningsfel ej medräknade) 9 Animering av ett objekts rotation • Har två rotationer, vid tidpunkt t1 och tidpunkt t2 – vill bestämma objektets rotation vid en tidpunkt mellan dessa • Kan ej interpolera mellan 2 rotationsmatriser (varför inte?) • Måste hitta andra metoder att representera rotationer med • ”Euler angle”, ”Fixed angle”, ”Axis angle”, Quartenioner 10 Peter Sunna, [email protected] 5 Virtuell Verklighet D, VT-04 Animering av rotationer ”Euler angle” • Rotation runt objektets lokala axlar som följer med objektet • Tre oberoende rotationer anges, en runt vardera axel, i en viss ordning, t ex x-y-z • Jmf att du sitter i ett flygplan och utför ”roll”, ”pitch” och ”jaw” (vem har inte varit pilot?) • Den slutgiltiga rotationen blir rotationsmatriserna för resp rotation multiplicerade i angiven ordning • Exempel på rotation: Rz(30)Ry(50)Rx(20) 11 ”Fixed angle” • Som ”Euler angle”, fast rotation runt fixerade axlar, dvs axlarna följer inte med objektet när det roterar • Går att visa att rotation runt fixerade axlar är ekvivalent med rotation runt lokala axlar fast i omvänd ordning • Dvs, rotationen x-y-z i ”Euler angle” är detsamma som rotationen z-y-x i ”Fixed angle” 12 Peter Sunna, [email protected] 6 Virtuell Verklighet D, VT-04 Animering av rotationer ”Euler angle”/”Fixed angle” (1) 13 ”Euler angle”/”Fixed angle” (2) • Fördelar – Enkelt för en användare att förstå sig på, vanligt i modelleringsprogram • Nackdelar – Finns 24 st olika konventioner för val av rotationsordning – ”Gimbal lock”: två rotationsaxlar kan sammanfalla och en frihetsgrad går förlorad (händer vid rotationsvinklar nära /2 på andra rotationsaxeln, jmf t ex (0, /2, ) och (- , /2, 0)) – Interpolering problematiskt, dels pga ”Gimbal lock”, dels pga att det finns flera olika vägar mellan två rotationer 14 Peter Sunna, [email protected] 7 Virtuell Verklighet D, VT-04 Animering av rotationer ”Angle and Axis” • Eulers rotationsteorem – Varje orientering kan härledas från en annan genom rotation runt en axel • • • Alla rotationer kan således beskrivas av en rotationsvektor och en vinkel Endast två möjliga vägar mellan två olika rotationer Rotationer beskrivna med ”Angle and axis” kan interpoleras, men måste göras om till rotationsmatriser för att kunna komponeras 15 Exempel: rotation runt valfri axel (1) • Antag att rotationsaxeln r är normaliserad och vi vill rotera radianer runt r. • Idé: – Konstruera ny bas där r ingår – Byt till denna bas – Rotera radianer runt x-axeln (vilken då ska motsvara r) – Byt tillbaka till standardbasen 16 Peter Sunna, [email protected] 8 Virtuell Verklighet D, VT-04 Animering av rotationer Exempel: rotation runt valfri axel (2) • Steg 1: Skapa den nya ortonormala basen – Första axeln är r (rotationsvektorn) – Andra axeln, s, ska vara vinkelrät till r • • • • • • Hitta minsta komponenten (i absoult värde) i r Sätt den till 0 Byt plats på de andra två komponenterna Negera en av de två nollskilda komponenterna Sätt resultatet till s Normalisera s – Tredje axeln, t, ska vara vinkelrät till s och r • t=rxs 17 Exempel: rotation runt valfri axel (3) • Steg 1 (forts) – Använd de tre vektorerna som rader i en matris för att skapa en basbytesmatris (se basbyte i linjär algebrabok) – M transformerar nu vektorn r på x-axeln, s på y-axeln och t på z-axeln rT M = sT tT 18 Peter Sunna, [email protected] 9 Virtuell Verklighet D, VT-04 Animering av rotationer Exempel: rotation runt valfri axel (4) • Steg 2 – 4 R = MTRx( )M – Först transformerar vi så att r är x-axeln (mha M), sen roterar vi radianer runt den här xaxeln (mha Rx( )), slutligen transformerar vi tillbaka (mha inversen till M, dvs MT) för att få rotationsmatrisen R 19 Matris för rotation runt valfri axel • En annan metod att rotera runt en valfri axel är mha följande matris, som kan konstrueras från rotationsaxeln (x,y,z) och rotationsvinkeln ø cos φ + ( 1- cos φ)x 2 ( 1 − cos φ)xy + z sin φ ( 1 − cos φ)xy-z sin φ) cos φ + (1 − cos φ ) y 2 ( 1- cos φ)xz + y sin φ (1 − cos φ ) yz − x sin φ (1 − cos φ ) xz − y sin φ (1 − cos φ ) yz + x sin φ cos φ + (1 − cos φ ) z 2 20 Peter Sunna, [email protected] 10 Virtuell Verklighet D, VT-04 Animering av rotationer Interpolering ”Angle and axis” (1) • Ett sätt är att interpolera rotationsaxlarna och vinklarna separat • En mellanliggande axel kan bestämmas genom att rotera den ena axeln mot den andra • Rotationsaxeln fås genom att ta kryssprodukten av de två axlarna • Vinkeln mellan axlarna fås genom definitionen för dot-produkten • Mha en interpolant, u, kan sedan den mellanliggande axeln och vinkeln (hur mycket man ska rotera runt axeln) beräknas 21 Interpolering ”Angle and axis” (2) Rotationsaxel : B = A1 × A2 Vinkel mellan axlar : φ = cos -1 A1 • A2 | A1 || A2 | Mellanliggande axel : Au = R( B, uφ ) A1 Mellanliggande rotationsvinkel : φu = (1 − u )φ1 + uφ2 22 Peter Sunna, [email protected] 11 Virtuell Verklighet D, VT-04 Animering av rotationer Quaternioner • • • Hamilton 1840-talet Komplexa tal i fyra dimensioner Består av en reell del, w, och en imaginär del, v = (x,y,z) q = [w,v] = (w,x,y,z) = w + xi + yj + zk i*i = j*j = k*k = i*j*k = -1 i*j = k, j*i = -k • • • Observera att man ibland anger quaternioner med den reella delen sist, dvs q = (x,y,z,w) En quaternion kan representera en punkt i 4 dimensioner, eller (om w = 0) en punkt eller vektor i 3 dimensioner Vi vill kunna representera rotationer mha quaternioner, men för att kunna göra det måste vi först lära oss grundläggande quaternionalgebra 23 Quaternionalgebra (1) • Quaternioner bildar en icke-kommutativ grupp under multiplikation, precis som rotationsmatriserna • Addition enkelt, addera reella delarna och vektorerna var för sig • Multiplikation involverar både dot-produkt och kryssprodukt • Multiplikationsidentiteten, I, vilken uppfyller qI = Iq = q, är I = [1, (0,0,0)] • Additionsidentiteten, I, vilken uppfyller q + I = I + q = q, är I = [0, (0,0,0)] 24 Peter Sunna, [email protected] 12 Virtuell Verklighet D, VT-04 Animering av rotationer Quaternionalgebra (2) q0 ± q1 = ( w0 , v0 ) + ( w1 , v1 ) ( w0 + w1 , v0 + v1 ) q0 q1 = ( w0 + x 0 i + y 0 j + z 0 k )( w1 + x1i + y1 j + z1 k ) = ( w0 w1 − x 0 x1 − y o y1 − z 0 z1 ) ( w0 x1 − x 0 w1 − y o yz1 − z 0 y1 )i ( w0 y1 − x 0 z1 − y o w1 − z 0 x1 ) j ( w0 z1 − x0 y1 − y o x1 − z 0 w1 )k ( w0 , v0 )( w1 , v1 ) = ( w0 w1 − v0 • v1 , w0 v1 + w1v0 + v0 × v1 ) 25 Quaternionalgebra (3) • Multiplikation är endast är kommutativ om v0 x v1 = 0 (vektorerna parallella) • Multiplikation av två quaternioner utan reell del, dvs två vektorer, beräknar kryssprodukten av dessa vektorer om de är ortogonala. Detta eftersom v0 v1=0 • Multiplikation av quaternioner är både linjär och associativ p(sq + tr) = spq + tpr (s och t skalärer) (sp + tq)r = spr + tqr p(qr) = (pq)r 26 Peter Sunna, [email protected] 13 Virtuell Verklighet D, VT-04 Animering av rotationer Quaternionalgebra (4) • Quaternioner har också ett konjugat precis som komplexa tal. Konjugatet q* av en quaternion byter tecken på den imaginära delen q* = (w,v)* = (w,-v) • Normen är en annan viktig egenskap N(q) = ||q||2 = q2 = qq* = q q • En quaternions invers, q-1,beräknas enligt q-1 = q* / N(q) • Kombinera de två ekvationerna: qq-1 = qq* / N(q) = q2 / q2 = 1 q-1q = q*q / N(q) = q2 / q2 = 1 • Inversen satisfierar (q-1) -1 = q och (pq) -1 = q-1p-1 27 Rotationer med quaternioner (1) • Rotationer kan beskrivas mha enhetsquaternioner, dvs de quaternioner som har normen 1 • För att skapa en enhetsquaternion dividerar man varje komponent med normen för quaternionen • Enhetsquaternioner kan representera alla tredimensionella rotationer på ett mycket enkelt och kompakt sätt • Eftersom alla enhetsquaternioner har längd 1 kan man tänka sig att de ligger på en fyra-dimensionell hypersfär med radien 1 • Enhetsquaternionerna bildar också en icke-kommutativ grupp under multiplikation – Vid multiplikation av enhetsquaternioner är således svaret alltid en enhetsquaternion (ev avrundningsfel ej medräknade) 28 Peter Sunna, [email protected] 14 Virtuell Verklighet D, VT-04 Animering av rotationer Rotationer med quaternioner (2) 29 Rotationer med quaternioner (3) • Man kan visa att alla enhetsquaternioner, q = (w,u), kan skrivas på formen q = cos ø + u sin ø för någon vinkel ø och enhetsvektor u • En enhetsquaternion på denna form kan rotera en vector v vinkeln 2ø runt axeln u. Den roterade vectorn, v’, representerad som en quaternion utan reell del, beräknas med v’ = R(v) = qvq-1 = qvq* • Denna ekvation uppfyller kraven för en rotationsoperator – Bevarar längder, vinklar och höger-/vänsterhänt koordinatsystem - jämför rotationsmatriserna • Notera att inversen kan ersättas med konjugatet eftersom quarternionen har normen 1 30 Peter Sunna, [email protected] 15 Virtuell Verklighet D, VT-04 Animering av rotationer Rotationer med quaternioner (4) • Alltså, enhetsquaternionen q som representerar en rotation men vinkel ø, runt en rotationsaxel u = (x,y,z) är q = (cos ø/2, sin (ø/2) u) • En enhetsquaternion innehåller alltså precis samma data som ”Angle and axis” • En nollskild reell multipel av q representerar samma rotation, vilket innebär att q och –q representerar samma rotation • Inversen av q representerar rotation runt samma axel med samma storlek, men i motsatt riktning 31 Rotationer med quaternioner (5) • En av fördelarna med quaternioner är att rotationer kan kombineras med multiplikation. Detta går att visa mha quaternionalgebra Rq ( R p (v)) = q ( pvp −1 )q −1 = (qp )v(qp ) −1 = Rqp (v) 32 Peter Sunna, [email protected] 16 Virtuell Verklighet D, VT-04 Animering av rotationer Quaternion => Rotationsmatris • Rotationsmatrisen M som motsvarar en quaternion q = [w, (x,y,z)] kan beräknas till 1 − 2 y 2 − 2z 2 2 xy + 2 wz 2 xz − 2 wy M = 2 xy − 2 wz 1 − 2 x 2 − 2 z 2 2 yz + 2 wx 2 xz + 2 wy 2 yz − 2 wx 1 − 2 x 2 − 2 y 2 33 Interpolation av quaternioner (1) • Linjär interpolering (LERP) – Snabb – Rotationshastighet ej konstant • Interpolerar över den raka linjen mellan två quaternioner istället för den sfäriska bågen Lerp (q0 , q1 , u ) = q0 (1 − u ) + q1u 34 Peter Sunna, [email protected] 17 Virtuell Verklighet D, VT-04 Animering av rotationer Interpolation av quaternioner (2) • Sfärisk interpolering (SLERP) – Tidskrävande – Numerisk instabil när nära 0 (använd LERP) och när (inträffar detta?) – Jämn rotationshastighet nära 2 • Interpolerar över den sfäriska bågen Slerp (q1 , q 2 , u ) = sin(1 − u )θ sin uθ q1 + q2 sin θ sin θ cos θ = q1 • q 2 = w1 w2 + v1 • v2 35 Interpolation av quaternioner (3) • • • • • Eftersom q och –q representerar samma orientering, kan en rotation från q till p också lösas genom att interpolera från q till –p. Skillnaden är att den ena vägen är längre än den andra. För att hitta den kortaste vägen kan man beräkna dot-produkten av q och p. Eftersom detta representerar cosinus av vinkeln mellan p och q, kan man titta på dess tecken. Positiv cosinus betyder att q till p är kortast, annars är q till –p kortast. Slerp bra om man bara har två quaternioner att interpolera mellan. Har man däremot en serie orienteringar och vill interpolera mellan dessa, kommer hastiga rotationsändringar att uppträda när man byter interpolationsintervall. Högre kontinuitet kan åstadkommas genom den sfäriska motsvarigheten till kubisk ”spline” Notera att interpolation mellan quaternioner inte kan göras rakt av för kameraorienteringar. Detta eftersom kamerans uppvektor kan tiltas under interpoleringen. 36 Peter Sunna, [email protected] 18 Virtuell Verklighet D, VT-04 Animering av rotationer Rotation från en vektor till en annan • • En vanlig operation är att transformera från en riktning s till en annan riktning t Tillvägagångssätt: – Normalisera s och t – Beräkna rotationsaxel u = (s x t) / ||s x t|| – Beräkna rotationsvinkel ø • s*t = cos ø • ||s x t|| = sin ø – Vi kan nu skapa quaternionen som uför rotationen • q = (cos (ø/2), sin (ø/2)u) – Eller rotationsmatrisen som motsvarar “Axis and angle” • (ø, u) • Notera att problem uppstår om s och t är parallella eller nästan parallella, eftersom ||s x t|| då ligger nära noll. Om rotationsvinkeln är 0 kan identiteten returneras (ingen rotation). Är rotationsvinkeln istället kan vi rotera runt valfri axel. 37 Slutsatser • ”Euler angle/Fixed angle” – Användarvänligt – Konvertering till ”angle and axis” eller quaternioner för att göra interpolering möjlig • Matriser vs quaternioner – Matrismultiplikation 50% långsammare än quaternionmultiplikation – Transformera vektorer/punkter är 250% långsammare med quaternioner jämfört med matriser • Konvertering – För att få det bästa från två världar kan snabba konverteringsrutiner användas – Det går att konvertera mellan samtliga representationer, omvandling till ”Euler angle/Fixed angle” är dock inte entydigt 38 Peter Sunna, [email protected] 19 Virtuell Verklighet D, VT-04 Animering av rotationer Partikelanimering (1) • Grundidé – Simulera ett fenomen, t ex en eld, genom att skripta rörelsen och renderingen av ett stort antal partiklar – En partikel är vanligtvis en mycket liten primitiv – Ett generellt skript för alla partiklar med inbyggt slumpmässigt beteende som uppdaterar position och utseende 39 Partikelanimering (2) • Reeves fem steg för partikelanimering – Nya partiklar genereras och injiceras i systemet – Varje partikel får sina individuella attribut – Alla partiklar som har som har överträtt sin livstid tas bort – De aktiva partiklarna förflyttas enligt sina skript – De aktiva partiklarna renderas 40 Peter Sunna, [email protected] 20 Virtuell Verklighet D, VT-04 Animering av rotationer Partikelanimering (3) • • För att kontrollera antalet partiklar kan man använda sig av ett populationsskript Antalet partiklar som genereras vid en viss tidpunkt kan t ex beskrivas av N(t) = M(t) + rand(r)V(t) • • • • Där M(t) är medelantalet partiklar som ska produceras vi en viss tidpunkt, följt av ett slumpvärde med varians som också beror av tiden Tidsvariabeln gör att man kan styra ökningen alt minskningen av antalet partiklar Tidsfunktionerna kan se ut på flera olika sätt, t ex linjära, kvadratiska eller stokastiska Går också att göra populationen beroende av t ex skärmstorleken av objektet 41 Partikelanimering (4) • Individuella partikelskript används för en partikels attribut och kan innehålla följande – – – – – – Initial position Initial hastighet Initial storlek Intial genomskinlighet Form Livstid • Hastighet- och livstidsskript kan baseras på dynamik, t ex gravitation • Det är också vanligt att man har en ”form” där man placerar nyfödda partiklar, t ex en sfär 42 Peter Sunna, [email protected] 21 Virtuell Verklighet D, VT-04 Animering av rotationer Partikelanimering (5) • Reeves and Blau vidareutvecklade partikelsystemen • Istället för att partikelmodellen ständigt ändrar form, kan man göra så att de fyller upp en i förväg bestämd form • Den bestämda formen kan dock ändras, t ex i situationer som när grässtrån rör sig i vinden • Istället för att vara objekt som ständigt ändrar form, kan man se dessa partikelanimeringar som beskrivningar som kännetecknar ett objekt • Dessa objekt kan sedan kan modelleras med valfri detaljrikedom 43 Partikelanimering (6) • Associera geometrier till partiklar • Vanligt i spel för att t ex simulera en explosion med lösa delar • Hur vet vi om en partikel/geometri är synlig och hur sköter vi kollisionshanteringen? – Alla partiklar för sig • Kostsamt – utnyttjar inte alls att partiklarna har en tendens att klustra sig – Hantera partiklarna som en grupp och använd emittern för test • Effektivt • Felaktiga bedömingar – bara för att emittern inte är synlig behöver inte alla partiklar vara skymda 44 Peter Sunna, [email protected] 22