Python & Blender 3D



In questo tutorial mostreremo cosa si puo’ fare con python ed il 3D.
Meglio, mostreremo qualche potenzialità del capolavoro Blender 3D, un software libero e multipiattaforma di modellazione, rigging, animazione, compositing e rendering di immagini tridimensionali.
Questo software dispone anche di funzionalità per mappature UV, simulazioni di fluidi, di rivestimenti, di particelle, altre simulazioni non lineari, creazione di applicazioni/giochi 3D e raytracing.
È disponibile per vari sistemi operativi ed è dotato di un robusto insieme di funzionalità paragonabili, per caratteristiche e complessità, ad altri noti programmi per la modellazione 3D come Softimage XSI, Cinema 4D, 3D Studio Max, LightWave 3D e Maya.

Faremo riferimento alla versione 2.76 delle API Blender (ma vale anche per le versioni successive e molte delle precedenti), con cui possiamo utilizzare Python eseguendo degli script.

Dobbiamo usare Python3 (io sto usando la versione 3.5.2) e non abbiamo bisogno, per adesso, di conoscere le basi di Blender 3D per poter provare il codice seguente.

Iniziamo scaricando l’ultima versione di Blender dal sito https://www.blender.org/download/ (ricordiamo che nell’esempio che segue sto usando la 2.76)

Dopo aver eseguito Blender, portiamo il puntatore nell’angolino in altro a destra della nostra finestra dell’ambiente 3d, e quando l’icona del puntatore cambia diventando una croce clicchiamo e tenendo premuto spostiamo il puntatore verso sinistra.
Al rilascio vedremo una nuova finestra con l’ambiente di lavoro che ci servirà per scrivere il nostro script.
Nella figura 1 all’altezza del punto 1 vediamo indicata una icona: selezioniamola e dal menu cerchiamo e selezioniamo Text Editor.


figura 1

Fare attenzione a non confondersi con Python Console: nella console abbiamo l’importazione automatica di vari moduli di base delle API Blender, mentre noi dobbiamo scrivere uno script importando quello che ci serve ed avviare il tutto con Run Script (vedi punto 3).
Possiamo anche caricare un file python esterno, come ho fatto io, ed infine avviarlo.
Proveremo con quest’ultima soluzione scrivendo uno script che, partendo da alcuni punti di riferimento nello spazio, faccia visualizzare nel tempo i movimenti di una sfera lungo la traiettoria dei punti indicati .

Apriamo dunque un qualunque editor (geany, pluma, notepad++ ecc.) e scriviamo:

import bpy
import mathutils

bpy (blender python) è il modulo principale di accesso alle funzioni delle API Blender Python

Individuiamo il nostro percorso inserendo le coordinate spaziali xyz dei rispettivi punti.
Io con i punti ho cercato di disegnare un cerchio grossolano (ma non ci sono riuscito poichè sembra piu’ un quadrato…)

positions = (1,2,0),(3,1,0),(5,1,0),(7,2,0),(8,4,0),(8,6,0),(7,8,0),(5,9,0),(3,9,0),(1,8,0),(0,6,0),(0,4,0)
position_start = (0,0,0)

Possiamo notare che l’ultima coordinata di ogni punto è zero, poichè corrisponde all’asse z. Questo perchè abbiamo scelto che il moto di base avvenga su un piano bidimensionale (x,y)

Creiamo una sfera

bpy.ops.mesh.primitive_uv_sphere_add(segments=32, size=0.3, location=position_start)
bpy.ops.object.shade_smooth()
ob = bpy.context.active_object

Ora creiamo nei rispettivi frames le posizioni della sfera, che sarebbero le coordinate x, y e z che abbiamo preimpostato precedentemente.
Inoltre, per dare un po’ piu’ di continuità all’animazione, alla fine del tragitto della sfera (quando il cerchio si chiude nella posizione dell’ultimo valore della tupla positions) aumentiamo di valore la coordinata sull’asse z per avere un tragitto quasi elicoidale.

frame_num = 0

for zz in range(4):
    for position in positions:
        bpy.context.scene.frame_set(frame_num)
        ob.location.x = position[0]
        ob.location.y = position[1]
        ob.location.z = position[2]+zz*2
        ob.keyframe_insert(data_path="location", index=-1)
        frame_num += 10

(attenti alle tabulazioni)

Salviamo il file con il nome movesphere.py e carichiamolo da Blender, cliccando sull’icona a forma di cartella nel Text Editor (vedi punto 2), poi selezionando lo script e cliccando in alto a destra sul bottone Open Text Block.

Ora avviamo lo script selezionando Run Script (vedi punto 3).
Possiamo notare delle linee gialle nella parte in basso (la finestra che visualizza i frames): siamo già pronti per vedere l’animazione della nostra sfera.

Portando il puntatore in basso, all’altezza dell’icona del tasto ‘play’, posizionandoci sopra dovremmo vedere un tooltip come nella figura 1, dove recita Play animation (vedi punto 4).

Cliccandoci sopra potremo veder la nostra animazione.

figura 2

Nella finestra di destra c’è la vista dall’alto, con l’indicazione del percorso approssimativo della sfera.

Nella finestra centrale c’è la vista di lato.

Viva Blender!

 

Vincenzo Quaranta

Author: vic2

sviluppatore full stack
linguaggi Java, Python, Javascript, C#, Php
framework Jhipster, Django, AngularJS, Ionic, Unity 3D
amatore del networking



Leave a comment