¿Cómo funciona la teselación de hardware?

34

Me gustaría que alguien explicara en términos relativamente claros cómo funciona la teselación de hardware considerando que es la nueva palabra de moda con DX11.

Gracias.

SD021
fuente

Respuestas:

42

Te daré la versión "simple" y dejaré que otra persona te complete los detalles si estás interesado :).

Básicamente hay dos formas de modelar objetos 3D. El primero es uno que no se ve mucho en los juegos, e implica el uso de curvas precisas y definidas matemáticamente para definir la forma de un objeto. Usando este método, el nivel de detalle es (prácticamente hablando) "infinito". Tome un cilindro por ejemplo. Un cilindro se puede definir en términos matemáticos muy simples: todo lo que realmente necesita saber es el radio en los extremos y la longitud del cilindro. En términos de geometría, esta información es todo lo que necesitamos para renderizar el cilindro en una escena 3D. Además, podemos escalar fácilmente el cilindro para hacerlo más grande o más pequeño; todo lo que necesitamos hacer es mantener la relación entre la longitud y el radio. Podemos usar las mismas fórmulas para representar la geometría, pero con diferentes parámetros. Podemos representar un toro ("donut" forma) también fácilmente: simplemente necesitamos conocer el radio interno y el radio externo. A partir de eso, podemos calcular el diámetro (y, por lo tanto, el radio) del cuerpo de la dona (la "torta") restando el radio interno del radio externo. El cuerpo circular se envuelve a lo largo del arco definido por el radio interno. Este tipo de definición 3D es agradable porque es relativamente simple (lo que resulta en un archivo de modelo pequeño) y no hay un límite significativo para el nivel de detalle. La desventaja es que el hardware de video actual no está diseñado para procesar este tipo de modelos de manera eficiente (si es que lo hace). El cuerpo circular se envuelve a lo largo del arco definido por el radio interno. Este tipo de definición 3D es agradable porque es relativamente simple (lo que resulta en un archivo de modelo pequeño) y no hay un límite significativo para el nivel de detalle. La desventaja es que el hardware de video actual no está diseñado para procesar este tipo de modelos de manera eficiente (si es que lo hace). El cuerpo circular se envuelve a lo largo del arco definido por el radio interno. Este tipo de definición 3D es agradable porque es relativamente simple (lo que resulta en un archivo de modelo pequeño) y no hay un límite significativo para el nivel de detalle. La desventaja es que el hardware de video actual no está diseñado para procesar este tipo de modelos de manera eficiente (si es que lo hace).

La otra forma es combinar geometría simple para aproximar la forma que queremos representar. Hacemos esto con un proceso llamado teselación . Podríamos teselar un cilindro dividiéndolo en formas más primitivas: dos círculos y una serie de rectángulos largos, que se envuelven alrededor del borde exterior. Los círculos se pueden dividir en muchos triángulos pequeños, al igual que los rectángulos a lo largo del borde. El resultado final es un modelo compuesto solo por triángulos:

Imagen del cilindro triangulado

O, para el toro:

Imagen del toro triangulado

La buena noticia es que el hardware de video está optimizado para manejar este tipo de geometría. Las GPU de hoy no tienen problemas para producir toneladas y toneladas de triángulos cada segundo. Sin embargo, hay un problema obvio: estamos tratando de representar superficies curvas utilizando formas que tienen bordes planos. Para que nuestro cilindro se vea como un cilindro (a diferencia de un cubo), queremos dividirlo en muchosde pequeños triángulos Bueno, cuantos queremos? Depende. ¿Qué tipo de hardware se usará para renderizar la escena? El hardware más rápido puede renderizar triángulos más rápido que el hardware más lento, produciendo velocidades de cuadro más rápidas. Hay otros factores a considerar, como cuántos otros objetos estarán presentes en la escena y qué tan complejos serán. En los juegos, generalmente hay muchos objetos en una escena determinada. Además, los objetos pueden viajar a través de diferentes escenas, cada una con diferentes niveles de complejidad visual. Es difícil determinar el nivel de detalle a utilizar cuando teselamos nuestros modelos.

Otro problema es el de la complejidad geométrica: mientras que una definición de cilindro basada en una curva es muy simple (radio y longitud), una definición teselada probablemente combina cientos de triángulos, cada uno de los cuales debe definirse de manera independiente. En consecuencia, nuestro archivo de modelo teselado será mucho, mucho más grande. Digamos que tenemos un modelo matemáticamente definido de algo complejo, como una persona. Nuestro archivo de modelo puede tener solo 24kb de tamaño. Bueno, una vez que ese modelo está teselado, el archivo resultante podría ser 24mb (24,000kb). Esa es una gran diferencia.

La teselación de hardware aprovecha los sombreadores de geometría para realizar la teselación asistida por hardware en tiempo real (o casi en tiempo real). Esencialmente, proporciona un mecanismo para tomar un modelo 3D matemáticamente definido y transformarlo en un formato teselado que la tarjeta de video puede representar de manera eficiente. Tradicionalmente, los desarrolladores de juegos han realizado teselaciones en el estudio y enviaron los modelos teselados con el juego. La teselación de hardware nos permite diferir este proceso hasta que el juego realmente se ejecute en la computadora del jugador. Esto tiene algunos beneficios serios:

  1. El tamaño del contenido 3D del juego disminuye drásticamente (se requieren menos discos o descargas más pequeñas, y se requiere menos espacio en el disco duro).

  2. Podemos controlar el nivel de detalle en tiempo real . ¿Estamos corriendo en una bestia de última generación de una máquina de juego? Si es así, podemos teselar utilizando un nivel de detalle muy alto. ¿Estamos corriendo en una vieja computadora portátil con gráficos integrados? No hay problema; simplemente podemos reducir el nivel de detalle para aumentar el rendimiento.

Así que esa es la esencia de esto. Probablemente no sea 100% preciso, ya que no soy un programador 3D, pero eso debería darle una mejor idea de por qué todo el alboroto :).

Saludos,
Mike

Mike Strobel
fuente
Wow ... genial! El 'resumen' más largo que he leído: P
66
Hay otra cosa que determina el nivel de teselación requerido: el tamaño del objeto en la pantalla. La teselación en tiempo de ejecución le permite tener el nivel de detalle correcto en todas partes, sin crear múltiples versiones de cada objeto.
Adam
¿Eso es un poco pesado de CPU?
jcora
@Bane, ¿querías decir GPU intensivo? La CPU podría importarle menos.
Nate Zaugg
0

Lástima que esa no sea la forma en que la mayoría de los desarrolladores están utilizando la teselación ahora o en el futuro cercano. Todo lo que usan tess en este momento es desplazar principalmente superficies planas de acuerdo con su mapa de altura. Eso también da como resultado una buena apariencia, pero sigo pensando que es un mal uso de una tecnología mucho más capaz.

zemit
fuente
Las herramientas y los canales de producción deben ser repensados ​​y reconstruidos (como estoy seguro de que sabe mejor que la mayoría, @SamHocevar, por lo que este comentario no está dirigido a usted), y el nuevo hardware tiene que proliferar en un porcentaje significativo.
Rob Craig
@RobCraig Tenga en cuenta que acabo de corregir la ortografía en ese comentario; No soy el autor original.
sam hocevar
@SamHocevar Sí, pensé, ¡aunque gracias por aclarar!
Rob Craig