Tutorial Armature, ossa e loro animazioni in Blender 2.5 - Puntata 5 di 5: constraints (vincoli) e IK (Inverse Kinematics, Cinematica inversa)
Links alle puntate di questa serie : 1 - 2 - 3 - 4 - 5
* * *
NOTA: clicca qui per vedere la versione VIDEO di questo tutorial
* * *
Questo è il quinto ed ultimo tutorial del ciclo dedicato alle armature e alle loro animazioni in Blender 2.5. In questa puntata parleremo un po' dei Constraints, i vincoli.
I constraints (termine tradotto in italiano con “vincoli”, di solito) sono caratteristiche degli oggetti, siano essi mesh o ossa. Esistono constraints propri delle mesh, constraints propri delle ossa e constraints comuni ai due tipi.
Per questa panoramica utilizzeremo l'armatura visibile nell'immagine qui sotto, composta da due ossa uguali, non legate tra loro. Per inserire un vincolo Constraint per l'osso selezionato in Pose Mode, apriamo la scheda Bone Constraints nella Properties Windows e clicchiamo sul menù Add Constraint.


Sono presenti diverse voci, suddivise per categorie; noi prenderemo in esame quelle principali, iniziando con Copy Location.
Copy Location serve, intuitivamente, ad assegnare una posizione ad un osso in base alla posizione di un altro osso, detto osso Target, bersaglio.

La copia può essere fatta in riferimento sia allo spazio locale che globale del target e dell'osso provvisto di tale Constraint, con tutte le possibili combinazioni di tali valori.
E' possibile scegliere, poi, quale coordinata vincolare, ossia X, Y, Z o una loro combinazione; selezionando inoltre il pulsante col segno -, la copia sarà invertita.
L'osso target non è identificato da un unico punto, ma dalla classica struttura dell'osso, per cui dobbiamo decidere quale punto prendere come riferimento per effettuare la copia: inserendo il valore 0 in Head-Tail, prenderemo come punto di riferimento la testa, la radice dell'osso, mentre con 1 la coda; a valori intermedi corrisponderanno posizioni intermedie tra testa e coda.
Copy Rotation fa per le rotazioni delle ossa quello che Copy Location fa per le posizioni: in base ad un osso di riferimento, detto osso Target, modifica l'orientamento dell'osso provvisto di tale Constraint. Anche qui sono presenti XYZ, con lo stesso significato che hanno in Copy Location.

Utilizzando l'opzione Local anziché Global, verrà copiata l'entità della rotazione, non l'orientamento generale dell'osso nella scena 3D.
Copy Scale è come Copy Location e Rotation, ma per lo scaling, il ridimensionamento di un osso... anche qui abbiamo il concetto di Target e XYZ, ma non quello di trasformazione locale o globale, perchè lo scaling è, in un certo senso, sempre locale; anzi, tutte le ossa hanno sempre la stessa dimensione, ossia 1,1,1, quando sono nella loro rest position: non importa se un osso è lungo il doppio di un altro, le sue dimensioni in posizione di riposo saranno sempre 1,1,1.

Limit Distance serve a posizionare un osso entro, oltre o ad una distanza esatta da un altro osso, l'osso Target. Il valore della distanza va inserito in Distance, da considerare come il raggio di una sfera centrata nell'osso Target.

Scegliendo per Clamp Region la voce Inside, l'osso provvisto di tale Constraint potrà muoversi soltanto all'interno della regione definita dal vincolo, mentre con Outside dovrà mantenersi, per così dire, ad una distanza minima dall'osso target (distanza espressa sempre mediante il campo Distance) e con l'opzione On Surface, per finire, potrà muoversi solo sulla superficie di questa ipotetica sfera centrata nell'osso target e avente raggio uguale al valore inserito in Distance.
Limit Location serve per confinare un osso all'interno di una certa regione di spazio, non necessariamente un parallelepipedo: anche una retta o una superficie o, ancora, un punto limite... il tutto dipende da quale casella, tra Min X, Min Y, Min Z e i relativi Max, selezioneremo, anche nessuna o tutte, e dai valori che inseriremo per ciascuna casella.

Limit Rotation e Limit Scale fanno per le rotazioni e per lo scaling quello che Limit Location fa per la posizione: limitano le trasformazioni; nel caso di Limit Rotation, è possibile inserire dei valori Min e Max per la rotazione intorno a ciascuno dei tre assi di rotazione, X, Y e Z, mentre nel caso di Limit Scale questo discorso varrà per il ridimensionamento dell'oggetto su ciascun asse.


