Rotationsmodi¶
Blender låter dig definiera rotationer på flera olika sätt. Var och en av dem har en rad fördelar och nackdelar; det finns inget bästa rotationsläge, eftersom var och en är lämplig för specifika fall.
I alla dessa lägen innebär positiva vinkelvärden att rotationen sker moturs, medan negativa värden innebär att rotationen sker medurs.
Även om du kan rotera element med hjälp av de globala eller lokala transformationsriktningarna är dessa axlar inte lämpliga för att definiera rotationer, eftersom effekten av var och en av dem inte kan isoleras från de andra två.
Ta till exempel tre valfria värden för X-, Y- och Z-rotation. Utför var och en av dessa med hjälp av globala eller lokala axlar. Beroende på i vilken ordning du utför dessa kommer du att få olika slutliga orienteringar. Därför behövs korrekta koordinatsystem för rotationen.
Euler-modus¶
Det axelsystem som används för att utföra Euler-rotationer är den så kallade Euler-gimbalen. En gimbal är en särskild uppsättning av tre axlar. Det speciella med detta är att axlarna har ett hierarkiskt förhållande sinsemellan: en av axlarna befinner sig högst upp i hierarkin och har en av de andra två axlarna som sitt omedelbara barn; samtidigt är denna barnaxel förälder till den återstående axeln, den som befinner sig längst ner i hierarkin.
Vilken axel som är överst, vilken i mitten och vilken längst ned beror på den aktuella Euler-gimbalen: det finns sex olika typer av gimbaler, liksom det finns sex möjliga kombinationer: XYZ, XZY, YXZ, YZX, ZXY och ZYX Euler-rotationslägen. Dessa lägen namnges med hjälp av bokstäverna i axlarna i ordning, med början från axeln längst ner i hierarkin och slutar med den översta.
Det största problemet med dessa system uppstår när de förlorar sin relativa vinkelräthet. Detta sker när axeln i mitten roterar, vilket får axeln längst ned att rotera med den. Det blir värre och värre när den nedre axeln närmar sig 90° (eller motsvarande vinklar). I så fall kommer den att förbli i linje med axeln högst upp i hierarkin. I det ögonblicket har vi just förlorat en rotationsaxel. Detta kan orsaka diskontinuerliga interpolationer vid animering. Denna speciella förlust av axel är känd som ”gimbal lock”.
Råd
Den faktiska konfigurationen av gimbalaxlarna kan ses i 3D-vyfönstret genom att aktivera Rotate-objektgizmo och ställa in det på Gimbal (från gizmos-knappen i sidhuvudet). Samtidigt bör rotationsläget ställas in på något av Euler-lägena för det aktiva objektet.
Nu kan du utföra en rotation runt axeln i mitten (t.ex. i XYZ Euler-läget är det Y-axeln) och se hur lätt det är att få en gimbal med bara två axlar. I det specifika fallet med XYZ Euler-läget med gimbal-lås kommer en rotation runt X-axeln att ha samma effekt som en rotation runt Z-axeln, vilket i praktiken innebär att inga rotationer runt X-axeln kan utföras.
En fördel med detta läge är att animationskurvorna är lätta att förstå och redigera. Särskild uppmärksamhet måste dock ägnas åt när mittaxeln närmar sig värden nära 90° (eller motsvarande vinklar).
Läge för axelvinkel¶
I detta läge kan vi definiera en axel (X, Y, Z) och en rotationsvinkel (W) runt denna axel.
Om vi definierar rotationen med hjälp av interaktiva rotationer (med rotationsgizmo) kommer värdena för X, Y och Z inte att överstiga 1,0 i absolut värde, och W kommer att ligga mellan 0 och 180 grader.
Om du vill definiera rotationer över 180° (t.ex. för att definiera flera varv) måste du redigera W-värdet direkt, men så snart du utför en interaktiv rotation kommer värdet att justeras igen. Samma sak gäller för axelvärden.
Detta system är lämpligt för element som roterar runt en fast axel, eller för att animera ett av elementen i taget (antingen axeln eller vinkeln). Problemet kan uppstå när man animerar (interpolerar) båda komponenterna samtidigt: axel och vinkel. Den resulterande effekten kanske inte blir som förväntat.
I detta rotationsläge visar Gimbal en uppsättning av tre ortogonala axlar där Z-axeln går längs den definierade rotationsaxeln, dvs. den pekar mot den riktning som definieras av (X, Y, Z)-punkten.
Axel-vinkel-systemet är fritt från gimbal-låsning, men animationskurvorna i detta läge är inte alls intuitiva när man animerar axel och vinkel samtidigt, och då är de svåra att förstå och redigera.
Quaternion-läge¶
I det här läget definieras rotationer också av fyra värden (X, Y, Z och W). X, Y och Z definierar också en axel och W en vinkel, men det görs på ett helt annat sätt än med axel-vinkel. Det viktiga här är relationen mellan alla fyra värdena.
För att beskriva det på ett intuitivt sätt, låt oss ta effekten av X-koordinaten: vad den gör är att rotera elementet runt X-axeln upp till 180 grader. Samma sak gäller för Y och Z. Effekten av W är att undvika dessa rotationer och lämna elementet med noll rotation. Den slutliga orienteringen är en kombination av dessa fyra effekter.
Eftersom förhållandet mellan komponenterna är det som definierar den slutliga orienteringen, kommer multiplikation eller division av alla fyra talen med ett konstant värde att ge exakt samma rotation.
Det här läget är perfekt för interpolering mellan valfritt par av orienteringar. Det påverkas inte av gimbal lock eller någon annan oönskad effekt av interpolering. Den enda nackdelen är att du inte kan interpolera mellan två riktningar som ligger på ett avstånd som är större än 180°, eftersom animationen kommer att ta den kortaste vägen mellan dem. För att animera ett roterande element måste du alltså skapa många mellanliggande keyframes, högst 180° från varandra.
Gizmo Gimbal i detta läge är likvärdig med Local och har ingen speciell betydelse.
Animationskurvorna i det här läget är inte intuitiva, så de är också svåra att förstå och redigera.
Mer om kvaternioner¶
Det här avsnittet är egentligen inte användbart för 3D-artister, men det kan vara lämpligt för den nyfikne eller forskaren.
Kvaternioner är ett talsystem som utökar de komplexa talen. De representerar en vektor med fyra komponenter, vars komponenter i Blender kallas X, Y, Z och W. När du roterar interaktivt i kvaternionsläge kommer den så kallade normen (längden) för kvaternionen att förbli konstant. Per definition är normen för en kvaternion lika med 1,0 (det är en normaliserad kvaternion). När du väljer quaternion-läget i Blender beskriver XYZW-komponenterna en normaliserad quaternion.
Observera
Normen för en kvaternion q definieras matematiskt som:
Men om en av kvaternionkomponenterna låses under den interaktiva transformationen med hjälp av rätt låsknapp, kommer normen inte att förbli oförändrad, eftersom den blockerade komponenten inte kan justera sig själv för att behålla enhetsnormen.
Råd
Interaktiva rotationer med gizmo ändrar inte normen för den aktuella kvaternionen. Om du redigerar en enskild XYZW-komponent individuellt kan du ändra normen. För att göra normen 1.0 igen kan du växla till valfritt rotationsläge och tillbaka igen till quaternion.
Rotationskomponenterna i en kvaternion har en nära relation till axelvinkelns komponenter. För att hitta en korrespondens måste vi först och främst hantera den normaliserade versionen av kvaternionen, det vill säga en vars norm är lika med 1,0. För att normalisera en kvaternion är det bara att dividera var och en av dess komponenter med dess norm. Som vi har sett tidigare ger det samma orientering att dividera alla fyra värdena med samma tal.
När vi har beräknat komponenterna i den normaliserade kvaternionen är förhållandet till axel-vinkelkomponenterna följande:
X, Y och Z betyder exakt samma sak som i axis-angle: de definierar bara en axel runt vilken rotationen sker.
W kan användas för att hämta den faktiska rotationen runt den definierade vinkeln. Följande formel gäller (förutsatt att kvaternionen är normaliserad): \(W = \cos(\frac{a}{2})\), där a faktiskt är den rotationsvinkel vi letar efter. Det vill säga: \(a = 2 \arccos{W}\).
Andra överväganden¶
I lägena axel-vinkel och kvaternion kan vi låsa rotationer i interaktiva lägen per komponent, istället för att göra det per axel. För att göra det kan vi aktivera den här låsningsmöjligheten med hjälp av låsknapparna bredvid motsvarande Rotation-transformknappar.
När det gäller rotationsanimationer måste alla keyframes definieras i samma rotationsläge, som måste vara det valda rotationsläget för objektet under hela animationen.