Questo articolo racconta il lavoro che ho svolto come 3D Artist su THE NEWZEALAND STORY: Untold Adventure, progetto sviluppato in Unity su licenza Taito.
Il focus principale è il workflow adottato per ottenere asset visivamente tridimensionali in un contesto 2D, sfruttando le Secondary Textures di Unity, insieme al lavoro di environment art e alla produzione di materiali tileabili tramite Substance Designer.
Motore di gioco e approccio visivo
Il gioco è stato sviluppato in Unity utilizzando un approccio 2D avanzato. L’obiettivo era ottenere profondità, volume e reattività alla luce senza utilizzare mesh 3D in scena, ma partendo da render bidimensionali.
Il riferimento stilistico principale per gli asset è stato Super Mario Wonder: uno stile cute, cartoon, stylized, con forme morbide e volumi ben leggibili.
Secondary Textures: cosa sono e perché usarle
Le Secondary Textures permettono a uno sprite 2D di reagire alle luci come se fosse un oggetto tridimensionale. In pratica, a una Base Color vengono associate altre mappe (come Normal Map e Mask Map) che Unity utilizza nel calcolo dell’illuminazione.
Per una spiegazione tecnica più approfondita del sistema di Secondary Textures in Unity, consiglio questo video
Questo sistema consente di simulare un asset 3D usando più render sovrapposti.
Asset example: modellazione del fiore
Come esempio pratico prendo un singolo asset: un fiore.
Il primo step è stato la modellazione in Blender. In un normale workflow game-ready bisognerebbe rispettare polycount e topologia pulita, ma in questo caso questi vincoli possono essere bypassati: l’asset servirà solo per il render, non verrà mai importato come mesh in engine.
Questo mi ha permesso di concentrarmi completamente su:
- Leggibilità visiva;
- Silhouette;
- Volumi.

Base Color: costruzione di una mappa flat
Il primo render prodotto è la Base Color (BC).
L’asset viene colorato in modo molto flat, senza texture complesse. La caratterizzazione finale non dipende dalla BC, ma da:
- Normal Map;
- Mask Map.
Nel materiale:
- Il risultato viene miscelato con due Diffuse Color, uno più chiaro e uno più scuro;
- Viene impostata una Ambient Occlusion minima tramite il nodo dedicato;
- Uso una ColorRamp per avere più controllo.

In questo modo l’AO non rimane bianco e nero, ma diventa una maschera cromatica che aggiunge profondità ai colori.
Per il render:
- Film su Transparent;
- World shader con Background bianco (strength 1);
- Nessuna luce in scena.
Le ombre non vengono fakeate in questa fase, perché verranno gestite successivamente tramite Normal e Mask Map.

Render della Normal Map
Per la Normal Map:
- In Blender viene assegnato un materiale Normal sia alla mesh sia al World (tramite nodo Background);
- Il Film non deve essere trasparente.

A questo punto si procede con il render della Normal Map.

Mask Map: controllo degli highlight
La Mask Map serve a controllare dove e come la luce influenzerà l’asset.
In Blender:
- Il materiale utilizza una ColorRamp che va dal rosso al nero;
- Viene aggiunta una luce Sun in scena;
- Il World Background viene portato a strength 0.
In questo modo compaiono dei contorni rossi sulla mesh, che rappresentano le zone influenzate dalla luce.

Il render viene poi portato in Photoshop, dove:
- Le parti interne che non devono ricevere highlight vengono colorate di nero.

L’immagine finale viene salvata come Mask Map.

Import e ottimizzazione delle texture in Unity
Una volta importate le mappe in Unity, vengono ottimizzate. Queste impostazioni sono specifiche del progetto, non universali:
- Disable Generate Physics Shape;
- Disable Generate Mip Maps;
- Max Size: 1024.
Un esempio concreto:
- Base Color da 5.3 MB a circa 1 MB.
La Normal Map viene impostata con Texture Type: Normal Map, mentre la Mask Map viene ottimizzata come texture standard.

Setup delle Secondary Textures
A questo punto si lavora sulle Secondary Textures:
- Si apre lo Sprite Editor della Base Color;
- In alto a sinistra si accede alla sezione Secondary Textures;
- Si aggiungono:
- Normal Map;
- Mask Map.
- Ogni texture viene correttamente taggata tramite il menu a tendina;
Ora lo sprite è pronto per reagire alle luci.

Illuminazione 2D e profondità della scena
Per l’illuminazione utilizziamo una Light 2D – Freeform (Circle):
- Overlap Operation: Alpha Blend;
- Normal Maps: Accurate;
- Distance regolata in base alla scena.
Un aspetto fondamentale è la gestione dei Sorting Layers:
- Ogni luce può influenzare solo specifici layer;
- Questo permette di creare profondità visiva nella scena.
Per questo motivo è importante progettare fin dall’inizio i gruppi di asset e layer che ogni luce deve influenzare.

Parallax e organizzazione della scena
Oltre ai Sorting Layers, abbiamo utilizzato uno script di parallasse:
- Viene assegnato a un GameObject vuoto;
- Gli elementi visivi vengono inseriti come figli;
- Dal parent si controlla la velocità tramite uno slider.
Questo sistema consente di gestire facilmente la profondità e il movimento dei diversi piani.

Risultato finale: 3D fake, ma credibile
Grazie alle Secondary Textures, importando la Base Color in scena l’asset reagisce alle luci tramite:
- Normal Map;
- Mask Map.
Visivamente sembra un asset 3D, ma in realtà è composto da tre render 2D sovrapposti.

Fake shadows tramite Light 2D
Le ombre sono state simulate:
- All’interno dei prefab degli asset vengono inserite Light 2D Freeform;
- La loro intensità viene portata a 0;
- È possibile decidere su quali layer proiettare l’ombra.
Questo consente, ad esempio, di escludere cielo o elementi lontani dalla proiezione dell’ombra.

Environment Art e materiali tileabili
Oltre agli asset singoli, mi sono occupata della composizione dell’environment e della creazione di materiali tileabili tramite Substance Designer, competenza che ho sviluppato durante la produzione.
Nel progetto sono presenti diversi materiali tileabili, di cui inserirò alcuni screen come esempio.








Substance Designer e gestione delle tile
Substance Designer è stato fondamentale nella gestione delle tiles.
Un esempio concreto riguarda il mondo 3:
- Base di colore uniforme;
- Generazione procedurale di rocce su tutta la mappa;
- Mascheratura delle aree non necessarie.
Da qui ho renderizzato tutte le varianti dei contorni di roccia per le tile e, insieme a un collega, abbiamo creato le atlas.

Tool di generazione dei livelli
Le atlas vengono importate in Unity e il livello viene rigenerato tramite un tool interno.
Il tool utilizza mappe realizzate in Photoshop contenenti:
- Tile;
- Meta-tiles;
- Nemici;
- Acqua;
- Spikes.
Il riconoscimento degli elementi avviene tramite codici HEX.

Conclusioni
Questo progetto mi ha permesso di imparare moltissimo:
- Uno stile visivo in cui mi sto specializzando;
- Nuove tecniche di rendering 2D avanzato;
- Un utilizzo concreto e produttivo di Substance Designer.
THE NEWZEALAND STORY: Untold Adventure è stato un progetto estremamente formativo, sia dal punto di vista tecnico che artistico, e ha avuto un ruolo chiave nella definizione del mio percorso come 3D Artist.
Galleria


































