Home Tutorials Blender 2.5 Animazione particelle e scrittura su file con script Python per Blender 3D 2.5; versione testuale

Page Rank Check    





Animazione particelle e scrittura su file con script Python per Blender 3D 2.5; versione testuale
Tutorials - Blender 2.5
Scritto da RedBaron85   
Mercoledì 14 Settembre 2011 00:00

Animazione particelle e scrittura su file con script Python per Blender 3D 2.5; versione testuale

NOTA --- Per visualizzare la versione video di questo tutorial, cliccare qui

 

ERRATA CORRIGE – Istruzione mancante nello script "Sistema particellare su file" (ebook): cliccare qui

 

Salve a tutti,
questo tutorial è la versione video di un esempio pratico presente nel mio ebook “Programmare Script e Add-Ons per Blender 2.5”, realizzato facendo riferimento alle API della versione 2.59 stabile di Blender 3D.

Nell'ebook si parla anche di come rilasciare gli script sotto forma di Add-Ons, per integrarli in maniera stabile nell'applicazione facendoli apparire ad esempio nel menù Info o nella Tool Shelf, ma in questo particolare tutorial non tratteremo queste operazioni; per maggiori informazioni sul contenuto dell'ebook, come sommario e pagine d'esempio, rimando alla sezione ebooks del mio sito web.

 

 

In questo tutorial vedremo come impostare dei sistemi particellari, dei force fields e scrivere alcuni dati su file; ovviamente, nell'ebook sono presenti capitoli introduttivi sul linguaggio Python e le API di Blender, dove vengono descritte alcune istruzioni riutilizzate in questo tutorial, ma qui ci limiteremo ad esaminare lo script, che ho copiato nella finestra Text Editor del programma per eseguirlo in un colpo solo, mentre nell'ebook è presentato come serie di istruzioni da inserire nella Python Console.


Iniziamo da una scena completamente vuota, cancellando gli elementi eventualmente presenti di default. Supponiamo di voler ricavare la posizione di una decina di particelle immesse nella scena da una mesh e soggette all’influenza di due Force Field in grado di modificarne la traiettoria; dobbiamo inoltre scrivere i dati ottenuti frame dopo frame su un file di testo (in chiaro) perché, ad esempio, il nostro professore userà quel file con un altro programma per interpretare i dati ricavati dalla simulazione.

Posizioniamo per prima cosa due Empty, che forniremo di Force Fields, in (-10, 0, 0) e (10, 0, 0), con istruzioni descritte nei capitoli precedenti dell'ebook, rinominandole nel mentre in “Empty1” ed “Empty2”. Le informazioni che ci consentono di utilizzare un oggetto, nel nostro caso la Empty, come Force Field, e di impostarne contestualmente i parametri, si trovano in [oggetto].field, elemento di tipo “FieldSettings” (lett.: “impostazioni campo”, appunto).

Le API Blender Python di FieldSettings indicano che, tra le altre cose, possiamo: definire il tipo di forza, con type; impostare l’intensità del campo di forza, con strength; impostare l’intensità della turbolenza, specificando un valore float tra 0 e 10 in size; impostare la forma del campo di forza (default: “POINT”, omnidirezionale) con shape.
Per il primo campo di forza, impostiamo il tipo a “FORCE”, con intensità -10.0 e gli altri valori come di default, mentre per il secondo impostiamo “TURBULENCE” con intensità 20.0 e gli altri valori come di default.

I campi di forza sono stati impostati, adesso passiamo alla mesh emettitrice: va bene anche una UV Sphere, l’importante in questo caso sono i metodi riguardanti il sistema particellare.
Poniamo la sfera al centro dell’universo virtuale, con tutte le impostazioni di default (size, rings, location, segments, …), rinominandola in “Emettitore” ed associandole una variabile omonima.

L’accesso alle informazioni dei sistemi particellari associabili ad una mesh è dato da “particle_systems”, una collezione di “ParticleSystem”, infatti ad una mesh è possibile associare più sistemi particellari, inseriti in questa collezione nelle API Blender Python.

