Perché i motori di gioco convertono i modelli in triangoli invece di usare i quad?


47

Ho lavorato con Maya per l'animazione e altri progetti orientati al cinema, ma mi sto anche concentrando sui miei studi sullo sviluppo di videogiochi. In ogni caso, stavo parlando con uno dei miei professori e non siamo riusciti a capire perché tutti i motori di gioco (di cui sono a conoscenza) si convertano in triangoli.

Qualcuno capisce perché i motori di gioco si convertono in triangoli rispetto a lasciare i modelli come poligoni a quattro lati? Inoltre, quali sono i pro e i contro (se presenti) nel fare questo?


1
In qualche modo correlato, NVidia NV1 utilizzava la mappatura delle texture quadtratica (che utilizza i quad), anziché triangoli / poligoni. Non è stato un grande successo, per non dire altro. Vedi en.wikipedia.org/wiki/NV1 .
Macke,

5
@Macke: quadratico come in "equazione quadratica", non quadratico come in "quadrilatero". Non utilizza i quad, ma piuttosto una curva quadratica definita da 9 punti. stason.org/TULARC/pc/3d-graphics-cards-faq/…

9
+1 per la tua domanda ma un grande -1 per il tuo professore. Questa è roba di base che avrebbe dovuto sapere e che conosce il dorso della sua stessa mano, e un segno che è un po 'fuori contatto con gli sviluppi negli ultimi 15 e dispari anni.
Maximus Minimus,

1
Beh, nella mia difesa dei professori, non è dal punto di vista del gioco, è più un animatore / modellatore. Sapeva che si convertiva in tris ma non conosceva la ragione matematica sul perché del rendering. Ma sì, probabilmente avrebbe dovuto saperlo.
Concedi l'

Risposte:


56

La linea di fondo è Triangle Rasterization, ovvero il modo in cui i computer visualizzano gli oggetti sullo schermo. Anche se altri lo dicono più elquentemente di me:

Tutti gli oggetti 3D che vediamo sullo schermo del computer sono in realtà fatti di piccoli oggetti geometrici spesso chiamati primitivi. Quadrilateri, triangoli, n-gon ecc. Sono esempi di primitivi. Ci concentreremo sui triangoli principalmente per una delle ragioni principali: ogni oggetto può essere diviso in triangoli ma un triangolo non può essere diviso in nient'altro che triangoli. Per questo motivo, disegnare triangoli è molto più semplice di disegnare poligoni di ordine superiore; meno cose da affrontare. Ecco perché quei triangoli sono così comunemente usati nella computer grafica.

Enfasi mia. Fonte: http://www.devmaster.net/articles/software-rendering/part3.php


2
Eccezionale! Questo ha molto senso quando ci pensi. Grazie per la risposta!
Concedi il

1
In OpenGL ES, nell'ambito dello sforzo di semplificazione dell'API, quad e poligoni non sono nemmeno supportati. Quindi un motivo pratico per usare i triangoli è perché non hai altra scelta. Ma il motivo per cui un'API ottimizzata come ES evita altri tipi primitivi è dovuto ai motivi indicati in questa e in altre risposte.
Suboptimus,

5
+1 Perché è una risposta che posso tranquillamente usare come riferimento quando qualcuno mi chiede la stessa cosa, ai miei segnalibri. Dico solo che ho sempre pensato che il motivo per cui i triangoli sono la piccola primitiva possibile è perché con l'imprecisione dell'aritmetica in virgola mobile, i tris sono l'unico poligono sicuro che puoi garantire di essere planare in tutti i casi, con i quad che non puoi garantire che essere planare tutto il tempo. Il software di modellazione probabilmente mostra oggetti come quad o n-gon per comodità del modellatore, ma applica trasformazioni / rendering che dividono i poligoni come due o più triangoli.
Hatoru Hansou,

56

I triangoli hanno molte proprietà che li rendono più facili e quindi più veloci da disegnare.

Quattro o più punti potrebbero non essere sullo stesso piano, ma sempre tre punti (ignorando i casi degeneri). Ciò ha l'interessante proprietà che i valori scalari variano linearmente sulla superficie del triangolo. Anche quando il triangolo viene proiettato sullo schermo, i valori scalari continuano a variare linearmente rispetto a x '/ z e y' / z.

