Cinema 4D Funzionalità Avanzate MoGraph Altri Oggetti MoSpline
Funzione disponibile in CINEMA 4D Broadcast, Studio
MoSpline

Base Coord. Oggetto Semplice Turtle Valori Spline Effettuatori Forze

Turtle

I parametri delle tab Turtle e Valori sono rivolti agli utenti con un adeguato livello di conoscenza di questo programma (queste tab contengono un intero L-System). Chi ha poca esperienza, o chi non ne ha affatto, non deve comunque spaventarsi! A seguire sono disponibili diversi esempi.

Assicuratevi di impostare Modo a Turtle.

Breve Introduzione agli L-System

Nelle seguenti pagine descriveremo brevemente il concetto degli L-System. Sono disponibili altri manuali o risorse online che contengono una descrizione approfondita di questi sistemi (ad esempio il documento PDF "The Algorithmic Beauty of Plants" di Przemyslaw Prusinkiewicz e Astrid Lindenmayer si basa sull’uso con Cinema 4D, e può essere scaricato all’indirizzo http://algorithmicbotany.org/papers#abop).

Gli L-System sono di solito utilizzati per simulare la crescita delle piante ed effetti simili. Combinato con MoGraph, questo sistema può essere utilizzato per creare simulazioni di crescita posizionando un oggetto MoSpline e un oggetto Sweep, creando così un oggetto renderizzabile (le Spline possono essere renderizzate direttamente con Sketch and Toon o Hair).

In poche parole, un L-System esegue una serie di comandi che definisce come e dove devono crescere nuovi rami. Si tratta di un sistema di auto-riproduzione in grado di sostituire rami già esistenti con rami nuovi.

I principi base sono abbastanza semplici e sono basati su un sistema chiamato "Sistema Turtle". Viene inviata una "Turtle/tartaruga” (virtuale) tramite dei semplici comandi. Questo percorso è rappresentato da una Spline.

I 3 comandi più importanti sono:

Se inserite la sequenza F++F++F nel campo Premessa, questa verrà tradotta in: "Fare un passo Forward (in avanti); girare due volte a destra; fare un altro passo Forward (avanti); girare due volte a destra; fare un altro passo Forward (avanti)."

La lunghezza di ogni passo e l’angolo di rotazione possono essere definiti nei settaggi Movimento di Default e Angolo di Default ( tab Valori). Oppure, come descritto sopra, posizionandoli tra parentesi. Se Angolo di Default è impostato a 60°, risulterà un triangolo perfetto per il nostro esempio:

Due diversi codici di comando: sinistra F++F++F; destra: F-F++F-F (ognuno con un Angolo di Default di 60°.

Questo vi permette di creare varie forme ramificate. Una funzione molto interessante degli L-System è un sistema di sostituzione integrato, grazie al quale singoli rami possono essere sostituiti da altri. Ciò può avvenire anche in modo ricorsivo, il che vi permette di creare ramificazioni molto complesse usando codici di comando molto semplici. Tutto questo potrebbe sembrare un po’ confuso ma l’esempio a seguire chiarirà senz’altro il processo coinvolto:

Finora avete inserito righe di comando singole, che sono state eseguite una volta sola. Inserite ora i seguenti codici di comando nei rispettivi campi:

Premessa: F++F++F

Regole: F = F-F++F-F

Come potete vedere, la riga di codice Regole contiene un’assegnazione (chiamata in seguito Regola) in cui "F" è stato assegnato a diversi simboli, che a loro volta possono essere inseriti (internamente) nella riga di codice Premessa.

Se scritto nella sua interezza, la riga di codice dei comandi sarà letta come segue (sostituite la F nella riga di codice Premessa con il codice che segue la "F" nella riga di codice Regole):

F-F++F-F++F-F++F-F++F-F++F-F

Ciò rappresenta la seconda forma da sinistra nell’immagine sotto. Dal momento che ogni F nel codice Premessa è sostituito dalla Regola, ogni linea sarà sostituita da una più complessa.

Modifiche nella forma quando ogni F viene sostituita dal codice "F-F++F-F".

Questo processo di sostituzione può ripetersi all’infinito (più o meno… dal momento che il vostro computer getterà la spugna vista la crescita esponenziale della complessità della Spline che inizia a crescere...). Il numero di volte consentito per questa ripetizione viene definito dal valore Crescita, che sostituisce ogni F con il codice Regole. I numeri frattali lavorano allo stesso modo.

Ovviamente potete usare anche i segnaposto, così non sarà necessario utilizzare ogni F. Dopotutto, questo porterebbe ad una crescita poco realistica.

Potete quindi utilizzare dei segnaposto che consistono in lettere che non rappresentano alcun comando Turtle, come A, B, C, D, (ma NON "F", in quanto questo è "il comando di unità" predefinito).

Digitate ciò che segue nei rispettivi campi:

Premessa: FA

Regole: A=+F-FA

Dal momento che la Regola termina con una A, si otterrà come risultato un valore Crescita con un (Angolo di Default impostato a 90°).

Suggerimento:
Queste semplici regole di sostituzione possono creare geometrie complesse (vedo sotto). Se i simboli non sono utilizzati in modo corretto potreste bloccare il computer. Fate quindi attenzione quando sperimentate e salvate il vostro lavoro molto spesso (anche se è un semplice editor di testo). Potrà esservi d’aiuto impostare Modo Mostra a Linee.

Il codice che abbiamo utilizzato finora consiste in una singola riga di codici. Tuttavia, gli L-System diventano interessanti quando si creano rami reali, vale a dire quando si diramano delle nuove linee da linee esistenti. Ciò si ottiene con l’utilizzo di parentesi quadre ([ ]). La sequenza di comandi all’interno delle parentesi quadre viene vista come un ramo separato (e crea una nuova Turtle). Dopo aver creato il nuovo ramo, la Turtle tornerà al punto di partenza (prima delle parentesi quadre) e continuerà con la sequenza comandi che segue le parentesi.

Digitate il seguente codice nel campo Premessa:

F[+F][-F[-F]F]F[+F][-F]

Il risultato del codice di comando sopra indicato, con un Angolo di Default di 30°.

Se inserite F nel campo Premessa ed il codice sopra (F=F[+F][-F[-F]F]F[+F][-F]) nel campo Regole, ogni F sarà sostituita dal ramo a sinistra nell’immagine. Aumentando il valore Crescita si farà in modo che il ramo continui a crescere, in quanto ogni linea sarà perpetuamente sostituita da un nuovo ramo. Se osservate da vicino, potete vedere il modello di sinistra ripetuto nell’albero a destra (evidenziato in verde).

Questo è un metodo semplice per creare strutture complesse:

Una serie di simboli identificativi. Si noti che qualsiasi lettera (vedi la "A" in questo caso) può essere usata come segnaposto. In basso a destra si vede come la rotazione predefinita sia stata impostata a 90°.

Finora abbiamo lavorato su un piano. Dal momento che la ramificazione non avviene in un unico piano, ma in ogni direzione, esistono dei simboli di comando che rendono possibile procedere in questo senso.

Essi sono (può essere aggiunto un valore grado tra parentesi dopo il simbolo del comando):

& o ^: ruota attorno all’asse trasversale della Turtle

\ o / : ruota attorno all’asse longitudinale della Turtle

Digitate il seguente codice nel campo Premessa: F&F\ (90)^F+F:

Il 90° dopo "/" non è necessario, in quanto il valore Angolo di Default sarà applicato per le specifiche minori.

Il risultato è la Spline sopra raffigurata. La Turtle si muove in avanti (F), ruota a destra attorno al suo asse trasversale (&, Angolo di Default è impostato a90°), si muove ancora in avanti (F), ruota di 90° attorno al suo asse longitudinale (\ (90)), ruota poi di 90° attorno al suo asse trasversale (^), si muove in avanti (F), gira a destra (+) ed infine si muove ancora in avanti (F).

Usando questo metodo per creare le formazioni dei rami, riuscirete a creare alberi e cespugli davvero realistici.

Dati Utente

Potete utilizzare i Dati Utente come variabili in una sequenza di simboli. Nell’immagine sopra è stato aggiunto un parametro Angolo ai Dati Utente che è stato poi sostituito tra parentesi per ^ (la Turtle ruota attorno al suo asse trasversale) nel campo Premessa.

Caratteri speciali e spazi non devono essere inclusi nei nomi variabili. Le underscore sono riconosciute (come "second_length").

Formule

Al posto delle normali digitazioni possono essere utilizzate le Formule, incluse le variabili definite (come F(_growth*2). Sono disponibili le seguenti formule:

_totalIl numero totale di comandi nella stringa corrente (vedi sotto)
_indexL’indice dei comandi correnti nella stringa (vedi sotto)
_growthIl livello della crescita corrente
_levelIl livello del comando corrente (se assegnato, vedi sotto)
_x, _y, _zLa posizione corrente per Turtle nello spazio.
_arg1, _arg2, _arg3, _arg4Il primo, il secondo, il terzo e il quarto valore dell'argomento (es. da F(1,2,3,4))
_ageL’età del comando corrente (represents _growth - _level) partendo da 0.0.
_lengthLa lunghezza corrente dell'arco tra le origini Turtle e MoSpline.
_moveLa lunghezza della scala predefinita corrente.
_tropismIl Trofismo corrente.
_scaleLa scala predefinita corrente.
_rotateL’angolo predefinito corrente.
_rnd, randomUn numero casuale tra -1.0 e +1.0

Esempio "Totale/Indice"

Consideriamo una stringa F(_index)F(_index), che è composta da 2 comandi. La stringa svolge la stessa funzione di F(1)F(2). Ad esempio, dal momento che "_total" è il numero totale dei comandi, con i seguenti comandi può essere creata una spirale:

Premessa: FA

Regola: A=+(20*_index/_total)FA

Esempio "_RND"

Il seguente comando:

Premessa: A

Regola: A=+(_rnd*90)FA

Il comando ,_rnd*90’ determina un angolo tra -90 e +90 per ogni scatto di crescita, determinando una linea "traballante” con rotazioni casuali.

Esempio "_livello"

Prendiamo in considerazione il seguente comando:

Premessa: A

Regola: A=FA

Risulteranno i seguenti livelli valore (qui mostrati tra parentesi a scopi dimostrativi - NON saranno visualizzati):

Crescita = 0 : A(0)

Crescita = 1 : F(1)A(1)

Crescita = 2 : F(1)F(2)A(2)

Crescita = 3 : F(1)F(2)F(3)A(3)

Ora che siete a conoscenza di come viene fatta la numerazione "_indice", osservate il seguente comando:

Premessa: FA

Regola: A=+F(_livello*10)A

...che crea la seguente spirale con un Angolo di Default impostato a 90°:

Esempio "_arg"

Così come possiamo definire F(a,b,c)=F(a*2,b*2,c*2) per impostare i parametri per i comandi Turtle (in questo esempio F), è possibile utilizzare anche il comando "_arg". Ciò non deve essere valutato all’inizio. F=F (_arg1*2,_arg2*2,_arg3*2) fa la stessa cosa del comando qui sopra.

Variazioni di sintassi avanzate

E’ possibile anche la seguente sintassi:

Premessa: F(2)F(1,2)F(2,3)

Regola : F(a,b) = F(a*2,b*2)

Tutte le F saranno sostituite ovunque una "a" o una "b" e appariranno all’interno di una Regola con gli argomenti F e saranno trattate come segue:

F(2*2,1*2)F(1*2,2*2)F(2*2,3*2) che logicamente equivale a F(4,2)F(2,4)F(4,6).

Sono possibili anche costruzioni di regole come la seguente:

F(a,b):(a>10)=F(a,b)+F(a/2)

Questa regola, ad esempio, sarà applicata se il valore del primo argomento è maggiore di 10.

Nel seguente esempio sono combinate entrambe le variazioni di sintassi in modo da produrre un interessante effetto:

Esempio "frutti"

Nell’esempio sopra, diversi rami crescono contemporaneamente. Quando un ramo ha finito di crescere, sarà posizionata una sfera alla fine del ramo (ciò richiede il comando J, vedere ad esempio: Oggetto Clona).

Notate che "B(6)" è definito nella prima Regola e che "B(h-1)" riduce l’argomento di 1 nella Regola 2 fino a "h=0" per impostare la sfera nella Regola 3.

Osservate la console per vedere l’intera stringa (ma prima cliccate sul pulsante Risultato della Stringa a Console).

Ulteriori dettagli riguardanti le formule si trovano nell’allegato.

Premessa

Inserite qui la premessa. Molto spesso si tratta di un un comando di una singola lettera (vedere Regole) o un segnaposto a cui si aggiunge del contenuto nel campo Regola. Nelle seguenti pagine troverete numerosi esempi di come può essere l’aspetto delle stringhe.

Ignora Contesto

Qui potete definire una serie di simboli (comandi) che saranno ignorati dalle regole del contesto. Esempio:

Avete la seguente costellazione:

Premessa: A+B+C+D+E+F

Regole: A<B=C

Regole

F(a,b,c)Sposta la Turtle in avanti e facoltativamente traccia linee lungo la sua lunghezza (a), la scala (b) e/o la suddivisione (c).
f(a) Sposta la Turtle in avanti SENZA tracciare alcuna linea (vale a dire che un segmento di spline terminerà) "a" è il valore di lunghezza (facoltativo).
H(a,b,c)Sposta la Turtle in avanti e facoltativamente traccia una linea che corrisponde alla metà della sua lunghezza (a), la sua scala (b) e/o la sua suddivisione (c)
h(a)Sposta la Turtle in avanti SENZA tracciare alcuna linea (cioè un segmento di spline terminerà) "a" è il valore di metà-lunghezza (facoltativo).
M(x,y,z)Sposta e traccia una linea. La Turtle si muoverà all'interno delle coordinate locali (x, y, z) ma non ruoterà su se stessa.
m(x,y,z)La Turtle avanza ma non traccia una linea. La Turtle si muove all'interno delle coordinate locali (x, y, z) ma non ruoterà su se stessa.
G(a)La Turtle avanza ma non traccia una linea e non termina un segmento Spline. "a" è il valore di lunghezza (facoltativo).
RRipristina la Turtle al punto iniziale del segmento, ripristina la rotazione e traccia una linea (in un oggetto MoSplineTurtle un segmento è sempre contenuto nel []).
r Ripristina la Turtle al punto iniziale del segmento, ripristina la rotazione e NON traccia una linea (in una Turtle MoSpline un segmento è sempre contenuto in [ ]).
P(x,y,z)Posiziona la Turtle su queste coordinate e traccia una linea.
p(x,y,z)Posiziona la Turtle su queste coordinate e NON traccia una linea.
-(a)Ruota la Turtle in senso ANTIORARIO attorno all'asse verticale. "a" è il valore dell’angolo (facoltativo).
+(a)Ruota la Turtle in senso ORARIO attorno all'asse verticale. "a" è il valore dell’angolo (facoltativo).
&(a)Ruota la Turtle in avanti attorno all'asse trasversale. "a" è il valore dell’angolo (facoltativo).
^(a)Ruota la Turtle all'indietro attorno all'asse trasversale. "a" è il valore dell’angolo (facoltativo).
/(a)Ruota la Turtle in senso ORARIO attorno al centro dell'asse. "a" è il valore dell’angolo (facoltativo).
\(a)Ruota la Turtle in senso ANTIORARIO attorno al centro dell'asse. "a" è il valore dell’angolo (facoltativo).
[Nuovo ramo = nuova Turtle
]Fine del ramo
{Inizio poligono (Esempio: "Creazione Poligoni")
}Fine del poligono
.Aggiunge un punto: all'interno delle parentesi graffe per i poligoni: ad es. = { . -f . +f . +f . +f }
|Ruota la Turtle di 180° attorno all'asse verticale.
*Ruota la Turtle di 180° attorno al centro dell’asse.
%Taglia il ramo in questo punto - tutto verrà ignorato alla fine della parentesi chiusa: ]. Esempio: "Tagliare un Ramo”.
"(a)Moltiplica la lunghezza del valore "a" facoltativo per ogni generazione (vedi esempio sotto. Esempio: Moltiplicare/Dividere).
!(a)Moltiplica la scala per il valore "a" facoltativo per ogni generazione (diametro MoSpline se utilizzato insieme all'oggetto Sweep).
;(a)Moltiplica l'angolo per il valore facoltativo "a" per ogni generazione.
_(a)Divide la lunghezza per il valore facoltativo "a" per ogni generazione.
?(a)Divide la scala per il valore opzionale "a" per ogni generazione (diametro MoSpline se usato insieme all'oggetto Sweep).
@(a)Divide l'angolo per il valore opzionale "a" per ogni generazione.
T(a)Aggiunge tropismo (ad esempio FTFTF), il che significa che ciascun segmento di spline si curverà leggermente in direzione dell'asse Y globale. Verranno valutati eventuali modificatori di particelle presenti.
$(x,y,z)Mostra l’estremità di un vettore in alto orientando la Turtle di conseguenza. Definire il vettore verso cui si orienterà la Turtle.
I(a,r,g,b)(La prima stringa di caratteri inizia con una "i" maiuscola )
J(a,r,g,b) 
K(a,r,g,b) 
L(a,r,g,b)In presenza dei sopracitati caratteri ”I, J, K e L", è possibile disporre lungo la Spline Turtle un numero qualsiasi di cloni generati da un oggetto Clona. "r, g, b" rappresenta il colore del clone. "a" rappresenta il numero di indice (cioè il numero che rappresenta l'ordine in cui un oggetto è disposto sotto ad un oggetto Clona. Vedi "Indice" sotto). I caratteri I, J, K, L rappresentano i rispettivi gruppi nel settaggio Modo dell'oggetto Clona, "Gruppo 1", "Gruppo 2", "Gruppo 3", "Gruppo 4". Un esempio è riportato qui sotto: ”Esempio: Oggetto Clona”.

Esempio "Creazione Poligoni"

Osservate la seconda riga del campo Regola:

L=[{.-f.+f.+f.++++f.+f.+f.+f}]

Tra parentesi graffe (che definiscono un poligono), è definito un numero specifico (che inizia con un ".") tra cui si crea un poligono. Poiché le parentesi graffe sono contenute all’interno di parentesi quadre, la Turtle sarà ripristinata al punto di partenza dopo aver creato ogni foglia. All’intera foglia sarà assegnata una "L" e la regola creerà una foglia completa se esistono delle "L".

Notate che la MoSpline può produrre sia Spline OR che poligoni. Se volete produrli entrambi contemporaneamente, utilizzate Destinazione Spline.

Esempio "Moltiplicare/Dividere”

Se utilizzate una sequenza di auto-sostituzione di simboli nel campo Regola (come A=F+BA), si potrà creare un moltiplicatore o un divisore (", !, ;, _, ?, @) per aumentare o diminuire il valore di ogni nuovo Generatore.

Esempio "Tagliare un Ramo"

Se osservate questa Regola, potete notare che alla Premessa sono stati aggiunti i segnaposto A, B, C e D. Per vari valori Crescita, le regole definiscono ora la sostituzione di ogni segnaposto con un valore in percentuale (%), il che significa che i seguenti simboli saranno tagliati via in un determinato punto (in ciascun ramo).

Esempio "Oggetto Clona"

Se il valore Crescita è animato, questa struttura può crescere notevolmente (incl. la crescita dei cloni).

Notate che J e K sono utilizzati nella regola (essi potrebbero essere sostituiti rispettivamente da (1,1,1,1) e (1,1,1,1) e se gli argomenti tra parentesi vengono omessi, si utilizzerà il valore standard). Essi si riferiscono ai cloni di un oggetto Clona. Questo modo deve essere impostato di conseguenza per entrambi gli oggetti Clona:

I(1,1,1,1) riflette Gruppo 1

J(1,1,1,1) riflette Gruppo 2

K(1,1,1,1) riflette Gruppo 3

L(1,1,1,1) riflette Gruppo 4

Notate che una Regola

Premessa: FA

Regole: A=FX

X=J(1,1,1,1)

potrebbe anche funzionare, ma i cloni non cresceranno in modo regolare, bensì saranno visualizzati all’improvviso.

Esempio "Indice"

Gli oggetti Figli di un oggetto Clona sono numerati in sequenza (iniziando da "0"). Se, ad esempio, definite A=FJ(2,1,1,1)A (i valori RGB possono essere omessi), l’oggetto Clona utilizzerà solo l’oggetto con indice "2" (a sinistra della sfera). Se utilizzate A=J(rnd(2))A sul lato destro, un clone sarà posizionato casualmente in conformità con un numero compreso tra "0" e "2", anch’esso scelto a caso.

Esempio "Crescita Casuale"

Limiti diversi generano forme diverse.

Questa Regola, assieme a vari valori Dati Utente per Limite1 e Limite2 (assieme, questi valori devono essere pari al 100%) può essere utilizzata per creare diverse "piante" molto simili (L-System Stocastico. Le condizioni (rnd(1)<) o (rnd(1)>) determinano casualmente quale delle tre Regole deve essere applicata (ognuna con una nuova selezione casuale per ogni Generatore, con un parametro Crescita maggiore).

Esempio "Contesto Regole"

Le Regole possono essere scritte anche nella seguente forma:

Premessa: ABC

Regola: A<B=C

Risultato (se Crescita > 1): ACC

Cosa potrebbe succedere? Ciò dipende dalla sequenza all’interno della stringa. La Regola "A<B=C" ricerca le istanze all’interno della stringa, dove una "B" segue direttamente una "A" e sostituisce la "B" con una "C".

Se inserite "A>B=C", le "A" che si trovano a sinistra di una "B" saranno sostituite da una "C" (il risultato sarà "CBC").

Per la Regola "AB=C", non è possibile determinare quale simbolo sarà sostituito da una "C". In questo caso saranno sostituiti entrambi con "C" (il risultato sarà "CCC").

Risultato

Visualizza errori di sintassi.

Risultato della Stringa a Console

Cliccando su questo pulsante si visualizzerà la sequenza di simboli corrente, prendendo in considerazione tutte le Regole e i parametri Crescita nella Console. Tale sequenza può, ad esempio, avere questo aspetto (questa è la sequenza di simboli dell’esempio Frutta con Crescita impostato a 4):