stringtranslate.com

Determinación de superficies ocultas

En gráficos por computadora en 3D , la determinación de superficies ocultas (también conocida como determinación de superficies mostradas , eliminación de superficies ocultas ( HSR ), eliminación de oclusión ( OC ) o determinación de superficies visibles ( VSD )) es el proceso de identificar qué superficies y partes de superficies se pueden ver desde un ángulo de visión particular. Un algoritmo de determinación de superficies ocultas es una solución al problema de visibilidad , que fue uno de los primeros problemas importantes en el campo de los gráficos por computadora en 3D. [ cita requerida ] El proceso de determinación de superficies ocultas a veces se llama ocultamiento , y a un algoritmo de este tipo a veces se le llama ocultador . [ cita requerida ] Cuando se hace referencia a la representación de líneas, se conoce como eliminación de líneas ocultas . [ cita requerida ] La determinación de superficies ocultas es necesaria para renderizar una escena correctamente, de modo que uno no pueda ver las características ocultas detrás del modelo en sí, permitiendo que solo sea visible la parte naturalmente visible del gráfico.

Fondo

La determinación de superficies ocultas es un proceso mediante el cual se evita que se representen las superficies que no deberían ser visibles para el usuario (por ejemplo, porque se encuentran detrás de objetos opacos como paredes). A pesar de los avances en la capacidad del hardware, aún existe la necesidad de algoritmos de representación avanzados . La responsabilidad de un motor de representación es permitir espacios de mundo grandes y, a medida que el tamaño del mundo se acerca al infinito, el motor no debe disminuir su velocidad, sino permanecer a una velocidad constante. La optimización de este proceso se basa en poder garantizar la implementación de la menor cantidad posible de recursos para la representación de superficies que no terminarán mostrándose al usuario.

Existen muchas técnicas para determinar superficies ocultas. Básicamente, son un ejercicio de ordenación y, por lo general, varían en el orden en que se realiza la ordenación y en cómo se subdivide el problema. La ordenación de grandes cantidades de primitivas gráficas se realiza generalmente mediante el método divide y vencerás .

Algoritmos

Teniendo en cuenta el proceso de renderizado , los pasos de proyección , recorte y rasterización se manejan de manera diferente mediante los siguientes algoritmos:

Buffer Z
Durante la rasterización, el valor de profundidad/Z de cada píxel (o muestra en el caso del anti-aliasing, pero sin pérdida de generalidad se utiliza el término píxel ) se compara con un valor de profundidad existente. Si el píxel actual está detrás del píxel en el búfer Z, el píxel se rechaza, de lo contrario, se sombrea y su valor de profundidad reemplaza al del búfer Z. El búfer Z admite escenas dinámicas fácilmente y actualmente se implementa de manera eficiente en hardware de gráficos. Este es el estándar actual. El costo de usar el búfer Z es que utiliza hasta 4 bytes por píxel y que el algoritmo de rasterización necesita comparar cada muestra rasterizada con el búfer Z. El búfer Z también puede sufrir artefactos debido a errores de precisión (también conocido como Z-fighting ).
Buffers de cobertura (Buffer C ) y buffer de superficie ( buffer S )
Más rápido que los buffers Z y de uso común en juegos de la era Quake I. En lugar de almacenar el valor Z por píxel, almacenan una lista de segmentos ya mostrados por línea de la pantalla. Luego, los nuevos polígonos se cortan contra segmentos ya mostrados que los ocultarían. Un buffer S puede mostrar polígonos sin clasificar, mientras que un buffer C requiere que los polígonos se muestren desde el más cercano al más lejano. Debido a que la técnica del buffer C no requiere que se dibuje un píxel más de una vez, el proceso es ligeramente más rápido. Esto se usaba comúnmente con árboles de partición de espacio binario (BSP), que proporcionaban la clasificación de los polígonos.
Lista de aristas activas ordenadas
En Quake 1 se utilizaba para almacenar una lista de los bordes de los polígonos que ya se mostraban (consulte la representación de líneas de escaneo ). Los polígonos se muestran desde el más cercano al más lejano. Los polígonos nuevos se recortan contra los bordes de los polígonos que ya se mostraban, lo que crea nuevos polígonos para mostrar y luego almacenar los bordes adicionales. Es mucho más difícil de implementar que los búferes S/C/Z, pero se escala mucho mejor con aumentos en la resolución.
Algoritmo del pintor
Ordena los polígonos por su baricentro y los dibuja de atrás hacia adelante. Esto produce pocos artefactos cuando se aplica a escenas con polígonos de tamaño similar que forman mallas suaves y la eliminación de caras posteriores activada. El costo aquí es el paso de ordenación y el hecho de que pueden ocurrir artefactos visuales. Este algoritmo está defectuoso por diseño para escenas generales, ya que no puede manejar polígonos en varias configuraciones comunes, como superficies que se intersecan entre sí.
Partición binaria del espacio (BSP)
Divide una escena a lo largo de planos correspondientes a los límites de los polígonos. La subdivisión se construye de tal manera que proporcione un orden de profundidad inequívoco desde cualquier punto de la escena cuando se recorre el árbol BSP. La desventaja aquí es que el árbol BSP se crea con un preproceso costoso. Esto significa que es menos adecuado para escenas que consisten en geometría dinámica. La ventaja es que los datos están preordenados y libres de errores, listos para los algoritmos mencionados anteriormente. Tenga en cuenta que el BSP no es una solución para HSR, solo una ayuda.
Trazado de rayos
Intenta modelar la trayectoria de los rayos de luz hacia un punto de vista trazando los rayos desde el punto de vista hacia la escena. Aunque no es un algoritmo de eliminación de superficies ocultas como tal, resuelve implícitamente el problema de eliminación de superficies ocultas al encontrar la superficie más cercana a lo largo de cada rayo de vista. En la práctica, esto es equivalente a ordenar toda la geometría por píxel.
El algoritmo Warnock
Divide la pantalla en áreas más pequeñas y ordena los triángulos dentro de ellas. Si hay ambigüedad (es decir, los polígonos se superponen en profundidad dentro de estas áreas), se produce una subdivisión adicional. En el límite, la subdivisión puede producirse hasta el nivel de píxel.

