• eng
  • deu
  • esp
  • fra
  • Blender: tijolos com adaptive subdivision/microdisplacement
  • Tieniti aggiornato sulle novità del sito con un rss feed reader
  • Pagina Facebook Grafica e Programmazione
  • canale Youtube Grafica e Programmazione
  • Graphics and programming Twitter page

Blender: mattoni con l'adaptive subdivision/microdisplacement

In questo terzo tutorial per Blender (aggiornato alla versione 2.93) riguardante la creazione di un muro 3D a partire da una foto ("Corso Blender: da una foto a un muro 3D"), vedremo come creare i mattoni della parete utilizzando l'Adaptive Subdivision, che viene chiamato anche Adaptive Displacement, o Micropolygon displacement, o Microdisplacement, o Tesselation, così tanti nomi sia perché in Blender questa funzionalità non corrisponde ad un unico comando, come nel caso del "Displace Modifier", ma ad un insieme di settaggi da effettuare (quindi non gli è stato assegnato un nome ufficiale), sia perché nella letteratura tecnica alcune funzioni sono state chiamate in modi diversi, sia perché questo metodo possiede non una ma due caratteristiche interessanti: l'adattività e i micropoligoni.

 

Adaptive Subdivision/Displacement:

Nel precedente tutorial https://www.graphicsandprogramming.net/ita/tutorial/blender/modellazione/blender-mattoni-modificatore-displace abbiamo creato un muro di mattoni con il modificatore "Displace", che utilizzava in modo uniforme un uguale numero di vertici/poligoni per creare i mattoni in tutta la parete, però in un caso più complesso, con un muro più lungo, potremmo essere interessati a vedere in modo più definito, con più dettagli, i blocchi più vicini, mentre i mattoni più lontani possono anche essere realizzati con meno vertici, in quanto sono più lontani e meno visibili. Questa funzione è realizzata attraverso l'Adaptive Subdivision: come vedete in figura

la parte del muro più vicino alla Camera, in basso, utilizza più vertici per rappresentare gli oggetti più vicini, mentre quelli più lontani sono costituiti da meno vertici, con opportuni riflessi ed ombre che supliscono ad una risoluzione minore.

 

Micropolygons:

Altra caratteristica fondamentale del Microdisplacement sono i micropoligoni, che permettono di aggiungere dettagli ad una mesh, solo in fase di rendering, a partire da un'immagine. Da questo punto di vista le mappe utilizzate ricordano un po' le bump map, che aggiungevano piccoli dettagli sensibili alla luce utilizzando il materiale, solo che in questo caso nel rendering la mesh sembrerà realmente deformata, come se stessimo utilizzando un modificatore "Displace". In Blender possiamo anche scegliere la grandezza dei micropoligoni (da 0.5 px in su) ovviamente più grandi sono più grossolana sarà la perturbazione risultante della mesh.

 

Creare i mattoni con il Microdisplacement:

Utilizziamo un esempio simile a quello del tutorial precedente, riguardante il modificatore "Displace": creiamo un piano centrato, importando l'immagine "diffuse_map.jpg" raffigurante il muro, richiamando l'addon con "File > Import > Images as Planes"

Importiamo quindi dall'esempio del tutorial precedente la lampada, oppure premiamo i tasti "Shift+A" e poi scegliamo "Light > Sun", creiamo una lampada "Sun" con Strength:4.5 con posizione (X:-2.88183 m, Y:-1.41398 m, Z:2.8909 m) e rotazione (X:48.7941°, Y:-1.17007°, Z:297.408°).

Creiamo quindi una Camera, lasciando i valori di default e con posizione (X:1.17253 m, Y:-2.66012 m, Z:-0.016343 m) e rotazione (X:90°, Y:0°, Z:22.2°). 
Procediamo ora con la costruzione dei mattoni del muro, in 4 mosse:

1. Da anni il Microdisplacement viene classificato tra le "caratteristiche sperimentali" e funziona solo con il motore di rendering Cycles, quindi nella scheda "Render Properties" della "Properties Window" settiamo "Render Engine:Cycles" e "Feature Set:Experimental"

