Home Tutorials Blender e Python, scripting Jacob's Ladder: la scala di Giacobbe - Animazione in Blender via script Python

Page Rank Check    





Jacob's Ladder: la scala di Giacobbe - Animazione in Blender via script Python
Tutorials - Blender e Python, scripting
Scritto da RedBaron85   
Sabato 30 Gennaio 2010 14:06

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

Una gran fonte di ispirazione, per creare le scene 3D ed effetti speciali è (che ci... CREDIATE o no :-))... la Bibbia !

Ad esempio, in Genesi 28, 10-13, abbiamo:

“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 (mesh di esseri umani vestiti con tuniche, mettete texture chiare con “emit” alta nella radiosità ed effetti di halo), 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”.

Script Python Blender, Jacob

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 frame…

Script Python per Blender, la scala di Giacobbe

Bye !

Tags:     tutorial      python      blender      scripting      animazione      scala      giacobbe      jacob      ladder
Ultimo aggiornamento Sabato 21 Gennaio 2012 20:43
 

Ti è piaciuto questo articolo ? Condividilo !



RedBaron85.com Forum community banner

Non hai trovato quello che cercavi ?
Ricerca personalizzata
Copyright © 2012 RedBaron85.com: Informatica, CG 2D e 3D, Blender, Python, Java 2D e 3D, 3D Studio e altro ancora!. Tutti i diritti riservati.
Joomla! è un software libero rilasciato sotto licenza GNU/GPL.

Milanese Francesco - Partita IVA: 04950350878

AltroArticoliblog utentiBlueprintsContestenglishProgrammazioneModelliElencoNewsTexturesTutorialsVideotutorials