
En gráficos por computadora , el descarte de caras posteriores determina si un polígono que forma parte de un sólido necesita ser dibujado. [ 1 ] [ 2 ] [ 3 ] Los polígonos que no están orientados hacia el observador no necesitan ser dibujados, ya que quedarán ocultos por otros polígonos que sí lo están. Este proceso hace que la renderización de objetos sea más rápida y eficiente al reducir la cantidad de polígonos que se deben dibujar.
Por ejemplo, en una escena urbana, generalmente no es necesario dibujar los polígonos de los lados de los edificios que dan a la parte opuesta a la cámara ; estos quedan completamente ocultos por los lados que dan a la cámara. Si varias superficies dan a la cámara, puede ser necesario utilizar métodos adicionales como el Z-buffering o el algoritmo del pintor para asegurar que se renderice la superficie correcta. El descarte de caras posteriores suele ser una prueba bastante sencilla, que solo requiere el cálculo de un producto escalar , por lo que se utiliza a menudo como un paso en el proceso gráfico que reduce el número de superficies que deben tenerse en cuenta.
En general, se puede asumir que el descarte de caras posteriores no produce artefactos visibles en una escena renderizada si esta contiene únicamente geometría cerrada y opaca. En escenas con polígonos transparentes, los polígonos posteriores pueden volverse visibles mediante el proceso de composición alfa . El descarte de caras posteriores también se puede aplicar a otros problemas. Por ejemplo, en la renderización de estructuras alámbricas , se puede utilizar para abordar parcialmente el problema de la eliminación de líneas ocultas , pero solo para geometría convexa cerrada . El descarte de caras posteriores también se puede aplicar a superficies planas distintas de los polígonos, por ejemplo, discos, que tienen un vector normal constante o se extiende a parches donde la normal de la superficie puede estar delimitada. [ 4 ]
Una técnica relacionada es el recorte , que determina si los polígonos están dentro del campo de visión de la cámara. Como el recorte suele ser más costoso que el descarte de caras posteriores, este último se aplica a menudo primero. [ 2 ] Otra técnica similar es el descarte Z, también conocido como descarte por oclusión , que intenta omitir el dibujo de los polígonos que están cubiertos desde el punto de vista por otros polígonos visibles.
En renderizados no realistas, ciertas caras pueden descartarse según sean visibles o no, en lugar de según estén de espaldas a la cámara. El "casco invertido" o "descarte de caras frontales" puede utilizarse para simular contornos o sombreadores de dibujos animados sin efectos de posprocesamiento. [ 5 ]
Historia
El descarte de caras posteriores se ha utilizado al menos desde la década de 1970. [ 6 ] Se ha utilizado en muchos videojuegos, incluida la versión original de 1984 para BBC Micro del juego Elite . [ 7 ] A mediados de la década de 1990, muchos sistemas gráficos podían implementar el descarte de caras posteriores por hardware. [ 4 ]
Implementación
Un método para implementar el descarte de caras posteriores es descartando todos los polígonos donde el producto escalar de su normal de superficie que apunta hacia afuera ,y el vector de línea de visión,, es mayor o igual que cero:
En el caso de renderizar un polígono especificado por una lista de vértices, esto podría calcularse mediante
donde P es el punto de vista, V 0 es el primer vértice de un triángulo y N se puede calcular como el producto vectorial de dos vectores que representan los lados del triángulo adyacentes a V 0.
Dado que el producto vectorial es anticonmutativo , definir la normal en términos del producto vectorial significa que la dirección normal depende del orden (enrollamiento) de los vértices:
Por consiguiente, el orden de los vértices se suele elegir de forma que los triángulos frontales tengan una orientación en el sentido de las agujas del reloj, y N, definida como se indicó anteriormente, es la normal que apunta hacia afuera del objeto. En esta configuración, la cara posterior puede considerarse una prueba para determinar si los puntos del polígono aparecen en sentido horario o antihorario al proyectarse en la pantalla. Si el usuario ha especificado que los polígonos frontales tengan una orientación en el sentido de las agujas del reloj, pero el polígono proyectado en la pantalla tiene una orientación antihoraria, entonces se ha rotado para que quede de espaldas a la cámara y no se dibujará.
Si los puntos ya están en el espacio de visión, se puede suponer que P es (0, 0, 0) , el origen, simplificando la desigualdad anterior:
También es posible utilizar este método en el espacio de proyección representando la desigualdad anterior como un determinante de una matriz y aplicándole la matriz de proyección. [ 8 ]
Existe otro método basado en la paridad de reflexión, que es más apropiado para dos dimensiones donde no se puede calcular la normal de la superficie (también conocido como verificación en sentido antihorario).
Sea un triángulo unitario en dos dimensiones ( coordenadas homogéneas ) definido como
Luego, para algún otro triángulo, también en dos dimensiones,
Definir una matriz que transforme el triángulo unitario:
de modo que:
Descartar el triángulo si la matriz M contiene un número impar de reflexiones (orientadas en la dirección opuesta al triángulo unitario).
El triángulo unitario se utiliza como referencia y la transformación M como traza para determinar si el orden de los vértices difiere entre dos triángulos. La única forma en que el orden de los vértices puede cambiar en dos dimensiones es mediante la reflexión. La reflexión es un ejemplo de función involutiva (con respecto al orden de los vértices); por lo tanto, un número par de reflexiones dejará el triángulo con la misma cara, como si no se hubiera aplicado ninguna. Un número impar de reflexiones dejará el triángulo con la cara opuesta, como si se hubiera aplicado exactamente después de una reflexión. Las transformaciones que contienen un número impar de reflexiones siempre tienen un factor de escala negativo; asimismo, el factor de escala es positivo si no hay reflexiones o si hay un número par de ellas. El factor de escala de una transformación se calcula mediante el determinante de su matriz.
Referencias
- ↑ Foley, James D .; van Dam, Andries ; Feiner, Steven K .; Hughes, John (15 de junio de 1990). Gráficos por computadora: Principios y práctica (2.ª ed.). Addison-Wesley. ISBN 978-0-201-12110-0.
- 1 2 Watt, Alan; Watt, Mark (1992). Técnicas avanzadas de animación y renderizado . Addison-Wesley. ISBN 0-201-54412-1.
- ↑ Jones, Huw (2001). Gráficos por computadora a través de matemáticas clave . Springer. ISBN 1-85233-422-3.
- 1 2 Kumar, Subodh; Manocha, Dinesh; Garrett, Bill; Lin, Min (1996). " Eliminación jerárquica de caras posteriores" (PDF) . 7.º Taller Eurographics sobre renderizado : 231–240 . Recuperado el 8 de febrero de 2025 .
- ↑ Hoeven, van der, Jorick (2008). No fotorrealismo en sistemas de renderizado interactivo (PDF) (tesis de licenciatura en informática). Universidad de Oxford. Archivado del original (PDF) el 2 de noviembre de 2021. Consultado el 10 de agosto de 2023 .
- ↑ Sutherland, Ivan E; Sproull, Robert F; Schumacker, Robert A (1974). "Una caracterización de diez algoritmos de superficie oculta" . ACM Computing Surveys . 6 (1). ACM: 1– 55. doi : 10.1145/356625.356626 . Recuperado el 8 de febrero de 2025 .
- ↑ Moxon, Mark (2020). "Cómo Elite dibuja naves 3D de aspecto sólido dibujando solo las caras visibles" . bbcelite.com . Consultado el 8 de febrero de 2025 .
- ↑ Eberly, David H. (2006). Diseño de motores de juegos 3D: Un enfoque práctico para gráficos por computadora en tiempo real . Estados Unidos: Morgan Kaufmann Publishers. pág. 69. ISBN 0122290631.
- Renderizado 3D
- Algoritmos de gráficos por computadora