Nanite & Foliage - Complete Workflow
Bonjour a tutti!
Se mi seguite sui vari social (LinkedIn o Instagram), ormai sarete a conoscenza del mio recente interesse per Nanite e la vegetazione. Con questo post vorrei dettagliare il mio flusso di lavoro e ciò che ho imparato durante questo progetto.
Tuttavia, vi prego di notare che questo non è assolutamente un tutorial né l'unico modo per fare le cose. È semplicemente il flusso di lavoro che ho sviluppato e utilizzato per creare questa scena. Sono ancora convinto che ci sia molto margine di miglioramento
Speedtree - Creazione degli Alberi
Anche se Nanite offre grande libertà per quanto riguarda i budget di triangoli (tris), non è illimitato. Per questo motivo ho deciso di puntare a un numero di poligoni tra uno e due milioni di tris per albero. Questo è infinitamente troppo pesante per un gioco, ma essendo parte di una scena, mi sono concesso questa libertà. È anche importante sapere che la maggior parte del numero di poligoni proviene dalla vegetazione, che può essere ulteriormente ottimizzata. Da notare che la logica di creazione rimane la stessa che sia utilizzato Nanite o meno: meno poligoni ci sono, meglio è.
Lavorare con i tronchi scansionati - Il primo passo nella creazione degli alberi è stato sfruttare al massimo Nanite, motivo per cui ho deciso di utilizzare tronchi scansionati da Megascans. Nonostante l'uso di Nanite, ho scelto di utilizzare LOD3 per maggiore comodità, in quanto i LOD inferiori sono troppo pesanti.
Prima di continuare e proseguire con la creazione dell’albero, inizio sempre creando una texture tiling della mia scansione, quando possibile. Alcuni asset sono così specifici che a volte è meglio utilizzare texture tiling disponibili su Megascans o altre librerie. Per creare una texture tiling basata sulla parte scansionata, puoi utilizzare lo strumento Mesh Converter, che è stato creato appositamente per questo scopo. Nota anche che può aiutarti a convertire un asset scansionato in un asset Speedtree, il che può essere molto utile nel caso di ottimizzazioni su larga scala.
Grazie allo strumento “Stitch”, è possibile combinare abbastanza facilmente asset personalizzati e asset Speedtree. Anche se deve essere posizionato correttamente, è di grande aiuto nel combinare i due tipi di asset. Da notare che lo Stitch viene sempre con un ramo che rappresenta la continuità del tronco. È a questo ramo che devi assegnare la texture che abbiamo creato prima.
Good to know - Per fare in modo che la transizione tra Stitch e la mesh funzioni perfettamente, è necessario fare il bake di queste informazioni selezionando la tua mesh, andando su "Material" e utilizzando l'opzione "Bake Stitch Tool". Da qui puoi fare il bake delle texture solo, o creare automaticamente uno shader con esse.
Flusso di lavoro della struttura - Il resto della struttura è abbastanza simile a quello di Speedtree in generale. Ma poiché con Nanite non è necessario fare il bake di interi rami per utilizzarli su piani per ottimizzare gli alberi il più possibile, la vera differenza è il numero di livelli di rami 3D, che è maggiore rispetto a un flusso di lavoro tradizionale.
Specifiche dell'Atlas Nanite - Sebbene di solito sia necessario includere il maggior numero possibile di rami di dimensioni diverse in un atlas, anche in questo caso Nanite richiede di lavorare in modo diverso rispetto alla vegetazione tradizionale.
Non è necessario fare il bake di atlases con decine di fasi di rami differenti, bastano alcuni rami piccoli. Questo non solo riduce il numero di elementi in un atlas, ma significa anche che gli elementi possono essere resi più grandi, migliorandone così la qualità. Poiché gli elementi sono più grandi, la loro risoluzione è anche più alta, riducendo il "sfuocamento" presente negli atlases con troppi elementi o quando non viene rispettata la dimensione degli elementi.
Guarda tu stesso il confronto tra un atlas per un approccio tradizionale e l'altro per Nanite.
Una volta che l'atlas è completo, possiamo ritagliare i piani per dettagliare i nostri vari rami. Ma affinché Nanite funzioni a piena velocità, è imperativo rimuovere tutta la trasparenza, specialmente dalla vegetazione. Quindi dobbiamo trovare un modo per convertire una mesh classica, basata su una maschera di opacità, in una mesh totalmente opaca che possa fare a meno di questa maschera problematica.
Good to know - Puoi imparare come creare questi alberi con un flusso di lavoro ibrido (struttura 3D in Nanite e vegetazione in LOD) nel mio corso Old West Environment
Houdini - Convertire mesh basate su alpha in opache
È qui che ringrazio Quentin King e il suo video che mostra come creare lo strumento per convertire una mesh basata su alpha in una geometria opaca in Houdini. Se vuoi sapere come viene realizzato lo strumento o anche ricrearlo, ti consiglio vivamente di guardare il suo video.
Per quanto mi riguarda, ti mostrerò solo cosa puoi fare con questo strumento.
Come puoi vedere, una volta configurato correttamente, lo strumento funziona perfettamente e fa risparmiare un'enorme quantità di tempo rispetto al lavoro manuale. Sebbene in teoria questo strumento funzioni su tutti i tipi di asset che utilizzano una maschera di opacità, l'ho testato solo sulla vegetazione.
Ora guarda il risultato con i nostri asset di rami utilizzando lo strumento su vari alberi utilizzati per questa scena.
Creazione della Vegetazione del Suolo
L'approccio per la vegetazione del suolo è abbastanza simile a quello utilizzato per i rami. Ho iniziato con delle maschere di ritaglio basate su una maschera di opacità, che ho rimosso utilizzando lo strumento mostrato sopra.
La vera difficoltà con questo tipo di asset è mantenere la coerenza nel conteggio dei tris in ogni asset. Poiché ogni asset viene duplicato molte volte, è consigliabile mantenere i valori non troppo elevati. Ad eccezione dell'erba, che supera i 170k tris, e dei fiori viola, che si avvicinano ai 100k, il resto dei miei asset non supera i 30k.
Ancora una volta, mi sono preso la libertà di raggiungere questi valori perché mi trovo in una scena, non in un gioco. Se dovessi adottare un approccio simile per un gioco, ti consiglierei di non superare mai i 10k per asset. Anche se Nanite gestisce molto bene gli asset con un numero molto alto di triangoli, meno triangoli hanno i tuoi asset, più efficiente sarà Nanite e migliore sarà la gestione dei tuoi budget.
Speedtree - Vento
Inizialmente, la mia scena non doveva contenere vento e solo riprese statiche per il rendering. Consapevole dell'impatto che può avere sulle prestazioni avere asset Nanite con il vento, non ero sicuro di volerci provare. Ma poi ho pensato che sarebbe stato un vero peccato non provarci, quindi ho deciso di rischiare e ci ho dato un'occhiata.
"Legacy Unity / Unreal Engine" e formato .st - Ho iniziato con l'approccio classico e, anche se i miei asset si muovevano bene quando importati, una volta convertiti in Nanite, era impossibile farli muovere. Ho pensato che doveva esserci un problema nel preservare le informazioni del colore dei vertici, quindi sono passato al secondo approccio.
Pivot Painter (IGToolsPP) -Sebbene questo approccio sia estremamente impegnativo in termini di risorse, ero disposto ad adottarlo se mi avesse permesso di far muovere i miei alberi una volta convertiti in Nanite. E ha funzionato, gli alberi si muovono con questo approccio, aggiungere la funzione per rendere lo strumento compatibile con uno shader personalizzato è piuttosto semplice e l'effetto vento è abbastanza interessante.
Tuttavia, dover passare attraverso uno strato specifico per configurarlo mi sembrava piuttosto complicato, soprattutto su decine di asset diversi. Anche se l'opzione di copia/incolla è disponibile, non mi sembrava l'approccio migliore. Inoltre, sembra esserci un problema con la normale del tronco, che potrebbe essere causato dalla mia scarsa conoscenza di questo strumento. È stato allora che ho pensato al secondo tipo di vento che Speedtree offre.
"Game" e formato .st9 - Dopo i due fallimenti precedenti, non ero davvero sicuro di voler provare questo nuovo approccio. Ero convinto che sarebbe stato simile al primo tipo di vento. Tuttavia, ho deciso di rischiare e provare questo nuovo tipo di vento. Mi sono serviti alcuni tentativi prima di riuscire a capire come funzionava e quale fosse il ruolo di ogni parametro. Una volta che tutto mi è risultato più chiaro, ho configurato il mio primo albero ed esportato in Unreal.
I primi risultati non sono stati molto soddisfacenti e, anche se i miei alberi si muovevano una volta convertiti, sembravano abbastanza diversi rispetto a quanto avevo su Speedtree. Ma la differenza tra questo vento e il “Legacy” è che qui tutti i parametri sono disponibili dall'istanza del materiale in Unreal. Questo offre una grande libertà nella sua configurazione. Da quel momento in poi, ho configurato il vento dei miei alberi come base, senza più pensare al risultato finale.
Poiché ogni stadio di crescita dei miei alberi è abbastanza simile, configurando solo uno mi ha permesso di influenzare gli altri. Così ho configurato quattro tipi di vento, uno per ogni stadio di crescita: Grande, Giovanile, Sotto-piantina e Piantina.
Quindi, se devi configurare il vento sulla tua vegetazione Nanite, ti consiglio di utilizzare il tipo di vento “Game” ed esportare i tuoi asset in formato “.st9” da Speedtree 10. Sebbene questo tipo di vento sia disponibile anche nella versione 9, non l'ho testato. In questo modo, le modifiche non influenzeranno tutti i tuoi attori.
Qualche parola sugli shader
Come ormai saprai, Nanite funzionerà sempre meglio con gli shader opachi, ma se non vuoi creare un nuovo master shader o temi di rompere quello che hai già, puoi cambiare il tipo di shader (tipo di fusione) direttamente nell'istanza del materiale. In questo modo, le modifiche non influenzeranno gli attori che utilizzano lo stesso shader.
Prestazioni
Prima di procedere ulteriormente su questo argomento, è importante tenere presente che non ho effettuato test o confronti approfonditi. Quindi non condividerò nulla qui se non le mie osservazioni personali.
Rispetto ai primi giorni di questa scena, in cui utilizzavo solo vegetazione tradizionale, il guadagno in termini di prestazioni ottenuto utilizzando solo asset Nanite e uno shader opaco è davvero impressionante. È molto difficile per me fare dei punti di confronto, poiché non avevo assolutamente pensato a questo progetto in questo modo, ma molto presto, dopo essermi immerso nell'argomento, ho condiviso la mia sorpresa per le prestazioni. Lo screenshot seguente di uno dei miei post su LinkedIn, pubblicato poco dopo che ho iniziato le mie ricerche, ne è testimonianza.
Good to know - Puoi imparare come creare ciascuno degli shader utilizzati in questa scena qui
Come temevo e sapevo già, l'impatto del vento sugli asset Nanite è piuttosto significativo. In media, perdo circa 30 FPS quando il vento è attivo.
La scena finale gira a circa 45 fps in 1440p con tutti gli asset Nanite e il vento attivi su una RTX 4080, a 75 fps senza vento. È importante notare che Nanite sul terreno è estremamente esigente in termini di risorse, quindi gli asset sono lontani dall'essere ottimizzati al massimo e queste cifre provengono dall'editor e non da una versione standalone.
Tuttavia, sono convinto che con un approccio più orientato al gioco e le relative limitazioni, non sia impossibile rimanere sopra i 100 fps nelle stesse condizioni, senza vento.
Conclusione
Prima di questo progetto, pensavo che Nanite non fosse una tecnologia adatta alla vegetazione, ma oggi il mio punto di vista è cambiato. Non arriverei a dire che sia completamente funzionale e priva di problemi, ma i progressi fatti attraverso i vari aggiornamenti di Unreal Engine 5 stanno andando nella giusta direzione e rafforzano la mia convinzione che, un giorno, Nanite e vegetazione potrebbero essere una valida opzione per molti studi.
Questo progetto sarà trattato in un corso nei prossimi mesi, ma pubblicherò un nuovo post sul blog per condividere informazioni sui corsi futuri e come si evolveranno.
Grazie a tutti per aver dedicato del tempo a leggere questo post.
Non esitate a dirmi cosa pensate di Nanite sulla vegetazione, sempre con gentilezza e rispetto per le opinioni di tutti.
Link al profilo Artstation di Michael.
Articoli recenti
Asset Gratuiti FAB - fino al 16 Dicembre 2025!
Nuovi asset disponibili gratuitamente su FAB, disponibili fino al 16 Dicembre 2025!
Buona la Prima - Episodio 40
Horses Banned by Steam, but why?
A CHRISTMAS CAROL VR
A Christmas Carol VR 2025 trasforma il classico di Dickens in uno spettacolo immersivo e totalmente live