Sunteți pe pagina 1din 17

ANIMAŢIA ROTAŢIILOR

Animaţia rotaţiilor reprezintă unul dintre cele mai dificile aspecte ale animaţiei. Această
problemă îşi are rădăcini în matematica rotaţiilor. Ordinea în care cele trei rotaţii axiale (în jurul axei
X, în jurul axei Y şi în jurul axei Z) sunt realizate conduc la diferenţe considerabile în ceea ce
priveşte rezultatul. Pe de altă parte, ordinea rotaţiilor poate produce fenomenul cunoscut sub
denumire de “blocare cardanică”, când rotaţiile în jurul a două axe diferite devin identice.

Controllerul Euler XYZ


Controllerul Euler XYZ reprezintă un controller de rotaţie tradiţional, al cărui mod de lucru este
uşor de înţeles. Acest controller conţine trei ramuri corespunzătoare fiecărei rotaţii după cele trei
axe, şi anume: X Rotation, Y Rotation şi Z Rotation, ceea ce îl face similar cu controllerul
Position XYZ. Fiecare dintre cele trei ramuri poate avea propriile sale chei, iar fiecare are o curbă
funcţională editabilă. Dacă în fereastra Track View se creează o cheie în ramura “părinte”, toate cele
trei ramurile descendente vor primi chei.
Dezavantajele utilizării unei abordări convenţionale a rotaţiilor constau însă în particularităţile
introduse de ordinea în care cele trei rotaţii sunt aplicate (ordine ce poate fi modificată cu ajutorul
butonului Rotation din caseta derulantă PRS Parameters a panoului Motion) şi în lipsa unei
corespondenţe între numele ramurii de rotaţie şi punctul pivot al obiectului. Există situaţii în care,
spre exemplu, ajustarea curbei funcţionale Y Rotation conduce la rotaţia obiectului în jurul axei Z.
EXEMPLU: CONTROLLERUL EULER XYZ

1. Creaţi un paralelipiped într-o configuraţie de două viewporturi. Top şi Front.


2. Deschideţi fereastra Track View, afişaţi numele tipurilor de controllere şi modificaţi controllerul
Rotation într-unul de tip Euler XYZ. În ramura Y Rotation, creaţi două chei, la cadrul 0 şi 100.
Setaţi valoarea celei de a doua chei la 720 de grade. Rulaţi animaţia pentru a confirma faptul că
paralelipipedul execută două rotaţii complete cu o viteză constantă.

Curba funcţională pentru setarea rotaţiei în jurul axei Y


Crearea de accelerări şi încetiniri prin ajustarea tangentelor Bezier
3. Modificaţi tipul interpolării Bezier, pentru ambele chei, şi ajustaţi tangentele pentru a obţine o
curbă lină la intrare şi ieşire. Rulaţi animaţia pentru a vizualiza accelerarea şi încetinirea
paralelipipedului; această animaţie sugerează că paralelipipedul are masă fizică.
4. În continuare vom face paralelipipedul să se rotească înainte şi înapoi. Pentru aceasta setaţi cheia
de la cadrul 100 la valoarea 0 grade şi adăugaţi o nouă cheie la cadrul 50. Setaţi valoarea noii chei
la 360 de grade. Rulaţi animaţia.

Paralelipipedul se roteşte înainte şi înapoi cu câte 360 de grade


5. În final vom provoca o oprire a paralelipipedului pe timpul a 10 cadre. Deplasaţi cea de a doua
cheie la cadrul 45 şi creaţi o nouă cheie la cadrul 55. Setaţi noua cheie la valoarea 360 de grade,
aceeaşi valoare ca a chei precedente. Curba afişată arată destul de bine, dar există o mică
problemă de interpolare spline. Deplasaţi glisorul cadrelor de animaţie Time Slider şi veţi
observa o uşoară derivă a obiectului pe durata cadrelor când acesta ar trebui să fie fix. Modificaţi
interpolarea dintre cele două chei astfel încât aceasta să devină liniară, iar problema se va rezolva.

Paralelipipedul se opreşte pe parcursul a 10 cadre, înainte de a începe rotirea înapoi


REALIZAREA ANIMAŢIILOR CU AJUTORUL EXPRESIILOR

Expresiile sunt mici unităţi de programare cod, care definesc parametrii de animare în funcţie
de alţi parametri sau de timpul curent al scenei. La fiecare cadru, expresia este evaluată pentru a
obţine o nouă valoare.

Expresii pentru realizarea animaţiilor independente

Cea mai importantă utilizare a expresiilor se regăseşte în crearea animaţiilor independente, în


