Innehåll Den här föreläsningen fokuserar på animering (läs interpolation) av rotationer En snabb genomgång av koordinatsystem görs för att ha kontroll på åt vilket håll vi egentligen roterar och kring vilken axel Hur rotationsmatrisen är uppbyggd friskas också upp Olika representationer för att beskriva rotationer tas upp, samt deras för- och nackdelar Slutligen ges en kort introduktion till partikelanimering eferenssystem Koordinatsystem Högerhänt/vänsterhänt Tumme/pekfinger/långfinger på höger respektive vänster hand symboliserar axlarna. För att ta sig mellan de två koordinatsystemen krävs en spegling. Axlar: höger, upp, ut X, Z, Y Open Scene Graph X, Y, Z Open GL Positiv rotation Högerhandsregeln tummen pekandes i axelns riktning (högerhänt koordinatsystem), fingrarna i positiv rotationsriktning V-miljö Många olika koordinatsystem: scengrafen, sensorerna, fysikmotorn Animering av rotationer Animering av rotationer Matriser otationsmatrisen ow major (premultiplied) Column major (postmultiplied) Notera att i det första fallet beräknas de tre dotprodukterna mellan raderna i matrisen och vektorn, och i det andra fallet mellan kolumnerna och vektorn 3 3 [ x y z] 3 x 3 y 33 z 3 3 3 3 33 Normaliserad Alla rader och kolumner har längden Ortogonal advektorerna är vinkelräta mot varandra Kolumnvektorerna är vinkelräta mot varandra Invers transponat (eftersom ortonormal) Bildar icke-kommutativ grupp under multiplikation esultatet av en multiplikation av två rotationsmatriser blir alltid en ny rotationsmatris (ev avrundningsfel ej medräknade) Animering av rotationer 3 Animering av rotationer 4 Animering av ett objekts rotation Har två rotationer, vid tidpunkt t och tidpunkt t vill bestämma objektets rotation vid en tidpunkt mellan dessa Kan ej interpolera mellan rotationsmatriser (varför inte?) Måste hitta andra metoder att representera rotationer med Euler angle, Fixed angle, Axis angle, Quartenioner Euler angle otation 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?) Exempel på rotation: x (3) y (5) z () Den slutgiltiga rotationen blir rotationsmatriserna för resp rotation multiplicerade i angiven ordning Animering av rotationer 5 Animering av rotationer 6
Fixed angle Euler angle / 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 Animering av rotationer 7 Animering av rotationer 8 Euler angle / Fixed angle () Fördelar Enkelt för en användare att förstå sig på, vanligt i modelleringsprogram Nackdelar Finns 4 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 p /, jmf t ex (, p /, a) och (-a, p/, )) Interpolering problematiskt, dels pga Gimbal lock, dels pga att det finns flera olika vägar mellan två rotationer otation runt valfri axel 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 otationer beskrivna med Angle and axis kan interpoleras, men måste göras om till rotationsmatriser för att kunna komponeras Angle and Axis Animering av rotationer 9 Animering av rotationer Exempel: rotation runt valfri axel () Antag att rotationsaxeln r är normaliserad och vi vill rotera a radianer runt r. Idé: Konstruera ny bas där r ingår Byt till denna bas otera a radianer runt x-axeln (vilken då ska motsvara r) Byt tillbaka till standardbasen Exempel: rotation runt valfri axel () Steg : 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 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 r x s Animering av rotationer Animering av rotationer
Exempel: rotation runt valfri axel (3) Exempel: rotation runt valfri axel (4) Steg (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 r M s t T T T Animering av rotationer 3 Steg 4 M T x (a)m Först transformerar vi så att r är x-axeln (mha M), sen roterar vi a radianer runt den här x- axeln (mha x (a)), slutligen transformerar vi tillbaka (mha inversen till M, dvs M T ) för att få rotationsmatrisen Animering av rotationer 4 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φ + ( - cosφ)x ( cosφ)xy + z sinφ ( cosφ) xz ysin φ ( cosφ)xy-z sinφ) cosφ + ( cosφ) y ( cosφ) yz + xsinφ ( - cosφ)xz + y sinφ ( cosφ) yz xsin φ cosφ + ( cosφ) z Interpolering Angle and axis () 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 otationsaxeln 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 Animering av rotationer 5 Animering av rotationer 6 Interpolering Angle and axis () Quaternioner otationsaxel : B A A Vinkel mellan axlar : - A A φ cos A A Mellanliggande axel : A ( B, uφ) A Mellanliggande rotationsvinkel : φ ( u) φ + uφ u u Hamilton 84-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 - 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 ) 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 Animering av rotationer 7 Animering av rotationer 8
Quaternionalgebra () 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 [, (,,)] Additionsidentiteten, I, vilken uppfyller q + I I + q q, är I [, (,,)] q ± q q q Quaternionalgebra () ( w, v ) + ( w, v ) ( w + w, v + v ) ( w w x x y y z z ) ( w x x w y yz z y ) i ( w y x z y w z x ) j ( w z x y y x z w ) k ( w + x i + y j + z k)( w + x i + y j + z k) o o o o ( w, v )( w, v ) ( ww v v, wv + wv + v v ) Animering av rotationer 9 Animering av rotationer Quaternionalgebra (3) Multiplikation är endast är kommutativ om v x v (vektorerna parallella) Multiplikation av två quaternioner utan reell del, dvs två vektorer, beräknar kryssprodukten av dessa vektorer om de är ortogonala. Detta eftersom v?v 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 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) qq* q*q v?v + w w + x + y + z En quaternions invers, q -, beräknas enligt q - q* / N(q) Inversen satisfierar (q - ) - q och (pq) - q - p - Animering av rotationer Animering av rotationer otationer med quaternioner () otationer med quaternioner () otationer kan beskrivas mha enhetsquaternioner, dvs de quaternioner som har normen 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 kan man tänka sig att de ligger på en fyradimensionell hypersfär med radien Animering av rotationer 3 Animering av rotationer 4
otationer 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 ø runt axeln u. Den roterade vectorn, v, representerad som en quaternion utan reell del, beräknas med v (v) qvq - qvq* Notera att inversen kan ersättas med konjugatet eftersom quarternionen har normen otationer med quaternioner (4) Alltså, enhetsquaternionen q som representerar en rotation men vinkel ø, runt en rotationsaxel u (x,y,z) är q (cos ø/, sin (ø/) u) En enhetsquaternion innehåller alltså precis samma data som Angle and axis Se även sambandet mellan de båda i kursboken 3D Games eal-time endering and Software Technology sid 378-38 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 Animering av rotationer 5 Animering av rotationer 6 otationer med quaternioner (5) En av fördelarna med quaternioner är att rotationer kan kombineras med multiplikation. Detta går att visa mha quaternionalgebra Quaternion > otationsmatris otationsmatrisen M som motsvarar en quaternion q [w, (x,y,z)] kan beräknas till ( q p ( v)) q( pvp ( qp) v( qp) qp ( v) ) q y z M xy wz xz + wy xy + wz x z yz wx xz wy yz + wx x y Animering av rotationer 7 Animering av rotationer 8 Interpolation av quaternioner () Linjär interpolering (LEP) Snabb otationshastighet ej konstant Interpolerar över den raka linjen mellan två quaternioner istället för den sfäriska bågen Lerp( q, q, u) q( u) + qu Interpolation av quaternioner () Sfärisk interpolering (SLEP) Tidskrävande Numerisk instabil när? nära (använd LEP) och när? nära p (inträffar detta?) Jämn rotationshastighet Interpolerar över den sfäriska bågen sin( u) θ sin uθ Slerp( q, q, u) q + q sinθ sinθ cosθ q q w w + v v Animering av rotationer 9 Animering av rotationer 3
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. otation 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 (ø/), sin (ø/)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 kan identiteten returneras (ingen rotation). Är rotationsvinkeln istället p kan vi rotera runt valfri axel. Animering av rotationer 3 Animering av rotationer 3 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 5% långsammare än quaternionmultiplikation Transformera vektorer/punkter är 5% 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 Partikelanimering () 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 Animering av rotationer 33 Animering av rotationer 34 Partikelanimering () eeves fem steg för partikelanimering Nya partiklar genereras och injeceras 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 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 Animering av rotationer 35 Animering av rotationer 36
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 Partikelanimering (5) eeves and Blau vidareutvecklade partikelsystemen Istället för att partikellmodellen 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 Animering av rotationer 37 Animering av rotationer 38 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 Animering av rotationer 39