Textures - Texture mapping - Marco Tarini

Pagina creata da Riccardo Leoni
 
CONTINUA A LEGGERE
Textures - Texture mapping - Marco Tarini
Video Game Dev - Uni Insubria                                               24/10/2015

                       Video Game Dev 2015/2016
                       Univ Insubria
                       Textures

                                                             Marco Tarini

                   Texture mapping

                                            +                      =

                geometria 3D                    RGB texture 2D
                (insieme di quadrilateri)       (qui: color-map)

Marco Tarini - 2015/2016                                                            1
Textures - Texture mapping - Marco Tarini
Video Game Dev - Uni Insubria                      24/10/2015

                  Esempio (color-map)

                                +          =

                    Texture maps!
                    Uno degli assets + comuni e
                    importanti di un games
                    Uno dei maggiori consumatori
                    di GPU RAM

Marco Tarini - 2015/2016                                   2
Textures - Texture mapping - Marco Tarini
Video Game Dev - Uni Insubria                                                                  24/10/2015

                  Texture maps: strutture dati
                       Sostanzialmente, un’immagine raster

                                               «Texel»

                      Texture sheet

                  Tessiture (nei games)
                     Texture sheet =
                     def. di un segnale sulla superficie (la mesh)
                       scopo simile di quello dei per-vertex attributes!
                       ma…                          Tessiture: campionamenti regolari, e
                           # texels >> # vertices        densi (dettaglio a buon mercato!)
                           segnali più complessi!        Attributi: campionamenti irregolari
                                                         (adattivi), e sparsi

                     Un texel = un campione di quel segnale
                       fra i campioni: interpolazione (bilineare)

                     Campionamento del segnale:
                       su griglia 2D regolare (immagine raster)
                       ad una risoluzione data (NON adattiva!)

Marco Tarini - 2015/2016                                                                               3
Textures - Texture mapping - Marco Tarini
Video Game Dev - Uni Insubria                                                              24/10/2015

                  I segnali tipicam. memorizzati
                  in tessiture (nei games)
                     ogni texel un base-color (componenti: R-G-B)
                        la tessitura è una “diffuse-map” / “color-map” / “RGB-map”
                     ogni texel una fattore di trasparenza               (componenti: α)
                        la tessitura è una “alpha-map” o “cutout-texture”
                     ogni texel una normale (componenti: X-Y-Z)
                        la tessitura è una “normal-map” o “bump-map” (more later)
                     ogni texel contiene un valore di specularità
                        la tessitura è una “specular-map”
                     ogni texel contiene un valore di glossiness
                        la tessitura è una “glossiness-map”
                     ogni texel contiene un valore di lighting baked...
                        la tessitura è una (baked) “light-map”
                     ogni texel contiene un valore di dist. dalla superficie
                        la tessitura è una “displacemnt map” o “height texture”

                  MIP map levels
                     Pre-filtering delle tessiture
                     “LOD pyramid, per immagini”!
                     Hardware sceglie livello giusto (per pixel)
                     Evitare artefatti di sottocampionamento
                                                                                    1x1

                                                                      256x256

                                                            512x512

                                 1024x1024

Marco Tarini - 2015/2016                                                                           4
Textures - Texture mapping - Marco Tarini
Video Game Dev - Uni Insubria                                                                          24/10/2015

                  Texture maps
                  come assets
                                                           Vincoli ricorrenti:
                                                              potenze di 2 per lato
                     Caratteristiche:                             (richiesto da sempre meno engines)
                                                                  sia in U che in V
                       Size:                                      (es: 256x256 o 1024x512)
                                                              res < max
                           risoluzione                            (es: max = 4096 o 2048)

                           canali (es: alpha?)
                       MIP-map
                           (presenti o no?)
                       Compressione?
                           e.g. “color-map”, quantizzazione
                           o schemi di compressione specifici

                    La maggior parte della             Textures res
                    ricchezza visuale percepita        più impattanti (quality wise)
                    nel tipico videogames è dovuta     di Meshes res!
                    alle tessiture!