2. Selezioniamo il piano in "Object Mode", clicchiamo in alto su "Shading" per accedere al workspace dei materiali, dove sono presenti i nodi premiamo i tasti "Shift+A" e aggiungiamo con "Texture > Image Texture" la mappa di displacement "displacement_map.jpg". Sempre premendo i tasti "Shift+A" creiamo il nodo "Vector > Displacement", che regola l'intensità dello sbalzo, che poniamo tra la texture e la porta "displacement" del "Material Output". 

In questo modo abbiamo collegato la mappa da cui leggere i dati per il displacement.
Per controllare meglio i risultati del displacement, per il momento scolleghiamo la texture "diffuse" dallo shader "Principled".

3. Nel passo precedente abbiamo collegato la mappa di displacement al "Material Output", ma la sua porta "displacement" serviva solo alle "bump map" per simulare piccoli dettagli sulla superficie; ora vogliamo cambiarne funzionalità, quindi accediamo alla scheda "Material Properties" e in "Settings > Surface > Displacement" cambiamo l'opzione da "Bump Only" a "Displacement Only" (solo "Displacement" perché vogliamo utilizzare questa funzione solo per il displacement) 

4. Selezioniamo il piano e associamo ad esso un modificatore "Subdivision Surface", che serve per regolare il tasso di suddivisione dei micropoligoni, nel quale spuntiamo l'opzione "Adaptive Subdivision" per attivare la suddivisione che cambia in base alla distanza dalla Camera (e "Simple" per mantenere i bordi del piano invariati). 

Il parametro "Dicing Scale" permette di cambiare la scala di definizione del microdisplacement sia per l'anteprima "Rendered" nella 3D Viewport che per il Rendering vero e proprio (in modo da lavorare agevolmente su altre parti della scena risparmiando risorse computazionali). Per esempio

di default sono settati i valori 1px per il "Render" e 8px per la "Viewport", che sono le dimensioni dei micropoligoni di cui avevamo parlato prima, quindi in "Render" verranno utilizzati dei micropoligoni più piccoli, mentre in "Viewport" più grandi, alleggerendo così i calcoli durante l'anteprima.
Questi valori di default possono essere modificati nella scheda "Render properties" nel sottopannello "Subdivision", 

dove, eventualmente, si può settare valori più piccoli per il "Render", ma non minori di 0.5, oppure dare a "Viewport" valori più grandi se si hanno problemi di risorse.
Nel sottopannello "Subdivision" vediamo altri tre parametri, come "Offscreen Scale" che specifica quale deve essere la definizione delle parti di una mesh che sono fuori dalla vista della Camera. Per valori alti di "Offscreen Scale" le parti fuori dalla vista saranno rappresentate risparmiando sulle risorse, per esempio ruotando la Camera e ponendo valore "Offscreeen Scale" a 25, si nota un risparmio nelle parti cerchiate più lontane dalla vista,

mentre per valori bassi, per esempio 1, le parti più nascoste dalla vista della Camera sono più definite.

Il parametro "Max Subdivisions", invece, stabilisce un tetto alla definizione della mesh: anche se per una certa distanza si possono effettuare più divisioni più del parametro inserito, non ne esegue. Infatti se confrontiamo la situazione con il valore di default 12 con un valore 5 per "Max Subdivisions", notiamo che anche se ci avviciniamo alla Camera il numero di suddivisioni non aumenta, ma ad un certo punto si ferma.

Nell'ultimo parametro "Dicing Camera" possiamo inoltre inserire una Camera di riferimento per il calcolo delle suddivisioni, così non si creano artefatti durante le animazioni.

Tornando alla realizzazione del nostro muro, come nel tutorial riguardante il modificatore "Displace" inseriamo, come "Environment texture" nelle "World Properties", l'immagine hdr "neurathen_rock_castle_2k.hdr" 

Dato che la nostra scena è semplice e con pochi vertici, per poter osservare più agevolmente il nostro oggetto diamo anche nella viewport una dimensione dei micropoligoni pari ad 1px

Accediamo alla modalità di visualizzazione "Rendered" e notiamo che i mattoni sono troppo sporgenti

