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.
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 .
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 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:
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.
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.
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 .
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 oclusiones efectiva para la visualización interactiva de modelos arbitrarios" [1] describe un enfoque de eliminación de oclusiones.
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.