Salve a tutti!

Questo è il primo di due tutorials, realizzati in riferimento alla versione 2019 di Substance Painter, sull'esportazione delle Textures da questo programma verso varie destinazioni: da altri software 3D (come Unity, Unreal, V-Ray e altri), a set di Textures generici per il paradigma PBR (Physically Based Rendering).

Nei tutorial che ho pubblicato finora nella Playlist Youtube “Videotutorials Substance Painter – Tutti”, infatti, ho mostrato come utilizzare Materiali, maschere, pennelli ed altri strumenti, ma non come esportare i risultati ottenuti sotto forma di immagini Textures UV-mappate da utilizzare, sui modelli, in altri software.

Questa operazione può sembrare semplice (in teoria, è sufficiente cliccare su Export Textures nel menù File e procedere), ma in realtà ci sono un paio di cose da tenere a mente, soprattutto per evitare errori in fase di Export (nella finestra Log di Substance) o, ancora peggio, nelle Textures generate per i vari programmi, che finirebbero per mostrare materiali diversi da quelli realizzati in Substance.

A differenza di quanto avviene con la maggior parte dei miei tutorials su Substance Painter, gli Assets (i modelli 3D e le altre risorse) utilizzati in questo tutorial NON sono disponibili; tuttavia, è possibile seguire il tutorial e imparare senza dover replicare le operazioni con questi oggetti in particolare!

Ok, fatte tutte queste premesse, iniziamo!


IL PROGETTO CHE UTILIZZEREMO IN QUESTO TUTORIAL

Ho creato un nuovo progetto Substance con il template “PBR – Metallic Roughness (Allegorithmic)”, lo stesso utilizzato nei videotutorial pubblicati precedentemente nella Playlist su Youtube; dopo aver importato un modello 3D, ho dotato tale modello di un paio di materiali di default di Substance, che quindi – con il template scelto – presentano i seguenti canali di informazione:

  • Base Color
  • Height
  • Roughness
  • Metallic
  • Normal

SP 2019 20191028 006 Esportare le Textures I parte Presets nativi 01


ESPORTIAMO CON IL PRESET PER UNITY 5 (STANDARD METALLIC)

