Che cos'è esattamente la mappatura UV e UVW?


26

Cercando di comprendere alcuni concetti 3D di base, al momento sto cercando di capire come funzionano effettivamente le trame. So che la mappatura UV e UVW sono tecniche che associano trame 2D a oggetti 3D - mi ha detto Wikipedia. Ho cercato su Google delle spiegazioni ma ho trovato solo tutorial che presumevano di sapere già di cosa si tratta.

Secondo la mia comprensione, ogni modello 3D è fatto di punti e diversi punti creano una faccia? Ogni punto o faccia ha una coordinata secondaria che mappa alla posizione ax / y nella trama 2D? O in che modo scartare manipola il modello?

Inoltre, cosa fa realmente la W in UVW, cosa offre rispetto ai raggi UV? A quanto ho capito, W si associa alla coordinata Z, ma in quale situazione avrei diverse trame per la stessa X / Y e Z diversa, la parte Z non sarebbe invisibile? O sto completamente fraintendendo questo?


1
porre due domande separatamente
Noob Game Developer il

1
Odio i ragazzi come @NoobGameDeveloper, tutti gli altri stanno rispondendo alla domanda e tutto quello che stanno facendo è cercare di scoprire cose che non vanno nella domanda. Dai, lascia che facciano domande, non sto dicendo che nessuno dovrebbe seguire le regole, ma queste domande come questa vanno benissimo per essere pubblicate qui.
Daniyal Azram,

Risposte:


23

