fbpx

7.1 – Dinamica Fisica – Rigid Body

Nella prima metà della guida abbiamo esaminato una serie di strumenti utili ad aumentare la precisione e la qualità del rendering in modo da spingerci alle soglie del fotorealismo. Inoltrandoci nei meccanismi dell’animazione potremmo di conseguenza desiderare un analogo realismo anche per ciò che concerne il moto degli oggetti. Se ad esempio volessimo realizzare l’animazione di una palla di bowling che investe dei birilli, non sarebbe conveniente ricercare tutto l’insieme di keyframe e interpolazioni necessarie a rendere approssimativamente verosimile la sequenza. Blender mette a disposizione gli strumenti adatti a simulare la dinamica fisica per diverse tipologie di corpi e sistemi, fino al grado di precisione da noi desiderato. Il caso del bowling rientra nella dinamica dei corpi rigidi, chiamati così poiché essi mantengono inalterata la propria struttura geometrica indipendentemente dal moto e dagli urti. Se invece dovessimo rappresentare una sfera sgonfia che si deforma urtando altri corpi? In quel caso ricorreremo ai Soft Body. Se ci interessasse simulare il comportamento di una bandiera, di un foglio di carta o di un vestito? Abbiamo la possibilità di adottare lo strumento Cloth.

Cominciamo dunque a familiarizzare con la fisica dei rigid body osservando il cubo (ruotato come nell’immagine in alto) cadere su di piano per effetto della gravità. L’accelerazione di Gravità diretta lungo l’asse Z (global) è l’unica che in questo esempio agirà sul cubo; la sua intensità è definita nel contesto properties Scene, icona

Selezioniamo il piano e rechiamoci nel contesto properties Physics, icona

Per il piano limitiamoci ad attivare (cliccando sopra il relativo pulsante) la dinamica Rigid Body.

Dato che il piano dovrà restare immobile per fare da “pavimento” e non cadere nel vuoto a causa della forza di gravità, modifichiamo la prima voce in alto da Active a Passive, con questa scelta molte delle precedenti opzioni spariranno. Compiamo le stesse identiche operazioni sul nostro cubo, lasciando però attiva la dinamica rigid body e tutte le impostazioni di default. A questo punto cliccando Play nella timeline (barra spaziatrice) vedremo il cubo cadere in funzione dell’attrazione gravitazionale. Avendo ruotato la mesh in modo da farla impattare su un proprio spigolo, l’animazione calcolata in tempo reale da Blender sarà tale da convincerci che solo con molta difficoltà e pazienza avremmo potuto ottenere un simile risultato tramite l’uso di keyframe. Vediamo allora cosa è successo alla timeline dopo che Blender ha calcolato la nostra animazione.

Come potete vedere è apparsa una linea arancione sotto l’intero range dei fotogrammi. Ciò significa che Blender ha calcolato e memorizzato in una cache i movimenti di tutti i corpi dotati di dinamica fisica. Se la scena fosse molto complessa, e i calcoli del motore fisico piuttosto pesanti, si dovrebbe attendere solo una volta il tempo necessario a memorizzare tutti i dati, per infine vedere l’animazione precalcolata svolgersi al frame rate da noi impostato (a meno che la rappresentazione grafica nell’anteprima non sia anch’essa abbastanza pesante da determinare una certa lentezza). Chiaramente cambiando le condizioni iniziali, come ad esempio spostando il cubo, Blender al successivo riavvio dell’animazione ricalcolerà l’intera dinamica della scena. La cache dati per il rigid body è situata nel del contesto Scene dove troviamo il pannello Rigid Body World: un insieme di opzioni relative all’omonima collection RigidBodyWorld che include automaticamente tutti i corpi a cui abbiamo assegnato tale dinamica.