care animaţia unui obiect sau parametru controlează în mod automat animaţia altui obiect sau
parametru. Domeniul de aplicabilitate pentru un astfel de concept este practic nelimitat. Spre
exemplu, se poate scrie o expresie, cu ajutorul căreia, roţile unei maşini să se rotească cu valoarea
corectă, la parcurgerea unei anumite distanţe. Controllerele de tip Expression pot fi combinate cu
controllere obişnuite, care folosesc cadre cheie, în cadrul unui controller List.
EXEMPLU: MODELAREA UNUI SISTEM DE ROŢI DINŢATE
REALIZAREA ROŢILOR DINŢATE
Pentru a modela în mod corect un sistem de roţi dinţate aflate în angrenare, numerele de dinţi
ale acestora trebuie setate la valori proporţionale cu razele roţilor. Astfel dacă o roată este de două
ori mai mare ca o altă roată, aceasta trebuie să aibă de două ori mai mulţi dinţi. Mărimea dinţilor
trebuie să fie aceeaşi pentru toate roţile, în caz contrar acestea nu vor angrena în mod corect.
1. Creaţi un cilindru (Cylinder) în viewportul Front, cu raza (Radius) de 20 şi înălţimea (Height) de
–10. Stabiliţi parametrii Height Segments la 1 şi Sides la 20. Convertiţi acest obiect în Editable
Mesh.
2. Selectaţi în mod alternativ poligoanele dreptunghiulare ale marginii obiectului (în total 10) şi
extrudaţi-le cu 5 unităţi (Extrude). Apoi, aplicaţi o uşoară înclinare negativă (Bevel) pentru a
înclina dinţii spre interior.

Roata cu 10 dinţi este modelată dintr-un obiect de tip Cylinder, Editable Mesh
3. Creaţi o a doua roată dinţată, în aceeaşi manieră, setând valorile pentru rază (Radius) de 30 şi
Sides de 30. Extrudaţi (Extrude) în afară cele 15 poligoane cu 5 unităţi şi daţi-le o înclinare
(Bevel) de aceeaşi valoare ca în etapa precedentă. Poziţionaţi cea de a doua roată astfel încât să se
potrivească cu prima, după cum este prezentat în figură. Nu rotiţi cea de a doua roată când o
aliniaţi.

Cea de a doua roată a fost adăugată, aceasta având dimensiunile de 1.5 ori mai mari şi tot de atâtea
ori mai mulţi dinţi
4. Creaţi a treia roată, mult mai mică, cu raza (Radius) de 10 şi Sides 10. Extrudaţi în afară 5 dinţi
alternanţi şi înclinaţi-i ca în etapele precedente. Rotiţi această roată cu 90 de grade, astfel încât să
devină paralelă cu planul de bază; apoi, aliniaţi-o cu grijă, să se potrivească cu partea inferioară a
celei de a doua roţi. Sistemul de roţi ar trebui să arate ca cel prezentat în figură.

Cea de a treia roată mult mai mică a fost adăugată astfel încât să angreneze cu cea de a doua

STABILIREA EXPRESIILOR

În continuare, prima roată va fi animată în mod tradiţional iar celorlalte două roţi le vor fi
atribuite expresii care să le cauzeze rotaţia în concordanţă cu prima roată.
5. Primul pas constă în stabilirea controllerului de rotaţie pentru prima roată. Deschideţi (Open)
Track View şi utilizaţi fereastra de dialog Filters pentru a afişa tipurile de controllere. Expandaţi
ramura obiectului Cylinder01 şi schimbaţi controllerul de rotaţie în Euler XYZ.
6. Expandaţi ramura pentru cea de a doua roată dinţată, Cylinder02 şi modificaţi încă o dată
controllerul de rotaţie în Euler XYZ. Această roată se va roti în jurul axei Y a sistemului
universal de coordonate, deci deschideţi ramura Y Rotation şi modificaţi controllerul din Bezier
Float în Float Expression. Această ramură va folosi o expresie care să producă o “valoare
animată”.

Caseta Track View; atribuirea controllerelor de rotaţie Euler XYZ


7. Executaţi clic-dreapta pe bara domeniului (Range Bar) pentru a deschide caseta de dialog
Expression Controller, prezentată în figură. Expresia care este evaluată la fiecare cadru este
scrisă în fereastra Expression. Cea mai simplă expresie posibilă este o valoare. Pentru a cauza
însă un “rezultat animat”, în care valoarea expresiei să se poată modifica de la un cadru la altul,
este necesară crearea unei variabile în expresie. Odată cu modificarea valorii variabilei, valoarea
expresiei se va modifica corespunzător.