Descarte y determinación de la superficie visible

Un área relacionada con la determinación de la superficie visible (VSD) es la eliminación selectiva , que suele ocurrir antes de la VSD en un proceso de renderización. Las primitivas o los lotes de primitivas se pueden rechazar en su totalidad, lo que suele reducir la carga en un sistema bien diseñado.

La ventaja de realizar la selección al principio del proceso es que no es necesario recuperar, transformar, rasterizar ni sombrear objetos enteros que son invisibles. Los tipos de algoritmos de selección incluyen:

Eliminación de troncos truncados

El tronco de visualización es una representación geométrica del volumen visible para la cámara virtual . Naturalmente, los objetos que se encuentran fuera de este volumen no serán visibles en la imagen final, por lo que se descartan. A menudo, los objetos se encuentran en el límite del tronco de visualización. Estos objetos se cortan en pedazos a lo largo de este límite en un proceso llamado recorte , y los pedazos que se encuentran fuera del tronco se descartan ya que no hay lugar para dibujarlos.

Eliminación de la cara posterior

En el caso de los objetos 3D, una parte de la superficie del objeto mira hacia la cámara y el resto mira hacia el lado opuesto, es decir, está en la parte posterior del objeto, obstaculizada por la parte frontal. Si el objeto es completamente opaco, nunca es necesario dibujar esas superficies. Se determinan por el orden de giro de los vértices: si el triángulo dibujado tiene sus vértices en el sentido de las agujas del reloj en el plano de proyección cuando mira hacia la cámara, cambian al orden contrario a las agujas del reloj cuando la superficie se aleja de la cámara.

Por cierto, esto también hace que los objetos sean completamente transparentes cuando la cámara del punto de vista se encuentra dentro de ellos, porque entonces todas las superficies del objeto están orientadas en dirección opuesta a la cámara y son descartadas por el renderizador. Para evitar esto, el objeto debe configurarse como de doble cara (es decir, no se realiza el descarte de la cara posterior) o tener superficies internas separadas.

Eliminación de contribuciones

A menudo, los objetos están tan lejos que no contribuyen significativamente a la imagen final. Estos objetos se descartan si su proyección en la pantalla es demasiado pequeña. Consulte Plano de recorte .

Eliminación por oclusión

Se pueden descartar los objetos que se encuentran completamente detrás de otros objetos opacos. Este es un mecanismo muy popular para acelerar la renderización de escenas grandes que tienen una complejidad de profundidad moderada a alta. Existen varios tipos de enfoques de eliminación de oclusión:

La disertación de Hansong Zhang "Eliminación de oclusión efectiva para la visualización interactiva de modelos arbitrarios" [1] describe un enfoque de eliminación de oclusión.

Divide y vencerás

Un tema popular en la literatura de VSD es dividir y vencer . El algoritmo Warnock fue pionero en dividir la pantalla. El trazado de haces es un enfoque de trazado de rayos que divide los volúmenes visibles en haces. Varios enfoques de subdivisión del espacio de pantalla reducen la cantidad de primitivas consideradas por región, por ejemplo, mosaico o recorte BSP del espacio de pantalla. El mosaico se puede utilizar como un preproceso para otras técnicas. El hardware de búfer Z puede incluir típicamente un "hi-Z" grueso, contra el cual las primitivas se pueden rechazar de manera temprana sin rasterización, esta es una forma de eliminación selectiva por oclusión.

Las jerarquías de volumen delimitador (BVH) se utilizan a menudo para subdividir el espacio de la escena (los ejemplos son el árbol BSP , el octree y el kd-tree ). Esto permite que la determinación de la visibilidad se realice de forma jerárquica: efectivamente, si un nodo del árbol se considera invisible , entonces todos sus nodos secundarios también son invisibles y no es necesario ningún procesamiento adicional (el renderizador puede rechazarlos a todos). Si un nodo se considera visible , entonces es necesario evaluar a cada uno de sus secundarios. Este recorrido es efectivamente un paseo por el árbol, donde la invisibilidad/oclusión o llegar a un nodo hoja determina si se debe detener o si se debe recurrir respectivamente.

Véase también

Fuentes

  1. ^ "Eliminación de oclusión con mapas de oclusión jerárquicos". www.cs.unc.edu .