Questo tutorial ti permetterà di utilizzare il software Rhinoceros con il plug-in Grasshopper per realizzare una semplice parete con texture parametrica. Questo vi permette di modificare la texture di una parete in pochissimi secondi semplicemente inserendo parametri numerici o tramite movimento di slider parametrici senza dover rimodellare in 3D manualmente ogni volta la nuova texture.
Ecco un video di esempio di cosa sarà possibile ottenere al termine del tutorial:
Premessa: do per scontato che il lettore abbia una conoscenza almeno di base di Rhinoceros e di Grasshopper e che sappia realizzare cose molto semplici sia con Rhinoceros che con Grasshopper.
Definiamo la geometria della parete
Apriamo Rhinoceros e disegniamo i contorni della nostra parete
Apriamo Grasshopper e inseriamo nel Canvas il componente Curve:
In Grasshopper aggiungiamo il componente Surface. Colleghiamo l'output del componente Curve all'input del componente Surface.
Questo genererà una superficie piana a partire dalla curva della parete.
Dividiamo la parete in sottomoduli
Affinchè possiamo creare la texture della nostra parete composta da una serie di quadrati di diversa dimensione dobbiamo dividere la parete in sottomoduli. Per farlo in Grasshopper aggiungiamo il componente Divide Domain 2:
Aggiungiamo inoltre due componenti Number Slider. Colleghiamo l'output del componente Surface all'input del componente Divide Domain e colleghiamo i due slider creati rispettivamente all'input U e V del componente Divide Domain. Questo permette al componente Divide Domain di dividere la parete in sottomoduli. Nel caso del mio progetto la parete è stata divisa in 7 parti in direzione "u" e in 10 parti in direzione "v". Ecco il risultato:
A questo punto tagliamo la superficie in sottomoduli utilizzando il componente Isotrim. Aggiungere il componente IsoTrim in Grasshopper.
Collegare l'output del componente Surface alla voce "S" del componente IsoTrim e collegare l'output del componente Divide Domain alla voce "D" del componente IsoTrim.
Adesso dobbiamo trovare il centro di ogni sottomodulo, ossia questo:
Per farlo aggiungiamo il componente Polygon Center.
Colleghiamo quindi la voce S del componente Isotrim alla voce P del componente Polygon Center.
Definiamo 2 punti di Attrazione per ridimensionare il pattern della superficie
A questo punto la faccenda si complica un pò ma cercherò di renderla più semplice possibile. Quello che dobbiamo fare è creare 2 punti che possono scorrere liberamente sulla parete e che servono da "punti di attrazione" attorno ai quali il pattern della nostra parete andrà a modificarsi. Sarà più chiaro il concetto guardando questo breve video:
Per creare questi due punti dobbiamo procedere in questo modo:
1) Aggiungiamo il componente Evaluate Surface
2) Aggiungiamo due componenti MD Slider
Colleghiamo l'output del componente Surface all'input "S" del componente Evaluate Surface. Clicchiamo con il tasto destro del mouse sull'input S di Evaluate Surface e scegliamo l'opzione "Reparameterize" . Collegare gli ouput dei componenti MD Slider all'input "uv" del componente Evaluate Surface. Per collegare entrambe gli output ad uno stesso input è necessario tenere premuto il tasto "SHIFT" della tastiera.
Ora prova a muovere i rettangoli all'interno dei componenti MD SLIDER e vedrai che i punti sulla superficie si inizieranno a muovere.
A questo punto aggiungiamo il componente Closest Point e collega l'ouput "Cv" del componente Polygon Center all'input P di Closest Point. Inoltre collega l'output P del componente Evaluate Surface all'input C del Closest Point:
Questo componente ci permette di valutare (matematicamente) la distanza tra i centri dei vari sottomoduli e i due punti "mobili" che abbiamo inserito e che vogliamo muovere. Ogni volta che muoviamo questi due punti il componente "Closest Point" calcola la distanza tra i nostri due punti e i centri di ogni sotto-modulo.
Modifichiamo la dimensione dei sottomoduli in maniera "Creativa"
A questo punto abbiamo bisogno che, in base alla posizione dei nostri due punti "attrattori", i sottomoduli della parete acquisiscano dimensioni diverse per creare un effetto interessante sulla parete. Mi spiego meglio: abbiamo tanti moduli su questa parete e vogliamo che alcuni siano più grandi e alcuni più piccoli ma non in maniera casuale, vogliamo che la loro dimensione dipenda dalla posizione dei nostri due punti attrattori e che la varietà delle varie forme dei sottomoduli sia "creativa" e interessante. Per farlo procediamo in questo modo:
Aggungiamo i seguenti componenti in Grasshopper:
Bounds
Remap Numbers
Graph Mapper
Construct Domain
Remap Numbers (di nuovo)
2 Number Sliders
Scale
Il componente Bounds serve per stabilire la distanza minima e massima tra i centri dei moduli e i nostri due punti attrattori. Genera cioè un intervallo di valori (min e max) in cui questi punti si trovano.
Il componente Remap Numbers ci serve per creare un nuovo range di valori (min e max) a partire dall'intervallo calcolato dal componente Bounds. Questo è importante per scalare adeguatamente (e non in maniera impropria) i vari sottomoduli per creare la nostra texture creativa.
Il componente Graph Mapper prende l'intervallo di numeri da Remap Number e lo trasforma secondo una specifica curva. Esempio con una curva a campana i numeri al centro dell'intervallo verranno spinti a livelli più alti mentre i numeri agli estremi dell'intervallo rimarranno ad estremi più bassi. Questo componente serve a creare variazioni della texture meno banali e più interessanti.
Il secondo componente Remap Number prende l'intervallo di numeri modificato dal Graph Mapper e lo rimappa secondo dei valori che sono consoni alla scala del nostro modello. Tali valori li stabiliamo noi con il componente Construct Domain che serve proprio a stabilire il minimo e il massimo di questi valori. Se non avessimo questo intervallo i moduli della nostra texture verrebbero ridimensionati in maniera sproporzionata e la texture non si creerebbe.
Il componente Scale serve per scalare creativamente le dimensioni dei sottomoduli della parete in base alla posizione dei nostri due punti attrattori.
Colleghiamo quindi l'output D del Closest Point all'input N del componente Bounds. L'ouput D del Closest Point va collegato anche all'input V del primo componente Remap Numbers. L'ouput I del Bounds va inoltre collegato all'input S del primo Remap Numbers il cui output R va collegato all'input del Graph Mapper.Cliccate con il tasto destro sul Graph Mapper e selezionate una curva (es. Gaussiana) per sperimentarne gli effetti sulla texture!
L'output del Graph Mapper va collegato all'input V del secondo Remap Numbers. I due Number Slider vanno collegati rispettivamente agli input A e B del componente Construct Domain. Fai un doppio click su ognuno dei due Number Slider e selezionare R come metodo di rappresentazione numerica. A questo punto scegliere dei valori numerici intorno a quelli che vedi nell'immagine. L'output I del componente "Construct Domain" va collegato all'input T del secondo componente Remap Numbers mentre l'input V del secondo componente Remap Numbers va collegato all'output del Graph Mapper.
Il componente Scale ha tre input: G, C e F. L'input G deve essere collegato al componente Curve. L'input C deve essere collegato al componente Polygon Center
L'input F deve essere collegato all'output R del secondo Remap Numbers.
Tagliamo la superficie originale per creare la superficie texturizzata
A questo punto inseriamo un componente Curve. Colleghiamo l'output G del componente Scale all'input del componente Curve.
Questo ci restituirà i contorni dei moduli ridimensionati secondo i parametri precedenti:
Adesso dobbiamo usare queste curve per tagliare la superficie originale in modo da ottenere una superficie intera con la texture voluta. Procediamo in questo modo:
Aggiungiamo un componente Surface Split e un componente List Item:
Colleghiamo l'output del componente Curve all'input C del componente Surface Split. Colleghiamo il nostro primissimo componente Surface all'input S del componente Surface Split. Colleghiamo quindi l'output F di Surface Split all'input L di List Item. Infine aggiungiamo un nuovo componente Surface e colleghiamo l'output "i" del componente List Item all'input del nuovo componente Surface.
Adesso clicchiamo con il tasto destro sul componente Surace e selezioniamo la voce Bake. Questo ci permette di ottenere una superficie NURBS della nostra parete:
Diamo uno spessore alla parete ottenuta
Se vogliamo dare uno spessore alla parete ottenuta possiamo fare un passaggio in più.
Inseriamo i seguenti componenti:
Surface Points (SrfPt): serve per identificare i quattro vertici della nostra parete rettangolare.
Evaluate Surface (EvalSrf): serve per identificare un vettore normale (perpendicolare) alla superficie della parete. Questo vettore ci serve per dire al software in quale direzione vogliamo "estrudere" la parete per dargli uno spessore.
Amplitude: è un componente che serve per stabilire di quanto vogliamo estrudere la parete.
Number Slider: ci serve per stabilire la misura di estrusione (4 = 4 cm).
Extrude: è il componente che effettua l'estrusione.
Collega l'output della superficie tagliata ottenuta (Srf) all'input S del componente Surface Points e all'input S del componente Evaluate Surface e anche all'input B del componente Extrude. Collega l'output P del componente Surface Points all'input "uv" del componente Evaluate Surface. Collega poi l'output N di Evaluate Surface all'input V del componente Amplitude. Collega il Number Slider all'input A del componente Amplitude e collega l'output V di Amplitude all'input D del componente Extrude. Clicca con il tasto destro su Extrude e seleziona "Bake" per "renderizzare" la parete con lo spessore stabilito.
Conclusione
Ti invito a "giocare" con i vari parametri per creare la tua texture personalizzata. Puoi anche modificare la geometria di partenza (la prima Curva creata) utilizzando una curva con una geometria diversa.
Spero che questo tutorial ti sia piaciuto e ti sia stato utile: se così fosse ti chiedo una mano alla condivisione sui tuoi social del mio lavoro! Grazie!
Comments