Marco Tarini - 2015/2016                                                                                       5
Textures - Texture mapping - Marco Tarini
Video Game Dev - Uni Insubria                                                    24/10/2015

                  GPU rendering of a Mesh
                  in a nutshell (reminder)
                     Load…
                       store all data on GPU RAM
                           Geometry + Attributes
                                                      THE MESH
                           Connectivity
                           Textures
                           Shaders                    THE “MATERIAL”
                           Parameters / Settings
                     …and Fire!
                       send the command: “do it” !

                  Life of a Texure (as, basically, any 3D assets)
                  in a Game Engine

                       DISK              CENTRAL RAM               GPU RAM

                               IMPORT                     LOAD

                      Image                  Image                     Texture
                       File                  Object                     Sheet
                                                                       on GPU

Marco Tarini - 2015/2016                                                                 6
Textures - Texture mapping - Marco Tarini
Video Game Dev - Uni Insubria                                                  24/10/2015

                  Texture Sheets
                  (in GPU RAM)

                     Immagini rasterizzate, ma con perculiarità …
                          mipmap levels
                          channels per texels: 1,2,3, or (usually) 4
                          bits per channels:
                          usually 8, fixed point («true-color»)
                          – or compression
                          resolution: powers of 2 (usually)

                  Texture Sheets
                  (in GPU RAM)
                     Durante il rendering:
                     meccanismi GPU (hardwired!)
                     di accesso alla texture:
                     1.    selezione del livello di MIPmap appropriato (opz)
                     2.    decompressione
                     3.    gestione di accessi fuori dal bordo (e.g. repeat)
                     4.    passaggio da coord UV [0..1]2
                           a coord in texel [0..RESX]x[0..RESY]
                     5.    interpolazione bilineare (opz)

Marco Tarini - 2015/2016                                                               7
Textures - Texture mapping - Marco Tarini
Video Game Dev - Uni Insubria                                                                                         24/10/2015

                  Texture Sheets
                  (in GPU RAM)
                     schemi di
                     compressione appositi:
                        quantizzazione
                           (e.g. 16 bits per texel: 5 red 5 green 5 blue 1 alpha)
                        color-table (or “palette”)
                           (e.g. tabella di 256 colori, un indice a 8 bit per texel)
                        schemi appositi per tessiture
                        (poiché devono consentire la random accessibility della texture!)
                           molto lossy,
                           rate di compressione poco efficiente e rate fisso!
                           schema più diffiuso S3TC, con varianti
                                DXT1         “no / 1-bit alpha”
                                DXT2
                                            “rough alpha”
                                DXT3
                                DXT4
                                             “smooth alpha ”
                                DXT5
                        (diversi compromessi fra qualità, costo, canali…)

                  Texture Shhets:
                  formati files
                     per immagini generiche:
                           .JPG / .JPEG
                             lossy,
                           ☺ ottimo rate compressione,
                                                                            appositi per textures:
                           ☺ immagini “fotografiche”: best                  (opzione più usata)
                             solo 3 canali (no choice)                            .DDS
                             8 bit x canale (no choice)                           («direct draw surface»)
                           .PNG                                                   stesso indentico formato
                           ☺ lossless                                             usato in GPU. Quindi:
                                                                                  ☺ inlcude MIPmap levels (volendo)
                             < compression ratio
                                                                                    compressione: molto lossy
                           ☺ disegni: best
                                                                                     e compression ratio pessimo
                           ☺ anche canale alpha possibile
                                                                                     (e rete fisso)
                           ☺ anche 16 bits possibile
                                                                                  ☺ GPU ready!
                           .TIFF e .RAW      (rari)                                  Just read from disk &
                           ☺ lossless                                                load on GPU memory
                                compressione: vabbe’                                 (no decompress / recompress!)
                           ☺ max flessibilità canali etc
                           .PNM (davvero raro)
                                 compressione: ahah
                           ☺ ma parsing facilissimo! (no lib)

