Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Ogni modello usa Material differenti. Per esempio, ogni Material di una macchina usa la stessa
texture (TextureAtlas), ma legge parti diverse della Texture, a seconda delle coordinate UV delle
parti della macchina.
Uno Shader definisce:
1. Il modo di renderizzare un oggetto; calcoli matematici come la luce, angolo di visuale, etc.
2. PSD, TIFFS vengono automaticamente convertiti da Unity senza toccare il file originale (non si
ha comunque accesso ai livelli durante il gioco)
• Non sono limitati a 16 milioni di colori, possono modificarne tra i 10-4 e i 10+8
La maggior parte delle GPU moderne riesce a gestire anche Texture con dimensioni non potenze di
due (NPOT). Le prestazioni si riducono poco, ma occupano più spazio nella RAM, ossia come la
Texture POT maggiore più piccola. È un semplice spreco di spazio. Infine, ci potrebbero essere degli
artefatti sugli spigoli causati dall'interpolazione delle mipmap. Una Texture 25×25 potrebbe avere
una fringe nera dove sono stati aggiunti pixel per far adattare la Texture su oggetti 32×32
Mipmaps
Le Mipmap sono l'equivalente per le Texture dei LOD. Aumentano sia le prestazioni della GPU che la
qualità.
• BorderMipmaps copia i pixel dei bordi su ogni livello delle mipmap, in modo che il "down
sampling" non le scolorisca.
Texture Interpolation
• Nearest Neighbor - Point (no filter)
• Bilinear
• Trilinear
• Anisotropia (filtering)
Bilinear, Trilinear e l'Anisotropic filtering possono lavorare insieme e usano le MipMap. Cambiano il
modo in cui la GPU rappresenta le Texture, ma non hanno alcun effetto sull'utilizzo della memoria
per la Texture.
Le MipMap aumentano di circa 1/3 l'utilizzo dello spazio di archiviazione, ma senza si avrebbe un
significativo Texture aliasing.
Utilizzando il Pointer come interpolazione, si rischia di far diventare apparenti i singoli Texel quando
si ingrandisce la Texture (pixelation), in quanto duplica ogni pixel. 1 Texel fetch per pixel.
• 1 lerp tra a e b
• 1 lerp tra c e d
Texture Minification
Quando una Texture viene rimpicciolita, più Texel possono andare a ricoprire la stessa cella di un
pixel. Per prendere il colore giusto per ogni pixel, dovremmo integrare l'effetto dei Texel che
influenzano il pixel.
Il Mipmapping (Multum in parvo) prende la Texture al livello 0 e la riduce a un quarto della sua reale
dimensione, spesso facendo una media dei 4 Texel vicini nella Texture originale.
L'interpolazione Trilinear è simile a quella Bilinear, ma aggiunge una sfumatura tra livelli di MipMap.
Se un pixel è a una distanza dalla telecamera pari a metà tra due livelli di MipMap, farà
un'interpolazione Bilinear sulla Texture di livello superiore, una sulla Texture di livello inferiore e poi
un'ultima tra queste due interpolazioni. Il peso delle Texture è dato dal valore della profondità
rispetto ai 2 livelli di Texture. 8 Texel fetch per pixel, 7 interpolazioni lineari.
FadeOutMipMaps [min, max] mostra dalla MipMap minima alla massima. Se si deve mostrare una
MipMap > della massima, verrà, invece, mostrato il colore grigio.
Questa opzione viene usata per le detail map per decidere a quale distanza un dettaglio debba o
meno essere visto. Funziona anche sulle Texture semplici e sulle normal map. Permette, inoltre, di
evitare l'effetto moiré sulle lunghe distanze.
Le detail map possono essere viste solo da vicino. Se non se ne fa il fade, si rischia un tiling visibile
quando ci si allontana (che è ciò che si sta cercando di evitare con questa opzione).
Il filtro Anisotropic rende le Texture visibili in modo migliore quando le si guardano da una certa
angolatura. Su un piano obliquo rispetto la telecamera, il rimpicciolimento normale con la MipMap
non è sufficiente, in quanto ogni livello è isotropico (stesso valore su diverse direzioni).
L'Anisotropic dimezza ogni asse simultaneamente. Invece di fare solo Texture 128 × 128, 64 x 64 fa
anche 128 x 64 e 64 x 128
Tipi di Superfici
È possibile scegliere tra due tipi di superfici:
1. Opaque
2. Transparent
• Premultiplied preserva i riflessi e le luci anche se trasparente. Solo le luci riflesse, quindi,
sono visibili, come i vetri.
• Additive aggiunge un livello extra sulla superficie del Material. Utile per cose simili agli
ologrammi.
• Multiply moltiplica i colori del Material con quelli dietro. Crea effetti scuri, come quando si
guarda attraverso un vetro colorato.
Edge Padding
Alcune immagini con trasparenza possono avere artefatti "color bleed" lungo i bordi. Le immagini
con gli alpha possono avere pixel colorati completamente opachi, pixel colorati parzialmente opachi
e pixel completamente trasparenti (hanno comunque un valore RGB, bianco per Photoshop).
Quando una Texture viene renderizzata, viene ridimensionata usando un'interpolazione e i pixel
trasparenti vengono mischiati con quelli colorati vicini.
Soluzione
• Assicurati che i pixel trasparenti vicini ai bordi colorati abbiano un valore compatibile (Dilate
filters)
• Object Space con un'ampia gamma di colori, tempi di rendering più veloci. È valido solo per
oggetti statici e per telecamere con punto di vista statico.
• Tangent Space solitamente è blu, come il colore associato all'asse y. Può essere usata su
oggetti dinamici e deformati.
Height Map - Parallax Occlusion mapping
È una tecnica simile al normal mapping. Tiene conto dell'angolo di visione, rispetto alla normale della
superficie quando dispone le coordinate della Texture. Mantiene l'illusione della profondità.
Il Parallax Occlusion mapping è un processo computazionale costoso e va usato su piccoli oggetti a
cui ci si può avvicinare molto. Texture lontane hanno un angolo di visuale poco variabile.
Nella Built-in Render Pipeline, una Height Map su uno shader standard deve avere una Mesh con
molti vertici per mostrare il risultato.
Occlusion Map
L'Ambient Occlusion è una tecnica di shading e rendering per calcolare quanto ogni punto sia
esposto alla luce ambientale. Se fornita, puoi scegliere l'occlusione con uno slider nello shader.
Altrimenti è una buona pratica includerlo nell'Albedo.
Detail Map
Permette un secondo set di Texture (Albedo e Normal) sopra la principale, usando dimensioni molto
inferiori e ripetendola più volte sulla superficie, in modo da avere dettagli più nitidi quando ci si
avvicina (dettagli per la pelle, crepe su mura, etc). Detail Mask (A) è una maschera in scala di grigi
che permette di specificare quali aree della Texture avranno i dettagli. Le aree nere saranno senza
dettagli, le bianche con. Per la detail map si possono usare set UV differenti.
Material Scripting
Per cambiare il Renderer Material di un game object possiamo accedere a:
• Renderer.sharedMaterial cambiare questo, cambia il Material di tutti gli oggetti con quel
Material. Cambia anche le impostazioni nel progetto.
• Renderer.Material.SetFloat("_Smoothness", newSmoothness)
4. Linear/GammaSpace
• Le texture che non sono processate come colorate, non dovrebbero essere nello
spazio di colore sRGB, incluse le metallic, roughness e normal map. In caso contrario
si potrebbero avere risultati visivi sbagliati.
• L'impostazione sRGB (Color Texture) non deve essere attiva per le roughness,
specular, normal map e simili
Permette di creare Material facilmente con uno Standard Shader (Diffuse, Specular, Bumped e
Reflective mischiati), evitare supposizioni usando dati reali con i dati del Material e avendo un
aspetto corretto in situazioni con luci diverse. Permette un flusso di lavoro per creare artwork
consistenti.
Smoothness/Fresnel
La Smoothness descrive i dettagli della micro-superficie. La Fresnel rende la superficie più riflessiva
ad angoli grazing.
Negli Standard Shader non c'è controllo del Fresnel, è indirettamente controllato da quanto è liscio il
materiale. Superfici lisce hanno un forte Fresnel, le ruvide 0.
Le superfici lisce o patinate riflettono di più lo Skybox di quelle ruvide od opache. In Unity si può
specificare la Gloss Map nel canale alpha de:
• Specular Map
• Metalness Map
• Albedo Map
Metallic Workflow
È composto da 3 componenti:
• Solitamente Metalness Map sono nere o bianche. Le aree in scala di grigi sono usate
solo nelle transizioni tra i metal e i non-metal
La Reflectivity è il colore riflesso speculare dato dalla Texture Albedo. Le superfici metal possono
apparire come tinte e consumano meno memoria dello Specular Workflow perché è in Bianco &
Nero
1. Color BaseMap (RGB) colore percepito dell'oggetto per le aree non-metal, nero per le aree
metal
2. Specularity SpecularMap (R) definisce il colore metal, grigio scuro per le aree non-metal.
Aree più luminose hanno maggior riflessione
3. Microsurface Smoothness (A) (Gloss Map) definisce aree patinate (1) o ruvide (0)
Channel Packing
Lo shader URP Lit usa il channel packing in modo da usare una singola Texture RGBA per le proprietà
metallic, smoothness e occlusion. In questo modo, viene caricata in memoria una sola Texture
invece di tre.
In Substance o Photoshop:
- Red → Metallic/Specular
- Green → Occlusion
- Blue → None
- Alpha → Smoothness
Texture Scripting
Una Texture2D è un array 2D di informazioni sul colore. C'è bisogno di una Sprite o un Material per
visualizzarla. I suoi pixel sono codificati in un array 1D di dimensioni t.width*t.height
Da coordinate UV a pixel
(u, v) == (u*t.width, v*t.heigth)
DrawTexture
Disegna una Texture sul RenderTexture attivo.
ClearRT ripulisce la Texture con un colore completamente nero.
Draw disegna la Texture nella RenderTexture
LoadOrtho() matrice con cordinate normalizzate
LoadPixelMatrix matrice con cordinate basate sulle dimensioni della Texture