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