This shows you the differences between two versions of the page.
|
vdvac:lab7 [2026/05/14 11:15] anca.morar |
vdvac:lab7 [2026/05/14 11:35] (current) anca.morar [Inverse kinematics cu algoritmul Fabrik] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Laboratorul 7 ====== | ====== Laboratorul 7 ====== | ||
| - | ===== Animația prin plasă poligonală ===== | + | ===== Inverse kinematics cu algoritmul Fabrik ===== |
| - | * Plasa poligonala (mesh) a fost prima metoda de reprezentare a personajelor , direct inspirata din tehnicile de animatie folosite in plan | + | **Forward And Backward Reaching Inverse Kinematics (FABRIK)** |
| - | * Personajul este reprezentat printr o plasa poligonala 3D | + | * abordare iterativa care rezolvă problema IK |
| - | * Animatia personajului consta in deformarea plasei, fiecarui cadru imagine corespunzandu-i o “poza” (ipostaza) a personajului | + | * determină parametrii articulatiilor astfel incat un end effector al structurii articulate sa ajunga intr-o pozitie dorita (target) |
| - | * Numarul de varfuri ale plasei si conectivitatea lor nu se modifica de la o poza la alta , ci doar pozitiile varfurilor | + | |
| - | * De regula , animatorul defineste doar un numar de «poze cheie», restul pozelor fiind obtinute prin interpolarea intre pozele cheie | + | |
| - | **Avantajul metodei** | + | **Structura articulata** |
| - | * Animatorul poate decide cat de apropiat de realitate sa fie modelul personajului. Teoretic, cu suficiente poligoane se poate obtine orice | + | * Legăturile reprezintă obiectele rigide din care este alcătuită structura, ex. oasele. |
| + | * Punctele de joncțiune reprezintă articulațiile prin care sunt conectate obiectele rigide | ||
| + | * Structura ierarhică se reprezintă printr-un arbore, în care: | ||
| + | * nodurile reprezintă legăturile | ||
| + | * arcele reprezintă joncțiunile | ||
| + | * Lanț = secvență de legături și joncțiuni | ||
| + | * End effector = joncțiune fără copii (capătul unui nod frunză) | ||
| - | **Dezavantajele metodei** | + | **Algoritm** |
| - | * Trebuie creat cate un model 3D (poza) pentru fiecare cadru cheie | + | * Date de intrare: |
| - | * Consumul de memorie creste odata cu numarul de poligoane ale modelului | + | * pozițiile joncțiunilor $p_i$ cu $i = 0 .. n-1$ |
| - | * Pozele din cadrele cheie trebuie sa fie foarte apropiate pentru a se obtine rezultate bune | + | * poziția dorită (target) $t$ |
| - | * Animatiile produse sunt greu de refolosit , ceea ce duce la costuri mari | + | * distanțele dintre fiecare două joncțiuni (lungimea fiecărei legături): $d_i = |p_{i+1}-p_i|$ cu $i = 0 .. n-2$ |
| - | * Calitatea animatiei depinde de inspiratia si talentul animatorului. Spre deosebire de o animatie 2D, o animatie 3D este mult mai greu de conceput: trebuie sa arate cat mai natural din orice pozitie 3D ar fi privita | + | * dacă $|p_0 - t | > d_0 + d_1 + ... + d_{n-2}$ (target-ul nu poate fi atins) atunci |
| + | * se găsește vectorul $(t - p_0)$ și se determină poziția relativă a fiecărei joncțiuni de-a lungul vectorului (se întinde întreg lanțul în direcția punctului țintă) | ||
| + | * altfel (target-ul poate fi atins) | ||
| + | * se calculează distanța dintre end effector și target $diff = |p_{n-1} - t |$ | ||
| + | * cat timp ($diff > prag) | ||
| + | * executa iteratia forward | ||
| + | * executa iteratia backward | ||