Andiamo quindi nel workspace "Shading" e nel nodo "Displacement" diminuiamo il valore di "Scale" portandolo a 0.015

ottenendo un risultato più corrispondente ai nostri desideri

Premendo il tasto 3 nel tastierino numerico nella viewport, guardiamo il muro di lato e notiamo che i mattoni risultano in rilievo però spostati "dentro" la mesh, mentre noi vogliamo che sporgano fuori

cambiamo allora il valore di "Midlevel" (nel nostro caso lo poniamo a zero)

per portare così a livello i mattoni.

Dalla vista Camera (ottenuta premendo il tasto 0 sul tastierino numerico) possiamo vedere già un muro di mattoni interessanti.

Ricolleghiamo ora la texture della "diffuse map", cambiamo il valore di "Specular" a 0.177

e ricaviamo

Ottenendo, come nel caso del modificatore "Displace", una buona forma per i mattoni del muro.

L'adaptive subdivision porta a dei benefici in quanto permette di risparmiare sulla memoria, permettendo di renderizzare più velocemente e creare con le stesse risorse hardware scene più complesse, ottimizzando vertici con la distanza dalla Camera, con una mesh che resterà leggera in fase di modellazione, rimandando i dettagli alla fase di renderizzazione. D'altra parte presenta ancora alcuni difetti:

- Può essere utilizzato con il motore di rendering Cycles, ma non con Eevee.
- Visualizzando i rilievi solo nel rendering , il microdisplacement non può essere utilizzato per oggetti destinati alla stampa 3D (un piano con associato un Adaptive Displacement, in Solid view resta solo un piano, senza i rilievi aggiunti con tale metodo, e così risulterà in qualsiasi altro software dove verrà esportato)
- Nella pila dei modificatori, il "Subdivision Surface" adattativo per funzionare bene deve stare in fondo, in modo da essere l'ultimo modificatore utilizzato prima del rendering; se viene spostato prima perderà alcune sue proprietà: consideriamo come esempio una "sequenza di asteroidi"

realizzata a partire da questo oggetto (un cubo a cui era già stato applicato un modificatore "Subdivision Surface" non adattativo in precedenza) 

con settata la versione sperimentale di Cycles, materiale con opzione "Surface > Displacement:Displacement Only" e materiale con una texture "Noise Texture" con nodo "Displacement"

e modificatore "Subdivision Surface" adattativo in coda ad un modificatore "Array"

il risultato sarà quello desiderato

mentre se trasciniamo il modificatore "Subdivision Surface" sopra a quello "Array", facendolo agire così prima, si trasformerà "magicamente" in un modificatore non adattativo, perdendo tutte le sue proprietà sopra enunciate  

Un'ultima osservazione: se si creano delle istanze, bisogna ricordarsi di posizionare la camera davanti all'oggetto originale.

Salviamo il file come "adaptive_subdivision_microdisplacement.blend".

Potete scaricare qui i files di progetto:
displacement_map.jpg
diffuse_map.jpg
adaptive_subdivision_microdisplacement.blend
world hdri

Per questo tutorial sull'adaptive subdivision è tutto; abbiamo visto che è uno strumento utilissimo, anche se a volte presenta delle limitazioni e comportamenti indesiderati. Speriamo che in futuro venga migliorato e diventi uno standard anche per Blender. 
Arrivederci al prossimo tutorial, dove vedremo come dare al nostro muro un materiale PBR (Physically Based Rendering) in modo da renderlo il più realistico possibile. Happy Blending!

Torna al corso "Da una foto a un muro 3D"

Se ti è piaciuto l'articolo condividilo con un amico:

Articoli correlati:

Blender: mattoni del muro con il modificatore displace

In questo tutorial per Blender in italiano (aggiornato a Blender 2.93) continuiamo il minicorso su come realizzare un muro in ...

Leggi l'articolo >

Blender tutorial: materiale PBR per il muro di mattoni

In questo quarto tutorial del minicorso in italiano per Blender "Corso Blender: da una foto a un muro 3D", vedremo ...

Leggi l'articolo >

 

Vai alla lista dei tutorials: > Blender <