Questo, a sua volta, significa che la maggior parte, se non tutto ciò che è necessario per ombreggiare, mappa delle trame e filtro di profondità, un triangolo può essere calcolato usando l'interpolazione lineare che può essere eseguita estremamente velocemente in hardware specializzato.

tl; dr: i triangoli sono la primitiva più semplice, quindi gli algoritmi che trattano i triangoli possono essere fortemente ottimizzati.


11
+1. Penso che il fatto che un triangolo sia sempre planare sia uno dei motivi principali. I poligoni non planari rendono le cose molto più complicate.
Bummzack,

2
+1. Penso che i triangoli siano l'unico poligono che puoi garantire di essere planare è il motivo tecnico principale per creare apis e hardware che richiedono triangoli. Il software di modellazione probabilmente mostra mesh come quadrupoli per comodità del modellatore.
Hatoru Hansou,

1
Una bella analogia non planare che uso ... Uno sgabello a tre gambe può stare a terra solo in un modo, i suoi piedi sono come gli angoli di un triangolo. Ma uno sgabello a quattro gambe può stare a terra in due modi e oscilla da una posizione all'altra se una gamba è più corta delle altre.
ChrisC,

Io sono curioso; come è possibile che un triangolo abbia sempre punti sullo stesso piano? Come si disegna effettivamente una sfera allora? Almeno uno dei punti deve essere tradotto su un piano diverso, altrimenti otterrai una superficie piana.
Rataplan,

@newbiez Tre vertici definiscono sempre un singolo piano. Una sfera è composta da diversi triangoli; due triangoli adiacenti che rappresentano una chiazza della superficie della sfera condividono due vertici, ma non sono sullo stesso piano. Questa immagine potrebbe rendere le cose più chiare: cse.csusb.edu/tongyu/courses/cs420/images/icos.jpg
ggambett

8

Tre punti (un triangolo) definiscono SEMPRE un piano piatto. In altre parole, dati tre punti qualsiasi, puoi sempre creare un piano piatto in grado di tagliare tutti e tre i punti. Tuttavia, lo stesso non è sempre vero per quattro punti. Puoi avere quattro punti tutti su un piano, ma puoi anche avere quattro punti che non sono su un piano.


2
Infatti 4 punti casuali sono più probabilità di essere non su un aereo in modo da dovrete per triangolare comunque.
ChrisF

Questo è vero solo se i punti non sono coincidenti.
notlesh,

1
Anche se i punti sono coincidenti, sono complanari su un numero infinito di piani.
3Dave il

Essere complanari non "SEMPRE definisce un piano piatto" .
Sam Hocevar,

6

Non sono i "motori di gioco" a farlo: tutto il software 3D che usi lo fa. Semplicemente non te lo dice, e il tuo professore sembra abbastanza poco qualificato se non lo sa. Esistono nella memoria del computer anche se il software li nasconde da te. Tutti i programmi 3D hanno un'opzione che renderà visibili i triangoli. Avranno anche un'opzione che li divide in bordi modificabili, in modo da poter giocare con loro. Ma erano sempre lì per cominciare ed è ingenuo che il tuo professore insegni questa materia e si chieda ancora "a cosa servono i triangoli".

Un triangolo è l'unico modo per disporre i verbi e garantire una superficie piana. Quando hai un quad, puoi organizzare i verts in modo tale che debba piegarsi. Ma è già fatto di triangoli ed è quei triangoli che consentono la curva.


3

Un triangolo è la primitiva più semplice che può essere descritta isolatamente perché ha tre punti, meno dei quali non descrivono una superficie in 3D.

Poiché un triangolo può essere considerato isolatamente, è possibile creare un pezzo di codice o silicio in grado di eseguire il rendering di un solo triangolo, che tramite il potere della ripetizione può rendere qualsiasi superficie.

Pertanto, il primo sistema informatico che è riuscito a rendere "qualsiasi superficie" lo ha fatto naturalmente rendendo molti triangoli in modo indipendente.

Se si pensa ai triangoli e ai quadricipiti come a "primitivi" (ovvero a pezzi di geometria completamente isolati senza contesto), il triangolo è il più primitivo, e quindi tenderà a "vincere".

