In che modo i motori di gioco 3D rendono gli ambienti 3D su uno schermo 2D?


9

Per i giochi sprite 2D, posso capire che gli sprite si muovono sugli assi X e Y. Tuttavia, per i giochi 3D, in che modo i motori di gioco calcolano come eseguire il rendering di un ambiente 3D su un monitor per computer 2D piatto?


18
Matematica, molto.
DeceleratedCaviar

3
Magic Imps progetta la terra e poi scatta l'immagine sullo schermo usando le loro bacchette magiche.

Math.PI, un sacco.
Nick Bedford,

Risposte:


10

Gli sprite 3D ottengono un nuovo asse Z che memorizza profondità, dimensioni di scala e movimenti nel piano X / Y. Uno sprite più lontano ha un valore Z maggiore. Ora, dividi le dimensioni dello sprite e i movimenti dell'asse X / Y per l'asse Z. Come altri hanno notato, questa è una proiezione prospettica 3D . Ecco la migliore illustrazione che ho trovato:

inserisci qui la descrizione dell'immagine

Ciò ha senso concettualmente perché le cose più lontane sembrano più piccole. Anche i loro movimenti apparenti sembrano più piccoli.

Inoltre, gli oggetti vicini devono essere disegnati sopra oggetti lontani. Ancora una volta, questo ha senso concettualmente perché gli oggetti vicini occludono la vista degli oggetti dietro di loro.

Queste tecniche possono essere implementate a livello di sprite. Tuttavia, per la proiezione più realistica ogni sprite ha un modello 3D ed è renderizzato a livello di pixel.


2
Il diagramma era ciò che mi ha preso. Un'immagine vale più di mille parole.
Kim Jong Woo,

17

È simile a come è possibile catturare immagini 2D del nostro mondo sulla fotocamera. L'ambiente 3D è descritto in termini di coordinate X, Y e Z, ma alla fine è necessario mapparlo su uno schermo 2D con solo gli assi X e Y. Questo viene fatto mediante proiezione , in cui ciascun punto 3D viene proiettato su un piano di vista 2D.

Per dirla semplicemente, puoi immaginare linee di proiezione che vanno dalla videocamera virtuale nello spazio 3D a ciascun punto 3D passando attraverso il piano della vista. Il punto in cui una linea di proiezione interseca il piano 2D è la proiezione del punto 3D. Nella proiezione ortografica queste linee di proiezione sono tutte parallele; la distanza tra l'oggetto e la telecamera non fa alcuna differenza per la forma proiettata. Questo tipo di proiezione non è realistico ma è utile in alcuni casi come disegnare grafica 2D usando un motore 3D (l'HUD per esempio). L'altro tipo di proiezione è la proiezione prospettica in cui queste linee convergono facendo apparire gli oggetti più distanti e dando risultati più realistici. Questa pagina contiene alcune figure che potrebbero aiutarti a visualizzare il processo.

La proiezione è uno dei numerosi oggetti di trasformazione sottoposti alla pipeline grafica e di solito viene eseguita utilizzando una matrice di proiezione . Si noti che sebbene la proiezione implichi di scartare la coordinata Z, in realtà un valore Z trasformato viene comunque utilizzato una misura della profondità dello schermo in modo da poter dire quali oggetti sono visibili e quali sono occlusi da altri oggetti. Questo è noto come buffering z .


5

Si tratta della proiezione , un'operazione geometrica che ti consente di definire uno spazio da un altro spazio di dimensione superiore (sostanzialmente, nel tuo caso, stai descrivendo un'immagine 2D da un ambiente 3D).

In poche parole, ecco come i motori di rendering 3D generano un'immagine (data una scena 3D e una proiezione):

Per ogni pixel dell'immagine risultante

  • Calcola la direzione dello sguardo (secondo la proiezione), è fondamentalmente un vettore 3D
  • Trova l'oggetto più vicino nella tua scena che è "visto" in questa direzione (indovina semplicemente quali oggetti sono intersecati con il vettore e mantieni quello più vicino)
  • Calcola il colore di questo oggetto, hai il colore del pixel!

Naturalmente questo è un modello semplice, non sto parlando di oggetti riflettenti / rifrattivi / traslucidi di effetti speciali come il fumo ...


2

The Matrix . O meglio, molta matematica matriciale.

È roba spaventosa per i non iniziati. In genere ci sono tre matrici 4x4 coinvolte nel trasformare un gruppo di coordinate 3D nello spazio in coordinate 2D sullo schermo (inclusa la profondità nello schermo come Z).

Le matrici 3D sono un insieme di 16 valori in virgola mobile disposti in una griglia 4x4. Gli algoritmi vengono utilizzati per generare i valori richiesti e quindi utilizzando la moltiplicazione matrice-vettore, questi numeri trasformano un vettore tridimensionale (X, Y, Z).

[ 1, 0, 0, 0 ]
[ 0, 1, 0, 0 ]
[ 0, 0, 1, 0 ]
[ 0, 0, 0, 1 ]

Questa è la matrice dell'identità . Essenzialmente non fa nulla alle coordinate di un vettore.


Modello

Il primo è il mondo o la matrice del modello . Questa matrice prende i vertici in un singolo modello (come una cassa) modellato attorno all'origine (0, 0, 0) e li trasforma in coordinate del vertice mondiale. Ciò potrebbe includere il ridimensionamento dell'oggetto, ruotandolo attorno alla sua origine e infine traducendolo nel punto in cui si trova nella scena.


Visualizza

La seconda matrice è la matrice della vista . Questo prende le coordinate del mondo e le trasforma in modo che si trovino nel contesto della vista. Il concetto di telecamera è generalmente utilizzato per generare questa matrice.

La telecamera di solito contiene un vettore di posizione , un vettore di direzione o di destinazione e un vettore verso l' alto . Questo vettore in alto descrive lo "spin" della videocamera.

inserisci qui la descrizione dell'immagine

Questi vettori vengono utilizzati per generare quello che viene chiamato uno sguardo alla matrice.

L'effetto che questo ha è simile alla matrice mondiale nel fatto che sta essenzialmente ruotando e traducendo il mondo intorno alla telecamera per "posizionare" la telecamera.

Una telecamera di 10 unità lungo l'asse X tradurrà le coordinate del mondo di 10 unità nell'altra direzione.


Proiezione

L'ultimo pezzo del puzzle è la matrice di proiezione . In una proiezione prospettica simile a una telecamera, la matrice trasforma le coordinate quasi dello schermo per dare l'illusione di una prospettiva con un campo visivo di x gradi.

Se pensi in termini di angoli dello schermo (per un gioco 640x480), questo è il modo in cui la proiezione "allinea" le coordinate lungo l'asse Z all'interno delle coordinate 2D dello schermo. Per la proiezione ortografica, non viene eseguito alcun ridimensionamento lungo l'asse Z nello schermo. Per la prospettiva, più l'oggetto è lontano, più piccolo diventa in relazione all'estensione dello schermo.

inserisci qui la descrizione dell'immagine

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.