Vedremo nel dettaglio il semplice funzionamento della Cache studiando i Soft Body e Cloth per i quali la mole di calcoli è decisamente superiore rispetto alle animazioni che coinvolgono unicamente dei corpi rigidi. Non è detto che l’animazione fisica in Blender restituisca fin da subito il risultato sperato, potrebbe infatti capitare di osservare un comportamento completamente sbagliato, impreciso e ricco di errori. Questo perché in base al tipo di scena da animare sarà necessario regolare in modo adeguato i vari parametri ed eventualmente affinare anche la precisione del calcolo. La via maestra rimane dunque anche in questo caso il trial and error e l’accumulo di esperienza nello sperimentare situazioni diverse. Per aumentare la precisione del calcolo rechiamoci al pannello Setting dove troviamo i valori Substeps Per Frame (0 -1000) e Solver Iterations (10 – 100) da aumentare per una maggiore precisione. Molto interessante è il parametro Speed (situato nello stesso pannello) che serve ad accelerare o rallentare la simulazione, anche in modo dinamico, ricorrendo ai keyframe. Possiamo ad esempio rallentare l’azione (fino a fermarla) in un momento “topico” simulando il suggestivo effetto del “Bullet Time” (magari aumentando la precisione del calcolo proprio in quello specifico frangente).

Approfondiamo ora gli importanti fenomeni fisici di elasticità e attrito dei corpi rigidi. Come avrete visto dal primo esempio di dinamica fisica del cubo, esso non ha rimbalzato sul piano ma si è semplicemente assestato poggiandosi su una delle sue facce. Nelle opzioni della dinamica rigid body (contesto properties Physics) pannello Rigid Body > Surface Response troviamo i due parametri Friction (di default a 0.5) e Bounciness (di default a 0), quest’ultimo è legato proprio all’elasticità.

Tuttavia anche impostando al massimo tale parametro, il risultato dell’animazione non muterà. Infatti per ottenere un cambiamento è necessario alzare il Bounciness anche per il piano, cioè per entrambe le due superfici collidenti. Impostando tali valori a 1, noterete che il cubo tenderà a rimbalzare e a non stabilizzarsi completamente se non dopo parecchi frames (specie se tenderà a rimbalzare sui propri spigoli). Se oltre a ciò impostassimo friction a 0 per entrambi i corpi, il moto del cubo potrebbe non arrestarsi all’interno del range di fotogrammi. Perché accade ciò? Il motivo è dato dal fatto che Friction e Bounciness regolano il comportamento delle collisioni tra oggetti, inclusa la dissipazione di quella che è l’energia cinetica di un corpo in movimento. Nella realtà durante le collisioni tra corpi avviene sempre una trasformazione dell’originale energia cinetica in altre forme di energia non meccanica come ad esempio il calore; in pratica si tratta di quel fenomeno che impedisce l’esistenza del moto perpetuo. Una delle cause che determina la dissipazione dell’energia cinetica dei corpi è l’attrito tra due superfici; andiamo subito a verificare quanto appena detto con un esempio pratico (potrete utilizzare Blender come un piccolo laboratorio virtuale di fisica). Partiamo dalla primitiva UV Sphere con dinamica rigid body, pronta a cadere su un piano inclinato.

Al piano assegniamo nuovamente una dinamica rigid body di tipo passive, mentre per la sfera di tipo active. Anche in questo caso i valori di default per Friction e Bounciness restituiscono il comportamento realistico di un corpo rigido a forma sferica, che dopo aver impattato rotolerà sul piano per infine cadere nel vuoto. Ora cambiamo qualche impostazione della sfera azzerando friction e scegliendo Sphere alla voce Shape del pannello Rigid Body > Collisions.

In questo modo la nostra sfera, dopo aver colpito il piano, anziché rotolare scivolerà su esso. Infatti il movimento di roto-traslazione di una sfera lungo un piano inclinato avviene proprio a causa del fenomeno dell’attrito, a sua volta generato dall’interazione tra due differenti superfici. Perché dunque in Rigid Body>Collisions, alla voce Shape (forma) abbiamo inserito Sphere? Il motore fisico di Blender ha diversi modi di considerare la forma dell’oggetto durante una collisione:

  • Mesh, il motore fisico di Blender calcola le collisioni in funzione dell’esatta struttura poligonale dell’oggetto.
  • Convex Hull è un’approssimazione della forma originale ottenuta con pochi poligoni.
  • Cone, Cylinder, Sphere e Box, esattamente quel che dicono i nomi stessi.

