En gráficos por computadora en 3D , la determinación de la superficie oculta (también conocida como determinación de la superficie mostrada , eliminación de la superficie oculta ( HSR ), selección de oclusión ( OC ) o determinación de la superficie visible ( VSD )) es el proceso de identificar qué superficies y partes de Las 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 la 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 la superficie oculta a veces se denomina ocultación , y dicho algoritmo a veces se denomina ocultador [ cita necesaria ] . Cuando se hace referencia a la representación de líneas, se la conoce como eliminación de líneas ocultas [ cita necesaria ] . La determinación de la superficie oculta es necesaria para representar una escena correctamente, de modo que no se puedan ver las características ocultas detrás del modelo en sí, permitiendo que solo sea visible la parte del gráfico que se puede ver de forma natural.
La determinación de superficies ocultas es un proceso mediante el cual se evita que se representen 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, todavía se necesitan algoritmos de renderizado avanzados . La responsabilidad de un motor de renderizado es permitir grandes espacios mundiales y, a medida que el tamaño del mundo se acerca al infinito, el motor no debe reducir la velocidad sino permanecer a una velocidad constante. Optimizar este proceso pasa por poder garantizar el despliegue de la menor cantidad de recursos posible para el renderizado de superficies que no acabarán mostrándose al usuario.
Existen muchas técnicas para la determinación de superficies ocultas. Son fundamentalmente un ejercicio de clasificación y generalmente varían en el orden en que se realiza la clasificación y en cómo se subdivide el problema. La clasificación de grandes cantidades de primitivos gráficos generalmente se realiza mediante divide y vencerás .
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:
Un área relacionada con la determinación de la superficie visible (VSD) es la selección , que generalmente ocurre antes que la VSD en una tubería de renderizado. Las primitivas o lotes de primitivas se pueden rechazar en su totalidad, lo que normalmente reduce la carga en un sistema bien diseñado.
La ventaja de realizar la selección en las primeras etapas del proceso es que no es necesario buscar, transformar, rasterizar ni sombrear objetos completos que son invisibles. Los tipos de algoritmos de selección incluyen:
El tronco de visualización es una representación geométrica del volumen visible para la cámara virtual . Naturalmente, los objetos 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 observació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 porque no hay lugar para dibujarlos.
Con los objetos 3D, parte de la superficie del objeto mira hacia la cámara y el resto mira en dirección opuesta a la cámara, es decir, está en la parte posterior del objeto, obstaculizada por la parte frontal. Si el objeto es completamente opaco, nunca será necesario dibujar esas superficies. Están determinados 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 está frente a 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 de visión se encuentra dentro de ellos, porque entonces todas las superficies del objeto están de espaldas a la cámara y son seleccionadas por el renderizador. Para evitar esto, el objeto debe configurarse como de doble cara (es decir, no se elimina la cara posterior) o tener superficies interiores separadas.
A menudo, los objetos están tan lejos que no contribuyen significativamente a la imagen final. Estos objetos se desechan si su proyección en pantalla es demasiado pequeña. Consulte Plano de recorte .
Los objetos que están completamente detrás de otros objetos opacos pueden ser eliminados. Este es un mecanismo muy popular para acelerar la renderización de escenas grandes que tienen una complejidad de profundidad de moderada a alta. Existen varios tipos de enfoques de selección de oclusión:
La disertación de Hansong Zhang "Elección eficaz de oclusiones para la visualización interactiva de modelos arbitrarios" [1] describe un enfoque de selección de oclusiones.
Un tema popular en la literatura sobre VSD es divide y vencerás . El algoritmo de Warnock fue pionero en dividir la pantalla. El trazado de rayos es un enfoque de trazado de rayos que divide los volúmenes visibles en haces. Varios enfoques de subdivisión del espacio de la pantalla reducen el número de primitivas consideradas por región, por ejemplo, mosaico o recorte BSP del espacio de la pantalla. El mosaico se puede utilizar como proceso previo a otras técnicas. El hardware del búfer Z normalmente puede incluir un "hi-Z" aproximado, contra el cual las primitivas pueden rechazarse temprano sin rasterización; esta es una forma de selección de oclusión.
Las jerarquías de volumen delimitador (BVH) se utilizan a menudo para subdividir el espacio de la escena (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 en el á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 todos). Si un nodo se considera visible , entonces es necesario evaluar cada uno de sus hijos. Este recorrido es efectivamente un paseo por un árbol, donde la invisibilidad/oclusión o llegar a un nodo de hoja determina si detenerse o recurrir, respectivamente.