E' interessante notare che, quando uno dei Constraint è attivo (ad esempio, Limit Location, ma il discorso vale in generale), Blender non visualizza l'effetto se andiamo “fuori scala”, per così dire, ad esempio se spostiamo un osso al di là dei limiti imposti da Limit Location, ma memorizza internamente i valori della trasformazione, trasformazione che verrà applicata istantaneamente se decideremo di eliminare il Constraint che la limitava.
TRACK TO consente di far puntare ad un osso un oggetto, sia esso un altro osso dell'armatura che una mesh a parte, ad esempio un cubo che si sposta nello spazio 3D.

In Track To dovremo decidere, per ciascuna applicazione del Constraint, quale asse influenzare, cioè per quale direzione effettuare il “puntamento”, per così dire, e se svolgere il tutto in coordinate globali o locali, sia per il target che per l'osso provvisto di tale Constraint.
Qualora decidessimo di far seguire ad un osso una mesh, poi, dovremo anche specificare un vertex group della mesh (eventualmente, creandone uno ad hoc, se non presente).
STRETCH TO è molto simile a Track To, con la differenza che qui l'osso viene deformato in lunghezza, a seconda della distanza presente, nel corso dell'animazione, tra se stesso e l'oggetto puntato.

ACTION serve per “mappare”, per applicare un'azione (definita anche per oggetti esterni) ad un canale di trasformazione (cioè posizione, rotazione e scaling, per ciascun asse X, Y o Z) dell'osso, per un certo lasso di tempo definito mediante i campi Start ed End di Action Length.

CHILD OF lega un osso ad un altro oggetto, anche una mesh a parte (che però dovrà essere provvista di almeno un Vertex Group, da creare eventualmente per questo scopo).

Si tratta del Constraint da utilizzare per far sì che l'osso si comporti esattamente come l'oggetto target, ossia si sposti, ruoti e si ridimensioni in maniera locale seguendo le trasformazioni di un altro oggetto.
FLOOR serve per considerare degli oggetti mesh di tipo Planes come vincoli, ad esempio per creare soffitti, pavimenti o muri. L'oggetto Plane deve avere almeno un Vertex Group, per cui eventualmente bisognerà crearne uno per l'occasione.

L'opzione Sticky è quella che consente di implementare meglio un pavimento, o meglio un ciclo di camminata lungo un pavimento, perchè rende l'oggetto immobile quando tocca il piano.
Per analizzare il Constraint Inverse Kinematics, ossia cinematica inversa, cancelliamo questa armatura dalla scena ed aggiungiamone una nuova, creando, a partire dal primo osso, un altro osso per estrusione e da questo un terzo osso, realizzando quindi una catena, come per le ossa del braccio o della gamba, ad esempio.

Applichiamo questo Constraint all'ultimo osso creato.
Aggiungendo un Constraint di questo tipo ad un osso, tale osso -e i suoi genitori, lungo la catena- diventeranno parte della simulazione IK, una simulazione dove una trasformazione effettuata su un osso, ad esempio una rotazione, non ha effetti solo sull'osso, ma sulla sua catena.
Si tratta di simulazioni utili per realizzare animazioni, ad esempio, delle gambe.

Come Target, impostiamo l'armatura che contiene l'osso; a questo punto dovremo inserire anche il nome dell'osso target, che generalmente è l'osso stesso, ma può anche essere un altro osso, dipende dai casi... vi consiglio di fare varie prove per valutare i vari effetti.
Chain Length, ossia lunghezza della catena, di default ha valore 0, il che non significa che nessun osso fa parte della catena, anzi: significa che tutta la catena di ossa fa parte della catena IK, cosa che non sempre va bene (visto che, ad esempio, se dobbiamo alzare una mano non dobbiamo necessariamente girare la testa), per cui è meglio impostare un valore numerico maggiore di 0.
In genere l'osso è collegato al capostipite della catena con una linea tratteggiata che parte dalla coda dell'osso, ma possiamo impostare il collegamento per la testa deselezionando la casella Tail.
Selezionando Rotation, la simulazione della cinematica inversa terrà conto anche della rotazione delle ossa.

Per questa puntata -e per questa serie di tutorial- è tutto.
Bye ! ;-)
|