Di default, una mesh appena creata non ha alcun sistema particellare associato, per cui la prima cosa da fare è creare un “particle_system” e aggiungerlo alla lista dei sistemi della mesh, nel nostro caso la sfera “Emettitore”; la creazione di un sistema particellare via codice avviene selezionando l’oggetto al quale bisogna assegnare il sistema particellare ed invocando il metodo particle_system_add() di bpy.ops.object, che crea un sistema particellare con valori di default per l’oggetto selezionato.

Assegniamo il sistema particellare alla variabile “SistemaParticellare” e personalizziamolo sfruttando i metodi di “Particle_System.settings” (un oggetto di tipo ParticleSettings), elencati nelle API Blender Python.
In questo modo, l’emissione di particelle inizierà al frame 1, terminerà al frame 10 e genererà 10 particelle con Lifetime 250 (la durata dell’animazione di default di Blender), con velocità iniziale (Normal) 0.0.

La forza di gravità “disturba” la nostra animazione, ma anziché toglierla solo per le particelle del sistema particellare in uso togliamola per tutta la scena, approfittandone per menzionare le impostazioni di Scene.

Il nostro professore, nel mentre, ci informa che gli interessano i dati relativi ai primi 100 frames, in un file .txt, con questo formato: ogni riga corrisponde ad un frame dell’animazione, quindi serviranno 100 righe; in ogni riga, la posizione di una particella deve essere indicata mediante tre valori (coordinate XYZ) con due cifre decimali, separati da “,” e posti tra “()”; il carattere di separazione tra le coordinate delle varie particelle è “#”.

Quello che faremo sarà quindi: creare una lista di stringhe, ciascuna delle quali conterrà i dati di un frame; in ogni stringa, inserire i valori recuperati dalle particelle ai vari frame, formattandoli secondo le modalità espresse precedentemente; scrivere questa lista su file, un elemento per riga.

Nel sistema particellare, una singola particella è identificata mediante “particle”; intuitivamente, l’oggetto “particles” di un “particle_system” è una collection, una collezione ordinata di oggetti “particle”.

Per recuperare le informazioni di posizione di una particella ad un dato frame, quindi, è sufficiente accedere al campo location, per cui bisogna fare un ciclo sulle particelle presenti nel sistema, per tutti i frames dell'animazione.

Segue la fase di scrittura dei dati su file: è sufficiente aprire un descrittore di file (un oggetto, associato ad un file) e scrivere, mediante ciclo for, le stringhe contenute in dati (stringhe che terminano in \n per implementare il ritorno a capo automatico), per poi chiudere il descrittore del file con “close()”.

Se non si specifica il path assoluto, il file verrà depositato nella cartella principale di Blender (ad esempio, “C:\Programmi\Blender Foundation\Blender\”); nello specificare un path assoluto, ricordarsi del carattere di escape \ prima di ogni \ nel path (ad es.: “C:\\dati.txt” se si desidera salvare il file “dati.txt” in “C:\”).

Eseguendo lo script con Run Script ed avviando ora l’animazione in una 3D View, vedremo le particelle partire dalla sfera e muoversi, nel corso dei 250 frames “standard”, all’interno della scena 3D; nel mentre, Blender ha scritto i dati su file.

ERRATA CORRIGE – Istruzione mancante nello script "Sistema particellare su file" (ebook): cliccare qui

 

Animazione particelle e scrittura su file con script Python per Blender 3D 2.5; versione testuale

Bene, per questo tutorial è tutto;

bye! ;-)

Tags:     videotutorial      informatica computer      computer grafica      computer graphics      redbaron85      blender 3d      blender 2.5      script python      blender python      ebook      addons blender 3D      plugins blender 3D      blender 2.5 python tutorial
Ultimo aggiornamento Giovedì 12 Aprile 2012 14:37
 

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