NOTA! Questo sito utilizza i cookie e tecnologie simili.

Se non si modificano le impostazioni del browser, l'utente accetta. Per saperne di piu'

Approvo

Jacob's Ladder: la scala di Giacobbe - Animazione in Blender via script Python

 

 

ATTENZIONE - NOTA IMPORTANTE --- Questo tutorial è stato realizzato con la versione 2.49 di Blender; dal 24 Novembre 2009 è invece disponibile la versione 2.5 di Blender, che introduce importanti novità soprattutto dal punto di vista dell'interfaccia utente, per cui questo articolo verrà lasciato per motivi "storici", ma potrebbero esserci delle differenze tra gli elementi discussi o mostrati e la nuova versione del software.

 

 

IDEA

 

“Giacobbe partì da Bersabea e sia avviò verso Carrai. Capitò in un posto dove passò la notte perché il sole era già tramontato. Lì prese una pietra, se la pose sotto il capo come guanciale e si coricò. Fece un sogno: una scala poggiava a terra e la sua cima raggiungeva il cielo; su di essa salivano e scendevano angeli di Dio”.

 

Ora, lasciando perdere gli angeli di Dio, come facciamo una scala che “scende” dal cielo? Andiamo a mettere tanti scalini, li posizioniamo ad uno ad uno e mettiamo i keyframe?

E perché farlo noi, se può farlo uno script?

 

 

JACOB’S LADDER

Apriamo Blender, manteniamo il cubo di default.

Modifichiamo questo cubo in modo da fargli assumere lunghezza 20, altezza 1.6, profondità 3. Rinominiamolo “Scalino.000”.

Blender-Jacob-Ladder-1

 

Ora facciamo quante copie vogliamo di questo scalino (SHIFT D); i nomi delle copie saranno “Scalino.001”, “Scalino.002”, … “Scalino.n” dove n è il numero di scalini. Io ho fatto 50 copie, quindi arrivo a “Scalino.050”.

 

Nella vista prospettiva apriamo la schermata dell’editor di testo. Cosa deve fare il nostro script? Supponendo che la nostra scalinata debba avere base sul piano xy, se n è il numero di scalini presenti (quindi, qui, 51: le 50 copie + l’originale), allora la scalinata ha quota massima n*16, ossia 51*1.6 = 81.6. Allora lo script deve posizionare tutti gli scalini lì, al frame 1.

 

Quanto deve durare la nostra animazione? Sia f il numero di frame (io ho scelto 120 frame). All’ultimo frame la scalinata deve essere completa, ergo ogni scalino deve essere “al suo posto”. Come faccio a calcolare questa posizione? Essa vale: c * 1.6, con c il numero dello scalino corrente (si inizia a contare c da 0). La “posizione in profondità” vale c * 3. Allora, vediamo questo script…

 

 

import Blender

from Blender import Object

from Blender.Object import *

from Blender.Scene import Render

 

# Numero di scalini, numero di frame

n = 51

f = 120

quotaMAX = 81.6 # Calcolata come alzata_scalino * numero_scalini

distanzaMAX = 153 # Calcolata come pedata_scalino * numero_scalini

 

# Recupero la scena

scn = Blender.Scene.GetCurrent()

 

# Frame 1. Creo un contesto scena, metto il frame corrente a 1.

contestoScena = scn.getRenderingContext()

contestoScena.cFrame = 1

 

# Posiziono tutti gli scalini nello stesso posto al primo frame

for i in range(n):

if i<10: scalino = "Scalino.00"+str(i)

else: scalino = "Scalino.0"+str(i)

scn.objects.active = Object.Get(scalino)

# Recupero il context ipo ed inserisco una chiave LOC per l'oggetto selezionato al frame 1

objSel = scn.objects.active

objSel.insertIpoKey(LOC) # creo una chiave, per creare una ipo per l'oggetto

contextIpo = objSel.getIpo() # recupero la IPO dell'oggetto

objSel.setLocation(-10,-distanzaMAX, quotaMAX) # imposto la posizione dell'oggetto

objSel.insertIpoKey(LOC) # inserisco la chiave LOC

 

# Frame 120.

contestoScena.cFrame = 120

 

# Posiziono gli scalini con offset calcolati per il numero di scalini

for j in range(n):

if j<10: scalino = "Scalino.00"+str(j)

else: scalino = "Scalino.0"+str(j)

scn.objects.active = Object.Get(scalino)

objSel = scn.objects.active

# Recupero il context ipo, calcolo la posizione, inserisco la chiave ipo

contextIpo = objSel.getIpo() # recupero la IPO dell'oggetto

y = (-1)*(j*3)

z = j*1.6

objSel.setLocation(-10,y, z) # imposto la posizione dell'oggetto

objSel.insertIpoKey(LOC) # inserisco la chiave LOC

 

Ecco un esempio di risultato (gli scalini hanno colore giallo, emit 0.44, ma niente halo… tocca a voi rendere esteticamente bella la scena), alcuni frames…

Blender-Jacob-Ladder-2

Bene, per questo breve tutorial è tutto! A presto!

 

 

COMMENTI, DOMANDE, ALTRE RISORSE, ...

Per commenti, domande o altro, accedere al Forum del sito (cliccare qui); per informazioni sulla Registrazione al sito, cliccare qui.

 

 

 
Vai all'inizio della pagina