Scegliendo sphere non avrà dunque importanza il livello di dettaglio della UV Sphere, in quanto il motore fisico di Blender considera l’oggetto come una sfera perfettamente curva. Infatti per qualsiasi altra scelta la sfera non sarebbe scivolata lungo il piano, nonostante il parametro nullo di friction, poiché geometricamente non “liscia”, ma costituita da un insieme discreto di singole facce che avrebbero determinato il suo rotolare. Applicando un Collision Shape di tipo Sphere a qualsiasi corpo rigido, come ad esempio la mesh primitiva monkey (suzanne) anche questa rotolerà come se si trovasse all’interno di una sfera invisibile (a seconda dei parametri friction). Le opzioni in Collision>Shape sono dunque approssimazioni differenti che andranno scelte a seconda delle circostanze. Una volta che la vostra animazione sarà completa, potrete trasformare l’intera azione in keyframe tramite il Bake To Keyframes, situato nel menu Object>Rigid Body della 3D View.

Chiunque di voi dovesse raccogliere l’invito d’iniziare a sperimentare con la simulazione fisica di Blender, ben presto si renderà conto di una mancanza; cioè nelle varie opzioni dei rigid body non è possibile impostare alcun valore per la velocità iniziale degli oggetti, tanto meno la velocità angolare. Di certo non potremo iniziare delle simulazioni sempre con dei corpi fermi perché in assenza di gravità o di qualsiasi altro campo di forze, non accadrebbe nulla. Vediamo dunque come fare: nel pannello Rigid Body>Settings del contesto physics notiamo che sotto la casella Dynamic (attiva di default) è situata l’altra casella Animated, inizialmente disattiva.

Con l’attivazione di Animated la dinamica fisica verrà esclusa (collisioni a parte) e l’oggetto sarà costretto a comportarsi come indicato tramite keyframe. Se nessun keyframe è impostato, l’oggetto resterà fermo per tutta la simulazione. Quindi al primo fotogramma potremo impostare sia un keyframe Location & Rotation per il rigid body, sia un keyframe per la casella Animated attiva successivamente in un secondo fotogramma (anche pochi fotogrammi dopo) trasleremo il cubo nella direzione della velocità iniziale da noi desiderata e lo ruoteremo di un angolo a scelta (intorno a qualsiasi asse), qui andremo a inserire un altro keyframe Location & Rotation per il rigidbody e infine l’ultimo keyframe per la casella Animated disattiva .
Avviando l’animazione vedrete il cubo muoversi inizialmente tra i due keyframe LocRot come da interpolazione, mentre a partire dal fotogramma successivo inizierà la simulazione fisica nella quale il nostro cubo avrà una velocità iniziale (spaziale e angolare) in base al moto avvenuto tra i due keyframe. Maggiore sarà la distanza percorsa dal rigid body tra un keyframe e l’altro, maggiore sarà la velocità iniziale per la simulazione fisica (stessa cosa per la velocità angolare).

Per concludere l’argomento sul moto dei corpi rigidi vediamo il pannello Rigid Body>Dynamics

in particolar modo i due valori Damping Translation e Rotation. Aumentando tali valori andremo a diminuire (damping = smorzare) la capacita dei corpi di traslare e ruotare indipendentemente dalle sollecitazioni esterne.

Paragrafo successivo
Paragrafo precedente

Torna all’Indice


Nell’augurarti un divertente e produttivo studio di Blender, ti ricordo che puoi supportare questo progetto in due diversi modi: con una piccola donazione (paypal) oppure acquistando la versione PDF (su lulu.com) impaginata in modo professionale e ottimizzata per la visione su Tablet.  



>Acquista l’ebook (PDF) su lulu.com in piena sicurezza con paypal e carte prepagate<