Adesso supponiamo di voler esportare i set di Textures (tre, nel mio caso: uno per ciascun Texture Set dell'elenco Texture Set List), ad esempio per Unity 2019.

Per prima cosa, apriamo il menù File e scegliamo la voce Export Textures.

SP 2019 20191028 006 Esportare le Textures I parte Presets nativi 02

Nella finestra “Export Document – Export” possiamo impostare alcuni parametri; tra questi, notiamo in particolare:

  • cliccando sul pulsante in cima, il percorso su disco ove memorizzare le immagini Textures da creare;
  • accanto a tale pulsante, il formato del file (di default, dovrebbe essere PNG) e la profondità in bit (di default, 8 bit per canale);
  • nel menù Config, il preset di esportazione; nel nostro caso, scegliamo Unity 5 – Standard Metallic;
  • la risoluzione delle Textures; come anticipato in un tutorial precedente della Playlist, è possibile lavorare con una risoluzione ridotta e poi impostare una risoluzione maggiore, per le Textures da generare in esportazione, in questa sede.

SP 2019 20191028 006 Esportare le Textures I parte Presets nativi 03

In teoria, quindi, tutto dovrebbe essere pronto per l'esportazione, eppure cliccando su Export otteniamo il messaggio di errore “Esportazione terminata con alcuni errori (vedere Logs)”...

SP 2019 20191028 006 Esportare le Textures I parte Presets nativi 04


  

ERRORI DI ESPORTAZIONE: CANALI DI INFORMAZIONE MANCANTI

Diamo quindi un'occhiata alla scheda Logs, attivabile da Window – View – Log, se non disponibile.

In questa scheda, leggiamo che nei tre Textures Set mancano due canali di informazione: OPACITY ed EMISSION.

SP 2019 20191028 006 Esportare le Textures I parte Presets nativi 05

Per capire il perché di questo errore, apriamo nuovamente la finestra Export Textures, dal menù File, ma questa volta passiamo alla scheda CONFIGURATION, nella finestra “Export Document”, selezionando poi il preset Unity 5 – Standard Metallic per esaminarlo.

SP 2019 20191028 006 Esportare le Textures I parte Presets nativi 06

Come possiamo osservare, il preset di esportazione per Unity 5 con workflow Metallic prevede la creazione di 4 immagini Textures:

  • un'immagine di tipo RGB+A (dove A sta per Alpha, il canale di opacità o di trasparenza), chiamata “Albedo Transparency”, che andrà passata al canale Albedo di Unity e che avrà il Base Color nei tre canali RGB e la mappa Opacity nel canale Alpha;
  • un'immagine di tipo RGB+A, che in questo caso memorizzerà in RGB le informazioni Metallic e, nel canale di trasparenza Alpha, le informazioni derivanti dalla Converted Map – Glossiness;
  • un'immagine di tipo RGB, chiamata Normal, creata non a partire da Input Map – Normal, ma da Converted Map – Normal OpenGL; questa distinzione è importante perché la mappa così generata non porterà con sé solo le informazioni definite nel canale Normal, ma anche quelle definite nel canale Height (ricordate, ad esempio, il mio tutorial sulle scuciture della cintura?); in questo modo, Normal ed Height verranno fuse in un'unica mappa Normal che potrà essere utilizzata da Unity 5;
  • per finire, un'immagine RGB, chiamata Emission, generata a partire dal canale Input Maps – Emissive, utile per i materiali emettitori di luce (lampadine, fiamme, luci al led, neon, eccetera).


SCELTA DEL GIUSTO FORMATO FILE, IN BASE AI CANALI

L'esistenza di immagini RGB+A, quindi col canale di trasparenza, in questo preset, ci fa capire anche un'altra cosa: nella scheda Export dovremo scegliere un formato di file in grado di incapsulare questi 4 canali.

La voce selezionata di default da Substance, ovvero PNG a 8 bit, va benissimo, perché il formato PNG prevede già i 4 canali RGBA, mentre un formato di file come JPG o BMP non andrebbe bene, perché quei formati prevedono solo i tre canali RGB, senza l'informazione Alpha, per cui – nel caso del Preset Unity 5 Metallic – verrebbero a mancare sia la trasparenza (Opacity) sia la Smoothness del materiale (Glossiness).

SP 2019 20191028 006 Esportare le Textures I parte Presets nativi 07


AGGIUNGERE I CANALI DI INFORMAZIONE PER I TEXTURE SETS

Ok, abbiamo detto che ci servono le informazioni anche per Opacity ed Emissive; già, ma come aggiungere questi canali di informazione per i nostri Materiali?

La risposta sta nella scheda Texture Set Settings: qui troviamo l'elenco dei canali di informazione presenti per un materiale e, accanto a ciascun canale, anche un dettaglio tecnico: lo spazio di colore o di informazione da associare a ciascun canale; ad esempio, per Base Color abbiamo, come impostazione di default, sRGB8, cioè un'immagine a colori in spazio colore sRGB con 8 bit di informazione per canale, mentre per i canali esprimibili in scala di grigi (come Roughness e Metallic) abbiamo un numero a 8 bit in spazio lineare (la lettera L), mentre per Height abbiamo un'immagine in spazio lineare a 16 bit in virgola mobile (16F) e per le Normal Maps abbiamo un'immagine a colori (RGB) con 16 bit di precisione in virgola mobile (16F).

SP 2019 20191028 006 Esportare le Textures I parte Presets nativi 08

Da notare che per Height e per Normal sono previsti ben 16 bit di informazione, ma tenete a mente che in fase di esportazione, con le impostazioni di default della scheda Export Document (dove, come abbiamo visto, il valore impostato è 8 bit), queste informazioni verranno comunque compresse per entrare in 8 bit.

Per aggiungere i canali Opacity ed Emission al Texture Set attualmente selezionato, quindi, cliccare sul simbolo + accanto a Channels e scegliere tali canali dall'elenco che apparirà; Substance Painter imposterà in automatico il tipo di dato da utilizzare per questi due canali (per la cronaca, si tratta di un numero a 8 bit in spazio lineare, L8, per Opacity, che viene quindi espressa con un'immagine in scala di grigi, mentre per Emissive abbiamo un'immagine a colori, nello spazio colore sRGB8, perché l'emissione luminosa può essere anche colorata: non si tratta quindi della semplice intensità dell'emissione, che avremmo potuto esprimere con L8, generando un'immagine in scala di grigi, ma sia del colore che dell'intensità).

SP 2019 20191028 006 Esportare le Textures I parte Presets nativi 09

Attenzione, però: abbiamo aggiunto questi due canali di informazione solo per il Texture Set corrente; per evitare errori, dobbiamo ripetere l'operazione anche per gli altri Texture Set del progetto...

… oppure, la prossima volta, creare il progetto con un Template adatto ai nostri scopi; ad esempio, per quanto riguarda Unity 5, Substance Painter 2019 mette a disposizione il Template “Unity 5 (Allegorithmic)”, in fase di creazione di un nuovo progetto, in modo da trovare queste e altre impostazioni già ottimizzate per l'esportazione verso Unity 5. Nel prossimo tutorial, nel quale vedremo come creare un Preset personalizzato, vedremo anche come creare un nostro Template.


VERIFICARE LE INFORMAZIONI PER TUTTI I CANALI; UTILIZZO DEL FILL LAYER (RIEMPIMENTO)

Dopo aver aggiunto i canali di informazione mancanti per tutti i Texture Set, guardiamo tali canali separatamente nella vista 3D scegliendoli dal selettore in alto a destra nella 3D View oppure premendo più volte lo shortcut “C”, per cambiarli in maniera ciclica (shortcut “M” per tornare alla vista complessiva del Material).

Per alcuni canali notiamo che, in realtà, Substance non sta generando le informazioni: ce ne accorgiamo per via della Texture a scacchiera applicata, nel mio esempio, a canali come Normal, Height, Opacity ed Emission.

SP 2019 20191028 006 Esportare le Textures I parte Presets nativi 10

L'assenza di queste informazioni può costituire un problema non indifferente, in fase di esportazione: Substance, infatti, finirà per dare comunque un valore a questi canali nelle Textures, ponendo tipicamente a nero il colore di alcune Textures come Opacity o Emission; se per Emission questo, in genere, va bene (perché nella maggior parte dei casi i materiali non emettono luce), non va bene per Opacity, perché Opacity a nero (ossia 0) vuol dire, in realtà, oggetto trasparente!

Ci sono varie possibili soluzioni, per questo problema; qui vi dico cosa faccio io di solito: per ogni Texture Set del progetto aggiungo, sul fondo, un Fill Layer di default, ovvero un livello di riempimento; di default, questo tipo di livello ha Height ed Emission a 0.0 (nero: nessun rilievo né emissione luminosa) e, di contro, Opacity a 1.0 (bianco, oggetto opaco, non trasparente): impostazioni che, nelle maggior parte dei casi, vanno benissimo.

SP 2019 20191028 006 Esportare le Textures I parte Presets nativi 11

Il Fill Layer va inserito, come detto, in basso nella pila Layers di ogni Texture Set: in questo modo non coprirà le informazioni degli altri livelli presenti e finirà solo per riempire i canali di informazione mancanti con dei valori di default che, in genere, andranno bene.

SP 2019 20191028 006 Esportare le Textures I parte Presets nativi 12


RICAPITOLANDO...

Ricapitolando: quando creiamo un progetto, dovremmo partire dalla scelta del Template opportuno in base al software di destinazione, in modo da avere i canali di informazione e altre impostazioni adatte.

In caso di canali di informazione mancanti, possiamo risolvere il problema aggiungendo quelli necessari (ed eventualmente modificandone le impostazioni tecniche) in Texture Set Settings, per ogni Texture Set presente nella List, per il progetto corrente.

Prima di procedere all'esportazione, possiamo scorrere tra i canali con C nella vista 3D per individuare eventuali informazioni mancanti e, in caso, risolvere il problema con un Fill Layer, ossia un livello di riempimento da porre in fondo alla pila di livelli e materiali nella scheda Layers, per ciascun Texture Set del progetto.

Prima di esportare il tutto, infine, controllare il formato del file, impostandone uno con canale Alpha (ad esempio, PNG) se tale informazione è richiesta, altrimenti un altro formato, a seconda delle esigenze.

Per questa prima puntata di due sull'esportazione delle Textures da Substance Painter, è tutto!

Nella prossima puntata vedremo come definire un nostro Preset di esportazione personalizzato, in modo da esportare le Textures che ci interessano e, tra le altre cose, crearle con uno schema di nomi personalizzato, mediante le variabili macro di Substance; vedremo, inoltre, come creare un nostro Template, con le impostazioni che intendiamo avere per tutti i nostri nuovi progetti.

Come sempre, vi invito ad esprimere dubbi, domande o richieste di chiarimenti nei commenti al video, su Youtube. A presto!