¿Por qué las uniones en T en las mallas producen grietas?

19

Muchas fuentes me han dicho que tener uniones en T en mallas 3D es una mala idea porque podría provocar grietas durante el renderizado. ¿Alguien puede explicar por qué sucede eso y qué se puede hacer para evitarlos?

ap_
fuente

Respuestas:

20

La respuesta de lhf es buena desde la perspectiva de la teselación, pero esto puede ocurrir con casos de uso de malla triangular más simples.

Tome este ejemplo trivial de tres triángulos de espacio de pantalla , ABC, ADE y DBE ...

ingrese la descripción de la imagen aquí

Aunque el punto E tenía, matemáticamente, la intención de estar exactamente en el segmento de línea AB, la tubería no usará valores completamente precisos, como números racionales (por ejemplo, https://gmplib.org/ ). En cambio, es probable que use flotadores, por lo que se introducirá alguna aproximación / error. El resultado probablemente será algo como:

ingrese la descripción de la imagen aquí

Tenga en cuenta que todos los vértices pueden tener imprecisiones. Aunque el ejemplo anterior muestra una grieta, la unión en T en su lugar puede provocar una superposición a lo largo del borde, lo que hace que los píxeles se dibujen dos veces. Esto puede no parecer tan malo, pero puede causar problemas con la transparencia o las operaciones de plantilla.

Usted puede entonces pensar que con coma flotante el error introducido será insignificante, pero en un procesador, el vértice del espacio de pantalla los valores (x, y) son casi siempre representado por los números de punto fijo y por lo tanto el desplazamiento de la voluntad situación ideal Suele ser mucho mayor. Además, a medida que el hardware de renderizado "interpola" el segmento de línea píxel por píxel con su propia precisión interna, hay aún más posibilidades de que se desvíe de la ubicación redondeada de E.

Si la unión en T se "elimina", por ejemplo, dividiendo también el triángulo ABC en dos, es decir, AEC y EBC, el problema desaparecerá ya que los cambios introducidos por los errores serán todos consistentes.

Ahora, podría preguntarse ¿por qué los renderizadores (especialmente HW) usan matemáticas de punto fijo para las coordenadas del vértice XY? ¿Por qué no usan punto flotante para reducir el problema? Aunque algunos lo hicieron (por ejemplo, el Dreamcast de Sega) puede llevar a otro problema en el que las matemáticas de configuración de triángulos se vuelven catastróficamente inexactas, particularmente para triángulos largos y delgados, y cambian de tamaño de maneras desagradables.

Simon F
fuente
2
Cuando dice "los valores de vértice (X, Y) casi siempre están representados por números de punto fijo", supongo que se refiere a las coordenadas de vértice del espacio de pantalla en el rasterizador, ¿verdad? No son los vértices originales del espacio modelo.
Nathan Reed
2
@NathanReed Sí. Solo el espacio de pantalla X&Y (y, tal vez en algunas GPU, la Z). Lo editaré para aclararlo.
Simon F
9

Al modelar superficies paramétricas con una malla en el dominio de parámetros, las uniones en T probablemente aparecerán como discontinuidades en la superficie. Estos aparecerán como huecos en el renderizado. Vea abajo.

En términos más generales, las uniones T en mallas triangulares probablemente darán lugar a discontinuidades de los atributos interpolados, como el color y las normales.

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

lhf
fuente
4

Error de redondeo de punto flotante.

Después de transformar la unión T y el punto en la T puede redondearse lejos del borde.

Entonces puede suceder que un fragmento que se muestrea para un píxel se encuentre en el espacio entre las 2 superficies.

Esto se puede solucionar al no tener una unión en T en primer lugar.

monstruo de trinquete
fuente
3

La manera simple de evitar esto es asegurarse de que todos sus vértices estén soldados

El problema es que tiene cortes a lo largo de los bordes con un vértice, pero no tiene un vértice correspondiente en el borde adyacente para soldarlo / conectarlo, si lo considera como un botón en una camisa, ha sembrado en un abotone hasta el borde, pero no le ha hecho un agujero, por lo que la tela está abierta.

En la imagen a continuación, los puntos rojos representan vértices correctamente soldados, todos los puntos azules necesitan un vértice adicional para cortarse en el borde adyacente.

ingrese la descripción de la imagen aquí

En términos generales, es una buena práctica mantener su modelado en quad y tri, esto ayuda a aliviar este problema, ya que siempre debe tener un vértice correspondiente para soldar también. También ayuda mantener los cuádriceps si planea usar algún método de subdivisión en la malla.

MephistonX
fuente