La tua comprensione è vicina. Ogni modello 3D è fatto di vertici. Ogni vertice di solito definisce la posizione di un punto nello spazio, un normale (utilizzato nei calcoli dell'illuminazione) e 1 o più coordinate di trama. Questi sono generalmente indicati come u per la parte orizzontale della trama e v per la verticale.

Quando un oggetto è strutturato, queste coordinate vengono utilizzate per cercare quale texel o pixel tracciare dalla trama. Trovo più facile pensarli come percentuali o rapporti tra il bordo sinistro della trama ( u = 0) e il bordo destro della trama ( u = 1.0) e dalla cima della trama ( v = 0) e dal fondo di esso ( v= 1,0). Sono interpolati tra i vertici e cercati per ogni pixel sullo schermo che viene renderizzato. Possono essere più grandi o più piccoli di questi intervalli e lo stato di rendering impostato quando viene eseguito il rendering dell'oggetto specifica cosa succede. Le opzioni per questo sono CLAMP e REPEAT. Il serraggio limita la coordinata su 0 o 1, facendo sì che la trama si spalmi dove si trova al di fuori dell'intervallo. Ripeti provoca la ripetizione della trama quando è al di fuori dell'intervallo; è effettivamente lo stesso che afferrare solo la parte decimale della coordinata e usarla al suo posto.

Prima che le coordinate della trama vengano applicate su un oggetto, vengono moltiplicate per una matrice di trama per applicare una trasformazione ad esse (come ridimensionamento, traslazione o rotazione). A volte questo effetto è animato nei giochi per farlo apparire come se qualcosa si stesse muovendo attraverso un oggetto senza dover spostare l'oggetto stesso ... la trama scorre semplicemente attraverso di esso. Quando la matrice di trama viene moltiplicata per le coordinate della trama, produce 2 valori che vengono utilizzati per cercare il texel da tracciare (chiamiamoli s e t ). Questi sono generati automaticamente da u e v anche quando la matrice trama non è impostato; è l'equivalente di moltiplicare u e v per una matrice di identità.

Qui entra in gioco la coordinata w , anche se non viene usata così spesso. È un parametro aggiuntivo per moltiplicare la matrice di trama e viene solitamente utilizzato quando si desidera tenere conto della prospettiva (come in Shadow Mapping ). Funziona come quando si trasforma una posizione nello spazio-oggetto in spazio-schermo tramite una matrice di proiezione della visione del mondo. Moltiplicando l'UVW con una trasformazione di proiezione, si ottengono 2 coordinate, la s e la t che vengono quindi mappate su una trama 2D.


Vale la pena ricordare che OpenGL considera v0 come bottom e v1.0 come top. Mi è costato molto tempo in passato quando non riuscivo a trovare il bug quando le mie trame sembravano strane.
tkausl,

8

Prendi in considerazione un triangolo.

Ogni angolo ha una coordinata UV. Si interpolano tra questi per ottenere un insieme di coordinate UV per ciascun pixel. (C'è anche una prospettiva in gioco qui, ma ignoriamolo per il momento).

Quindi, prendi un texel dalla trama dalle coordinate U e V. Vale a dire, un pixel dalla coordinata della trama x, y - stessa cosa, terminologia leggermente diversa dal momento che stiamo parlando di trame.

Se la tua trama è veramente tridimensionale, avrai anche bisogno di una terza coordinata, W.

Un modo per visualizzarlo è pensare a un blocco di legno. Se lo tagli in qualche modo, vedrai che ogni piano all'interno del blocco contiene una sorta di trama 2d.

Le trame 3d sono così rare che per il momento puoi dimenticartene.


Raro? A cosa servono? Puoi mostrare qualche esempio nel contesto dei titoli AAA.
Quazi Irfan,

No, perché in genere non vengono mai utilizzati. C'è sempre un modo più economico di fare la stessa cosa. Pensa agli oggetti tritati in wii sports plus; puoi rompere gli oggetti come preferisci e vedere gli "interni". Avrebbero potuto sprecare enormi quantità di memoria rendendole trame 3d (supponendo che l'hardware lo supporti anche), ma è molto più economico simularlo con un paio di trame 2d.
Jari Komppa,

Quindi, non sono esclusivi? o questa non è una funzione molto necessaria per qualsiasi cosa ben nota fa il motore di gioco?
Quazi Irfan,

Non capisco cosa intendi. Le trame 3d possono essere utili in altri usi oltre che come semplici trame; se alcuni dati di uno shader necessitano di mappare convenientemente in un array 3d, sarebbe un uso. Ma come una trama "normale", sono generalmente solo uno spreco di memoria.
Jari Komppa,

Un'applicazione di una trama 3D è la mappatura della distanza, anche se, come dice Jari, sono molto rari in un gioco a causa della loro complessità. [link] http.developer.nvidia.com/GPUGems2/gpugems2_chapter08.html
Jackalope,

7

Pensa agli origami.

Una mappa UV è come una skin 2D appiattita (da scartare) della tua mesh 3D (shell).

Se dovessi ritagliare la mappa e piegarla lungo le linee delle maglie, il risultato sarebbe il tuo modello 3d.

I valori in virgola mobile (U, V) vanno da (0,0) a (1,1) L'angolo in alto a sinistra della mappa UV è (0,0) L'angolo in basso a destra è (1,1)

Ogni vertice in una mesh di poligoni (tris / quad) ha un valore (U, V) che indica al renderer quale parte della mappa usare.

Nella pipeline GPU, gli shader di vertice calcolano le proiezioni 2D di ciascun pixel in questi poligoni 3D, quindi frammentano gli shader colorandoli usando la mappa UV.

Questo non può essere pienamente apprezzato senza un'immagine come questa che rende tutto ovvio:

Maglia UV

Come menzionato dagli altri commentatori, il componente W viene utilizzato dal renderer per effetti più elaborati come la mappatura dell'ombra, ma la mappa UV è la base per la comprensione.

Si noti che uno shader di vertice deve chiamare uno shader di frammenti almeno una volta per ogni pixel che deve essere colorato. Ecco perché le GPU sono processori paralleli con dozzine di core: la pipeline dello shader è molto impegnativa.

Si noti inoltre che le GPU integrate nella CPU sono progettate per dispositivi mobili e sono limitate a meno di un decimo del numero di core rispetto a quelle di GPU esterne di generazione simile. Questo a causa dei limiti di alimentazione e raffreddamento mobili. La legge di Moore sembra aver rallentato, ma le prestazioni stanno ancora migliorando (con lo strano scioglimento qua e là ..)

La mappatura UV di miliardi di pixel a 240+ frame al secondo può causare un vero casino!


0

Una mappa uv mappa un punto (x, y, z) nella mesh su un punto (u, v) nell'immagine trama. Poiché un'immagine è mappata (u, v) su un colore, le due mappe possono essere concatenate, producendo una mappa dallo spazio mesh allo spazio colore.

         uv map       color map
 (x,y,z)   ->   (u,v)    ->     color
 mesh           Texture
 space          space
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.