¿Por qué los motores de juego convierten modelos en triángulos en lugar de usar quads?


47

He trabajado usando Maya para animación y más proyectos orientados al cine, sin embargo, también me estoy centrando en mis estudios sobre el desarrollo de videojuegos. De todos modos, estaba hablando con uno de mis profesores y no pudimos entender por qué todos los motores de juego (que yo sepa) se convierten en triángulos.

¿Alguien sabe por qué los motores de juego se convierten en triángulos en comparación con dejar los modelos como polígonos de cuatro lados? Además, ¿cuáles son los pros y los contras (si los hay) de hacer esto?


1
Algo relacionado, el NVidia NV1 usó el mapeo de textura cuadrático (que usa quads), en lugar de triángulos / polígonos. No fue un gran éxito, por decir lo menos. Ver en.wikipedia.org/wiki/NV1 .
Macke

55
@Macke: Cuadrático como en "ecuación cuadrática", no cuadrático como en "cuadrilátero". No utiliza quads sino más bien una curva cuadrática definida por 9 puntos. stason.org/TULARC/pc/3d-graphics-cards-faq/…

99
+1 para su pregunta pero un gran -1 para su profesor. Esto es algo básico que debería haber sabido tan bien como sabe el dorso de su propia mano, y una señal de que está un poco fuera de contacto con los desarrollos en los últimos 15 años.
Maximus Minimus

1
Bueno, en defensa de mis profesores, él no está en el lado del desarrollador del juego, es más un animador / modelador. Sabía que se convertía en tris, pero no sabía la razón matemática de por qué para renderizar. Pero sí, probablemente debería haberlo sabido.
Grant

Respuestas:


56

La conclusión es la Rasterización de triángulos, que es cómo las computadoras representan los objetos en la pantalla. Aunque otros lo dicen con más frecuencia que yo:

Todos los objetos 3D que vemos en la pantalla de la computadora están hechos de pequeños objetos geométricos a menudo llamados primitivos. Cuadriláteros, triángulos, n-gons, etc. son ejemplos de primitivas. Nos concentraremos en triángulos principalmente por una razón principal: cada objeto puede dividirse en triángulos, pero un triángulo no puede dividirse en otra cosa que no sean triángulos. Debido a esto, dibujar triángulos es mucho más simple que dibujar polígonos de orden superior; menos cosas con las que lidiar. Es por eso que esos triángulos se usan con tanta frecuencia en gráficos de computadora.

El énfasis es mío. Fuente: http://www.devmaster.net/articles/software-rendering/part3.php


2
¡Increíble! Eso tiene mucho sentido cuando lo piensas. ¡Gracias por la respuesta!
Grant

1
En OpenGL ES, como parte del esfuerzo por simplificar la API, ni siquiera se admiten quads y polígonos. Entonces, una razón práctica para usar triángulos es porque no tienes otra opción. Pero la razón por la cual una API simplificada como ES evita otros tipos primitivos se debe a las razones descritas en esta y otras respuestas.
Suboptimus

55
+1 Porque es una respuesta que puedo usar con seguridad como referencia cuando alguien me pregunta lo mismo, a mis marcadores. Solo diga eso, siempre he pensado que la razón por la cual los triángulos son lo más primitivo posible es porque con la imprecisión de la aritmética de coma flotante, los tris son el único polígono seguro que puede garantizar que sea plano en todos los casos, con quads que no puede garantizar que lo harán ser plano todo el tiempo El software de modelado probablemente muestre objetos como quads o n-gons como conveniencia para el modelador, pero aplica transformaciones / renderiza polígonos divisores como dos o más triángulos.
Hatoru Hansou

56

Los triángulos tienen muchas propiedades que los hacen más fáciles de dibujar y, por lo tanto, más rápidos.

Puede que cuatro puntos o más no estén en el mismo plano, pero tres puntos siempre lo están (ignorando los casos degenerados). Esto tiene la interesante propiedad de que los valores escalares varían linealmente sobre la superficie del triángulo. Incluso cuando el triángulo se proyecta en la pantalla, los valores escalares aún varían linealmente con respecto a x '/ z e y' / z.