Marco Tarini - 2015/2016                                                                                                      8
Textures - Texture mapping - Marco Tarini
Video Game Dev - Uni Insubria                                                               24/10/2015

                  Texture maps come assets:
                  formati files
                     x immagini generiche                x textures
                     (decomprimere tutta immagine        (random accessibility ai texels,
                     prima di poter accedere ai pixel)   senza decomprimere tutta l’imm)
                     ☺ compressione: ottima                compressione: cattiva
                       loading: pesante:                 ☺ loading: leggero
                           decomprimere da RAM,                 direct copy
                           (forse) ricomprimere in              Disco => RAM =>
                           GPU-RAM                              GPU RAM
                        MIP-map lvls etc:                ☺ MIP-map lvls etc:
                        controllato dall’engine            controllato dall’artista

                  Texture maps assets
                  e Mesh assets
                     Vari texture «sheets»
                     associati ad una mesh
                        o anche: più meshes sullo stesso sheet (bene)

                     tipica struttura :
                        ogni mesh associata a un materiale
                        ogni materiale:
                           1 sheet di diffuse-map
                           1 sheet bumpmap (se serve)
                           1 sheet di alphamap (se serve)
                           1 vertex shaders + fragment shader
                           vari parametri
                              (es, shininess, …)
                        se parti diverse di mesh associate a tessiture diverse:
                        scomporre oggetto in sotto-mesh

Marco Tarini - 2015/2016                                                                            9
Textures - Texture mapping - Marco Tarini
Video Game Dev - Uni Insubria                                               24/10/2015

                  Texture maps assets
                  e Mesh assets
                     Non necessariamente 1:1
                       1:N -- vari texture «sheets» associati ad una mesh
                       N:1 -- più meshes sullo stesso sheet (bene)
                       se parti diverse di mesh associate a tessiture
                       diverse:
                       scomporre oggetto in sotto-mesh
                                                       TEXTURE 1
                                                       BUMPMAP
                      MESH
                        A              MATERIAL
                                                        TEXTURE 2
                                          A             COLORMAP
                      MESH
                        B

                    Come si legano fra loro
                    tessiture & mesh?

Marco Tarini - 2015/2016                                                           10
Video Game Dev - Uni Insubria                                                               24/10/2015

                  La parte 3D dei
                  game assets
                     3D Models                          Animations
                     i.e. tri-meshes with:                 blend shapes
                         per vertex attrib                 skeletal animations
                             normals, color, AO, …         kinematic animations
                         LODs                              geometry caches
                         uv-mapping
                                                           skeletons (rigs)
                         keyframes
                             cyclic animations
                             face-morphs, …             Geometric proxies
                         “skinning”                        hit-boxes
                                                           bounding objects
                     Materials                             AI-meshes
                         lighting model stats / flags
                         textures                       Particle systems
                             RGB maps
                             normal maps
                             alpha maps …
                                                        Environments
                                                           3d scenes
                         shaders
                             vertex, fragments, …
                                                           skydomes
                                                           env. maps
                                                           scene props

                  UV-Mapping di una mesh
                     Serve un mapping (una corrispondenza):
                     superficie mesh  spazio tessitura 2D
                         «parametrizzazione» della superficie
                                                                                  [0..1]2
                     Idea: memorizzo questo mapping come
                     attributo: (s,t ) per vertice
                         l’«u-v mapping» della mesh (u,v) == (s,t)

Marco Tarini - 2015/2016                                                                           11
Video Game Dev - Uni Insubria                                                       24/10/2015

                  Task di modellazione:
                  costruz dell’ “u-v mapping”

                                                                          u

                                                   Texture “atlas”
                                      v                  (composto di
                                                         vari “charts”)

                  UV mapping:
                  esempio
                                                                                u

                                                            …

                                          A    B     C                    M N
                    M
                         N=A B    C
                 (vertex seam)            v

                           MESH               TEXTURE SPACE

Marco Tarini - 2015/2016                                                                   12
Video Game Dev - Uni Insubria                                                                                  24/10/2015

                  Notazione di spazio texture
                                       Texture Space (o "spazio parametrico" o "spazio u-v")
                                                                                      1.0
                                                                                                u
                                                                        Texture 2D
                      es: 512 texels

                                           1.0
                                              v
                                                               es: 1024 texels

                                                  Texture Space = [0,1] x [0,1]

                  Due notazioni
                                                                                       più diffusa
                                                                                     (in game industry)

                                   s-t                                                   u-v
                              (es OpenGL)                                            (es DirectX)
                      t
                                                                          (0,0)                      1.0
                1.0                                                                                        u

                                                           s               1.0
                (0,0)                                1.0
                                                                                 v