Caseta de dialog Expression Controller; expresia care se evaluează la fiecare cadru se scrie în
fereastra Expression; variabilele sunt create în partea stângă a panoului
8. Variabila de care avem nevoie este valoarea curentă a rotaţiei pe Y a primei roţi. La modificarea
acestei valori, expresia care defineşte rotaţia pe Y a celei de a doua roţi se va modifica de
asemenea. Pentru a crea o variabilă, tastaţi numele “yrot” (pentru rotaţie pe Y) în dreptul câmpului
Name. Înainte de a activa butonul Create pentru confirmare, trebuie stabilit dacă variabila este un
vector sau un scalar. Deoarece, rotaţia pe Y este un singur număr, se va alege opţiunea Scalar.
Dacă s-ar fi creat o variabilă de poziţie corespunzătoare unui controller Bezier Position, care
utilizează o valoare (X,Y,Z), trebuia folosită opţiunea Vector. Executaţi clic pe butonul Create
pentru a crea o variabilă şi remarcaţi că numele acesteia apare în lista de variabile scalare.
9. În această etapă, s-a creat o variabilă, dar nu se ştie de unde să luăm valoarea acesteia. Pentru a
asocia această variabilă valorii rotaţiei pe Y a primei roţi, executaţi clic pe butonul Assign To
Controller. În urma acestei acţiuni apare o fereastră de dialog, care este ca o versiune în
miniatură a ferestrei Track View (figura). Expandaţi arborele Cylinder01 şi selectaţi Y Rotation.
Clic pe butonul OK. Fereastra de dialog Expression Controller va indica faptul că variabila yrot
a fost atribuită rotaţiei pe Y a obiectului Cylinder01 (Cylinder01\Y Rotation).

Asocierea variabilei la controllerul de rotaţie pe Y al primei roţi dinţate


Crearea variabilei scalare “yrot” (pentru rotaţia pe Y); variabila conţine valoarea curentă a
rotaţiei pe Y a primei roţi
10. În acest moment, se poate folosi variabila în expresie. Tastaţi cuvântul “yrot” în fereastra
Expression (peste 0). Valoarea rotaţiei pe Y a celei de a doua roţi este acum determinată de
valoarea rotaţiei pe Y a primei roţi. Clic pe butonul Close pentru a închide fereastra de dialog.
11. Pentru a realiza animaţia primei roţi, expandaţi ramura Y Rotation pentru Cylinder01 din
fereastra Track View şi creaţi două chei, una la cadrul 0 şi alta la cadrul 100. Valoarea primei chei
trebuie să rămână 0, dar modificaţi valoarea celei de a doua chei la 360 de grade. În acest fel se va
produce o rotaţie completă a primei roţi.
12. Animaţi scena realizată. Prima roată se roteşte corect, iar cea de a doua roată se roteşte de
asemenea, dar nu corect. În primul rând, rotaţia acesteia are acelaşi sens ca prima roată, în timp ce
ar trebui să se rotească în sens contrar. În al doilea rând, se roteşte cu aceeaşi viteză ca prima
roată. Deoarece cea de a doua roată este de 1.5 ori mai mare decât prima, aceasta trebuie să se
rotească mai încet. Deschideţi fereastra de dialog Expression Controller şi modificaţi expresia cu
“-.666*yrot” (figura). În acest moment primele două roţi angrenează corect.

Utilizarea operatorului negativ pentru cea de a doua roată cauzează rotaţia acesteia în sens invers
primei roţi; expresia ţine cont şi de faptul că cea de a doua roată este de 1.5 ori mai mare, deci se
roteşte cu o viteză de 2/3 din valoare vitezei primei roţi
ANIMAŢIA CELEI DE A TREIA ROŢI

Aplicarea rotirii celei de a treia roţi se face ţinând cont de faptul că aceasta se roteşte după o
direcţie diferită de primele două; modul de realizare a animaţiei rămâne însă acelaşi.
13. Expandaţi ramurile pentru obiectul Cylinder03, cea de a treia roată, şi atribuiţi un controller
Euler XYZ ramurii de rotaţie. De această dată, dorim ca ramura Z Rotation a celei de a treia roţi
să fie controlată de ramura Y Rotation a primei roţi. Atribuiţi un controller Float Expression
pentru ramura Z Rotation a obiectului Cylinder03.
14. Deschideţi fereastra de dialog Expression Controller şi creaţi o variabilă denumită “yrot”.
Utilizaţi acelaşi nume ca în etapele precedente deoarece este exact aceeaşi variabilă – valoarea
rotaţiei pe Y a primei roţi – chiar dacă este utilizată pentru determinarea rotaţiei pe Z a celei de a
treia roţi. Atribuiţi variabila ramurii Y Rotation a obiectului Cylinder01, exact cum aţi procedat la
cea de a doua roată.
15. În acest stadiu, se poate scrie expresia “-2*yrot”, după cum se poate observa în figură. Această
expresie comunică controllerului să multiplice valoarea rotaţiei pe Y a primei roţi cu 2, deoarece
cea de a treia roată este de 2 ori mai mică decât prima şi să o rotească în sens contrar.
16. Închideţi fereastra de dialog şi animaţi scena.
Expresia pentru cea de a treia roată utilizează valoarea rotaţiei pe Y a primei roţi şi ţine cont de
faptul că aceasta este de 2 ori mai mică decât prima roată (respectiv are o viteză de 2 ori mai mare)
17. În încheiere vă propunem un exerciţiu suplimentar. Reveniţi la ramura Y Rotation a primei
roţi. Analizaţi curba funcţională de animaţie şi editaţi-o. Adăugaţi chei şi faceţi roata să se
rotească înainte şi înapoi. Rulaţi animaţia; toate celelalte roţi urmăresc mişcarea primei roţi în
mod automat.