Esto, a su vez, significa que la mayoría, si no todo, de lo que se necesita para sombrear, mapear texturas y filtrar en profundidad un triángulo se puede calcular mediante interpolación lineal, que se puede hacer extremadamente rápido en hardware especializado.

tl; dr: los triángulos son los primitivos más simples, por lo que los algoritmos que tratan con triángulos pueden optimizarse en gran medida.


11
+1. Creo que el hecho de que un triángulo sea siempre plano es una de las razones principales. Los polígonos no planos hacen las cosas mucho más complicadas.
bummzack

2
+1. Creo que los triángulos son el único polígono que puede garantizar que sea plano es la razón técnica principal para hacer apis y hardware que requiere triángulos. El software de modelado probablemente muestre mallas como quads para comodidad del modelador.
Hatoru Hansou

1
Una buena analogía no plana que uso ... Un taburete de tres patas puede pararse en el suelo de una sola manera, sus pies son como las esquinas de un triángulo. Pero un taburete de cuatro patas puede pararse en el suelo de dos maneras, y se tambalea de una posición a otra si una pierna es más corta que las otras.
ChrisC 01 de

Tengo curiosidad; ¿Cómo es posible que un triángulo siempre tenga puntos en el mismo plano? ¿Cómo dibujas una esfera entonces? Al menos uno de los puntos debe traducirse en un plano diferente, de lo contrario obtendrá una superficie plana.
rataplan

@newbiez Tres vértices siempre definen un solo plano. Una esfera está hecha de diferentes triángulos; Dos triángulos adyacentes que representan un parche de la superficie de la esfera comparten dos vértices, pero no están en el mismo plano. Esta imagen puede aclarar las
ggambett

8

Tres puntos (un triángulo) SIEMPRE definen un plano plano. En otras palabras, dados cualquiera de los tres puntos, siempre puede crear un plano plano que pueda cortar los tres puntos. Sin embargo, lo mismo no siempre es cierto para cuatro puntos. Puede tener cuatro puntos en un avión, pero también puede tener cuatro puntos que no están en un avión.


2
De hecho, es más probable que 4 puntos aleatorios no estén en un plano, por lo que tendrá que triangular de todos modos.
ChrisF

Esto solo es cierto si los puntos no son coincidentes.
notlesh

1
Incluso si los puntos son coincidentes, son coplanarios en un número infinito de planos.
3Dave

Ser coplanar no "SIEMPRE define un plano plano" .
sam hocevar

6

No son los "motores de juego" los que hacen esto; todo el software 3D que usas hace esto. Simplemente no te dice nada al respecto, y tu profesor parece poco calificado si no sabe esto. Existen en la memoria de la computadora incluso si el software te los está ocultando. Todos los programas 3D tienen una opción que hará visibles los triángulos. También tendrán una opción que los divide en bordes editables, para que pueda jugar con ellos. Pero siempre estuvieron allí para empezar y es ingenuo de tu profesor enseñar esta materia y aún preguntarte "para qué sirven los triángulos".

Un triángulo es la única forma de organizar verts y garantizar una superficie plana. Cuando tienes un quad, puedes organizar los verts de manera que se doblen. Pero ya está hecho de triángulos y son esos triángulos los que permiten la curva.


3

Un triángulo es la primitiva más simple que se puede describir de forma aislada porque tiene tres puntos, menos de los cuales no describen una superficie en 3D.

Debido a que un triángulo se puede considerar de forma aislada, es posible hacer una pieza de código o silicio que sea capaz de representar solo un triángulo, que a través del poder de la repetición puede representar cualquier superficie.

Por lo tanto, el primer sistema informático que logró representar "cualquier superficie en absoluto" lo hizo naturalmente al representar muchos triángulos de forma independiente.

Si uno piensa en los triángulos y quads como "primitivos" (es decir, como pedazos de geometría completamente aislados sin contexto), el triángulo es el más primitivo, por lo que tenderá a "ganar".