Tuttavia, una volta che i computer per l'intrattenimento hanno superato un certo livello di sofisticazione negli anni '80, la semplicità di considerare i "primitivi" in isolamento è diventata meno importante. Se la grafica deve essere prodotta in serie, le economie di scala favoriscono l'elaborazione di gruppi di vertici correlati, in quanto favoriscono l'assemblaggio di un centinaio di auto quasi identiche contemporaneamente.

Questo è il motivo per cui negli anni '80 i film adottarono il "quad", che è un termine improprio perché si riferisce a una griglia 2D di vertici nello spazio 3D e non a un quadrilatero isolato.

Lo stesso passaggio dai triangoli ai "quad" non è ancora avvenuto nel regno dell'intrattenimento interattivo, ma è probabile che accada, abbastanza presto, e per le stesse ragioni è successo nel mondo del cinema.


2

Esiste solo un modo per triangolare un triangolo rispetto ai modi "n - 2" per un poligono n. Quindi, i triangoli sono in definitiva il modo meno ambiguo per definire una forma poliedrica. Inoltre, come hanno indicato altri poster, ci sono molti modi per accelerare la rasterizzazione triangolare (piuttosto che quadrupla o superiore) (la z costante è una delle mie preferite). Inoltre, è più semplice ottimizzare i test di intersezione raggio-triangolo rispetto ai test di intersezione poligonale raggio-arbitraria. In effetti, molte operazioni sui poligoni n-side beneficiano dell'avere una rappresentazione triangolata a portata di mano. Ciò non significa che le rappresentazioni dei poligoni n-side siano "cattive" - ​​sono molto utili ma alla fine, vorrai lavorare con i triangoli per molte operazioni di mesh.


2

Fintanto che il triangolo è definito da tre vertici non lineari (leggi: nessuno degli angoli è esattamente Pi), quindi i vertici definiscono un piano unico.

Un quad è, ovviamente, definito da quattro vertici. È perfettamente possibile che quei vertici non siano complanari. In tal caso, il quadruplo sarebbe in realtà due triangoli divisi da una diagonale sul quadruplo. Sono due piani, due serie di normali di superficie, ecc.

Ogni strumento di modellazione disponibile, ogni algoritmo per texturing, illuminazione, ecc. Presuppongono tutti che un modello sia fatto di segmenti piani e ogni formula che abbiamo (prodotti incrociati per il calcolo normale è il primo che abbiamo) usa il set di dati di input minimo assoluto - tre i vertici definiscono un piano e il piano è ciò di cui abbiamo bisogno per fare tutte le cose fantasiose.

Potresti certamente scrivere un motore per lavorare con i quad, ma ti ritrovi a ignorare il quarto vertice in quasi tutti i casi, tranne quando (frequentemente) dovresti assicurarti che sia complanare con gli altri tre che definiscono il quad. E, la soluzione più logica al caso in cui si tratta non è complanare sarebbe quella di dividere il quad in due triangoli. Quindi, perché non farlo per cominciare?

Quale sarebbe il punto di lavorare con i quad?

Se vuoi un quad, metti insieme due triangoli.


2

Se assumiamo che ottenere 4 punti per essere complanari non sia un problema (è, come hanno sottolineato gli altri, ma sopportate con me) allora scoprirete che rendere un trapezio arbitrario (che è come apparirà di solito un quadrilatero quando trasformato in spazio dello schermo) non è particolarmente diverso dal rendering di un triangolo - in effetti, praticamente funziona allo stesso modo una volta eseguito il ritaglio in quanto può introdurre vertici extra. (Almeno in un modello software - l'hardware potrebbe avere un modo più semplice per eseguire il clipping con la forza bruta.)

Il problema rimanente è quindi quello dell'efficienza rappresentativa. - puoi rappresentare facilmente un quadruplo con 2 triangoli e senza vertici aggiuntivi se usi una striscia triangolare (3 verti per il 1o triangolo, quindi un vert in più per il 2o triangolo). D'altra parte, se provi a rappresentare un triangolo con un quadruplo, devi usare 4 vertici e avere uno degenerato identico a un altro. Questo non è l'ideale in termini di efficienza.

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.