Tag Archives: tree

Volumetric Thing (Tree)

3484TreeRender
Particle-generated volumetric tree.

Made with Processing+toxiclibs+SunflowApiApi.

L’idea su cui sto lavorando negli ultimi tempi, e cioè creare volumi registrando le informazioni relative ad un determinato stato di una immagine 2D con l’aggiunta della terza dimensione (estrusione data dal tempo che scorre) comunque non è mia e lo devo annotare ad onor del vero. Il concept originale é di Karsten “toxi” Schmidt (autore di toxiclibs) ma un giorno, su openprocessing mi sono imbattuto negli sketches di Dominik Strzelec “echoechonoisenoise” e i suoi esperimenti sulla time-extrusion con toxiclibs mi hanno talmente ispirato da spingermi ad iniziare ad usare le lib (un set di 270+ classi distribuite in 18 packages da utilizzare con Processing), cosa che non avevo fatto prima, concentrandomi a mia volta sul package toxi.volume.

La mia idea sarebbe ora di creare degli alberi a partire da sistemi multipli di particelle – in passato avevo tentato altri approcci e cioè le funzioni recursive e gli L-Systems; questo primo esempio è solo l’inizio anche se più che di un particle system si tratta di una ventina di particelle che ‘vivono’ sul piano da estrudere. All’inizio della time-extrusion (alla base dell’albero) si trovano tutte al centro, poi con un attrattore che in realtà le respinge – posto al centro del piano – le particelle (per via di massa e diametro differenziato) si allontanano più o meno velocemente. Questo crea i rami. Devo solo fare in modo che ogni particella, ad un dato momento della sua vita, possa generare altre particelle e riduca il suo raggio fino a zero. Così da un singolo ramo otterrei altri rami, e anche loro si assottiglierebbero fino allo zero generando ulteriori rami.

pineTree forest

Innanzi tutto, felice 2010.

Sarà stata l’aria di Ortisei, la neve e i boschi ma da quando sono tornato ho in mente di voler realizzare degli alberi con Processing. Ho creato una versione molto semplificata e stilizzata di un pino (per il momento é quanto sono riusciuto a pensare con qualche ora di tempo libero) ma ammetto che per realizzare forme convincenti c’è molto da approfondire sulle strutture geometriche e matematiche costruite dalla natura – in particolare sui frattali. Si può trovare qualche compromesso, probabilmente, ma ritengo interessante cercare di riprodurre il pattern col quale si dispongono e suddividono i rami nelle piante. Si lo so, non ci siamo. Almeno non al primo sketch.

forest

Per creare questi alberelli ’simil-Lego’ ho pensato di partire disegnando un tronco principale (una linea posizionata randomicamente e con altezza casuale, il cui spessore diminuisce mentre si sale) e dei rami, anche questi con spessore e lunghezza decrescente.

forest02

Per i rami ho quindi semplicemente disegnato delle rette le cui coordinate esterne x e z (come fosse solo in 2D) fossero: x = initPos.x + radius * cos(theta); z = initPos.z + radius * sin(theta); qui PVector initPos contiene le coordinate x, y, z del tronco; radius è la lunghezza del ramo, e diminuisce mentre si sale. In pratica non ho fatto altro che calcolare alcuni dei punti che descrivono una serie di cerchi con raggio decrescente e poi ho usato tali coordinate per descrive l’ancoraggio del secondo punto (quello esterno) dei rami (i punti iniziali sono gli stessi del tronco). Salendo con la y (-y) ecco che i rami vengono wrappati attorno al tronco e divengono sempre più corti, fino alla cima, dove radius è 0. Il codice dello sketch e la Applet li trovate nel link sotto al video (il risultato finale è abbastanza gradevole).

recursive tree
Recursive Tree. Rendered with p5sunflow lib – GC Mingati

Ecco invece una versione in cui rami e tronchi sono formati da coni/cilindri. Questo mi permette di ottenere un effetto 3D pieno e – se riesco – texturizabile; ma quello che appare subito evidente é che usando una funzione ricorsiva si ottengono rapidamente più rami (una funzione ricorsiva richiama se stessa fino a quando una data condizione non viene raggiunta – in questo esempio un numero di 5 cicli). Anche questo esempio é visibile sotto forma di Applet a questa url, ma credo dovrò cambiare radicalmente modalità di generazione: la ricursività non soddisfa la randomicità di forma/lunghezza che desidero poichè in realtà i rami nascono ruotati randomicamente sugli assi Z ed X solo alla prima generazione; i rami più piccoli sono copie rimpicciolite dei primi e non sono riuscito a trovare un modo per allontanarli dai loro ’simili’; credo però che aggiungendo una forza magnetico-repulsiva ad ogni ramo eviterò che essi si sovrappongano (al momento è inevitabile) e probabilmente avranno una forma più naturale.

pineTree forest http://www.openprocessing.org/visuals/?visualID=6824 – GC Mingati

Anche quest’anno quindi parecchi progetti da realizzare – alcuni ancora troppo complessi visti i miei skills attuali e per il tempo che richiedono (terreni 3D, alberi, flocking e piante mosse dal vento) e altri certamente più ‘alla portata’ (approfondire Struts e lo sviluppo delle apps J2EE) ma tutti comunque necessiteranno di costanza ed impegno. Ho un anno a diposizione, e Saturno contro…