Sin embargo, una vez que las computadoras de grado de entretenimiento excedieron un cierto nivel de sofisticación en la década de 1980, la simplicidad de considerar los "primitivos" de forma aislada se volvió menos importante. Si los gráficos se van a producir en masa, las economías de escala favorecen el procesamiento de grupos de vértices relacionados, al igual que favorecen el ensamblaje de cien autos casi idénticos a la vez.

Es por eso que en la década de 1980, las películas adoptaron el "quad", que es un nombre inapropiado porque se refiere a una cuadrícula 2D de vértices en el espacio 3D, y no a un cuadrilátero aislado.

El mismo cambio de triángulos a "quads" aún no ha sucedido en el ámbito del entretenimiento interactivo, pero es probable que suceda, bastante pronto, y por las mismas razones que sucedieron en el negocio del cine.


2

Solo hay una forma de triangular un triángulo frente a 'n - 2' formas para un polígono de n lados. Entonces, los triángulos son, en última instancia, la forma menos ambigua de definir una forma poliédrica. Además, como lo han indicado otros carteles, hay muchas maneras de acelerar la rasterización triangular (en lugar de cuádruple o superior) (la constante z es una de mis favoritas). Además, es más fácil optimizar las pruebas de intersección de triángulo de rayos que las pruebas de intersección de polígonos arbitrarias de rayos. De hecho, muchas operaciones en polígonos de lados n se benefician de tener una representación triangulada a mano. Eso no quiere decir que las representaciones de polígonos de lados n son 'malas': son muy útiles pero, en última instancia, querrá trabajar con triángulos para muchas operaciones de malla.


2

Mientras el triángulo esté definido por tres vértices no colineales (léase: ninguno de los ángulos es exactamente Pi), entonces los vértices definen un plano único.

Un quad está, por supuesto, definido por cuatro vértices. Es perfectamente posible que esos vértices no sean coplanares. En ese caso, tu quad realmente sería dos triángulos divididos por una diagonal en el quad. Eso son dos planos, dos conjuntos de normales de superficie, etc.

Todas las herramientas de modelado disponibles, todos los algoritmos para texturizado, iluminación, etc. asumen que un modelo está hecho de segmentos planos, y cada fórmula que tenemos (los productos cruzados para el cálculo normal es el primero que tenemos) usan el conjunto de datos de entrada mínimo absoluto: tres los vértices definen un plano, y el plano es lo que necesitamos para hacer todas las cosas elegantes.

Ciertamente, podría escribir un motor para trabajar con quads, pero se encontraría ignorando el cuarto vértice en casi todos los casos, excepto cuando (con frecuencia) necesitaría asegurarse de que sea coplanar con los otros tres que definen el quad. Y, la solución lógica más al caso en que se trata no coplanares sería dividir el quad en dos triángulos. Entonces, ¿por qué no hacer eso para empezar?

¿Cuál sería el punto de trabajar con quads?

Si quieres un quad, junta dos triángulos.


2

Si suponemos que conseguir que 4 puntos sean coplanares no es un problema (lo es, como lo han señalado los demás, pero tengan paciencia conmigo), entonces encontrará que renderizar un trapecio arbitrario (que es lo que generalmente se verá un cuadrilátero) cuando se transforma en espacio de pantalla) no es particularmente diferente de representar un triángulo; de hecho, prácticamente funciona igual una vez que se realiza el recorte, ya que puede introducir vértices adicionales. (Al menos en un modelo de software, el hardware puede tener una forma más simple de fuerza bruta para hacer el recorte).

El problema restante, por lo tanto, es uno de eficiencia representacional. - puedes representar fácilmente un quad con 2 triángulos, y sin vértices adicionales si usas una tira triangular (3 vértices para el 1er triángulo, luego un vértice extra para el 2do triángulo). Por otro lado, si intentas representar un triángulo con un quad, debes usar 4 vértices y tener uno degenerado que sea idéntico a otro. Esto no es ideal en términos de eficiencia.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.