Marco Tarini - 2015/2016                                                                                              13
Video Game Dev - Uni Insubria                                                                                        24/10/2015

                   Nota: Spaziotessitura non
                   dipende da risoluz (o forma)
                       t
                 1.0
                                                                                             Conveniente!
                                                                                             si può ridurre la res
                                                        Texture 2D
                                       1024x512                                              dei texture sheets
                                                                                             (bilanciando
                                                                                             qualità / memoria)
                                                                                s            senza alcuna
                                                                        1.0                  conseguenza
                       t
                                                                                             sull’UV mapping
                 1.0
                                                                                             delle mesh.

                                                                                             Es: caricare in
                                         128x64                                              GPU RAM solo i
                                                                                             livelli MIP-MAP alti

                                                                                s
                                                                          1.0

                   Due tipi di UV-mapping:
                           UV mapping NON iniettivo
                             Zone diverse della mesh fanno riferimento
                             allo stessa regione della tessitura                           aka: “UV-mapping”
                             es: with overlapping charts                                             (standard)
                             ☺ Ottimizzazione spazio tessiutra
                                Sfruttamento simmetrie / ripetizioni del segnale
                           UV mapping iniettivo
                             Ogni punto della tessitura (non vuoto):                        aka: “Unwrapping”
                             1 solo punto sulla mesh                                         o: “Unwrapped UVs”
                             es: non-overlapping charts                                       o: “1:1 UV-mapping”
                             ☺ Genericità / Flessibilità                             o:   “Lightmap UV-mapping”
                                Utilizzabile per vari scopi (e.g. light backing)
                           Scopi diversi
                             spesso, presenti entrambi: 2 UV mapping distinti
                             (2 attributi UV per ogni vertici)
                                                                                    Quali degli UV mapping
                                                                                    mostrati fin’ora sono di
                                                                                    quale tipo?

Marco Tarini - 2015/2016                                                                                                    14
Video Game Dev - Uni Insubria                                                        24/10/2015

                  Costruzione dell’UV-mapping
                     Tipico task del modelling
                       programmi (semi-)automatici (molto studiati)
                       modellatori professionisti
                           usando tools appositi
                     In pratica, bisogna trovare un posto in spazio tessitura
                     per ogni triangolo della mesh
                     Analogo a:
                       sbucciare una mela (cutting)
                       stendere ogni buccia prodotta (unfolding)
                       disporre le buccie su un rettangolo piano (packing)
                     Nota richiede (quasi sempre) di “tagliare” la superficie:
                       discontinuità dei valori u,v
                       cioè vertex-seams

                  Task di modellazione:
                  “u-v mapping” (“u-v” == “s-t”)
                     strategie pratiche:
                       1. selezionare edge di taglio                         DEMO!
                       …o…
                       1. assegnare facce a charts
                           decidere dove sono i “texture seams”
                       2. unfolding
                           minimizzare “distorsione”
                       3. packing dei charts
                           minimizzare spazi vuoti
                           assegnare aree secondo necessita’
                           (es, parti importanti maggiore spazio tessitura)
                           (campionamento dei texel diviene in parte adattivo!)

Marco Tarini - 2015/2016                                                                    15
Video Game Dev - Uni Insubria               24/10/2015

                  Tileable Textures

                                    B

                                A       A

                                    B

                  Tileable textures

Marco Tarini - 2015/2016                           16
Video Game Dev - Uni Insubria                                                             24/10/2015

                  Tileable textures
                     Tipico utilizzo:

                    Molto efficiente in spazio!

                  RGB maps:
                  come si ottengono
                     Image first, then UV-mapping
                       e.g. immagine da fotografie
                       e.g. tileable images                                 UV-mapper

                     UV-mapping first, then paint 2D
                       paint with 2D app (e.g. photoshop)
                                                                UV-mapper    2D painter

                     UV-mapping first, then paint 3D
                       paint within 3D modelling software,
                       or: 1. export 2D rendering,
                           2. paint over with e.g. photoshop,   UV-mapper    3D painter
                           3. reimport images
                           4. goto 1

Marco Tarini - 2015/2016                                                                         17
Puoi anche leggere