2009-03-27 13 views
7

El algoritmo de oclusión es necesario en CAD e industria del juego. Y ellos son diferentes en las dos industrias, creo. Mis preguntas son:Colección de algoritmos de oclusión

  1. ¿Qué tipo de algoritmos de oclusión se aplican respectivamente en los dos indurstries?
  2. y ¿cuál es la diferencia?

estoy trabajando en el desarrollo de software CAD, y el algoritmo de la oclusión hemos adoptado es - establece el identificador de objeto como su color (un número entero) y luego renderizar la escena, por fin, leer el píxel para averiguar la objetos visibles El rendimiento no es tan bueno, así que quiero obtener algunas buenas ideas aquí. Gracias.


Después de leer las anwsers, quiero aclarar que los algoritmos de oclusión aquí significa "matanza selectiva de oclusión" - averiguar la superficie o entidades visible antes de enviarlos a la tubería.

Con google, he encontrado un algoritmo en gamasutra. ¿Alguna otra buena idea o hallazgo? Gracias.

+0

Parece que está utilizando un búfer de elementos: http: // stackoverflow.com/questions/498601/what-is-the-best-approach-to-compute-efficient-the-first-intersection-between-a/570861 # 570861 No es un mal algoritmo, pero tendrá algunos problemas en los bordes visuales . –

Respuesta

3

Me pegó que la mayoría de las respuestas hasta el momento sólo se discuten oclusión de la imagen a fin . No estoy del todo seguro para CAD, pero en oclusión de juegos comienza a un nivel mucho más alto, utilizando árboles BSP, árboles oct y/o representación de portal para determinar rápidamente los objetos que aparecen dentro del tronco tridimensional.

+0

+1. DirectX/OpenGL ya hace un buen trabajo dibujando solo lo que ves (a través de un Z-buffer). Si desea limitar la cantidad de material que está procesando para obtener un mejor rendimiento, debe analizar uno de estos algoritmos. –

+0

Sí; pero aparte de la oclusión basada en píxeles, D3D ni OpenGL hacen el gráfico de escena "mágico". El recorte y el descarte no son suficientes para justificar el envío de todos los polígonos conocidos por el dispositivo de representación, ya que el recorte se realiza de forma algo lineal. –

5

En los juegos, la oclusión se realiza detrás de la escena usando una de las dos bibliotecas 3D: DirectX u OpenGL. Para entrar en detalles, la oclusión se realiza usando un Z buffer. Cada punto tiene un componente Z, puntos que son puntos de oclusión más cercanos que están más lejos.

El algoritmo de oclusión se realiza generalmente en hardware mediante un chip de procesamiento de gráficos 3D dedicado que implementa funciones DirectX u OpenGL. Un programa de juego que use DirectX u OpenGL dibujará objetos en el espacio tridimensional y hará que la biblioteca OpenGL/DirectX represente la escena teniendo en cuenta la proyección y la oclusión.

2

El término que debe buscar es hidden surface removal.

El renderizado en tiempo real generalmente aprovecha un método simple de eliminación de superficie oculta: eliminación de fondos ocultos. Cada poli tendrá un punto de "superficie normal" que se calcula previamente a una distancia establecida de la superficie. Al verificar el ángulo de la superficie normal con respecto a la cámara, sabrá que la superficie está mirando hacia afuera y, por lo tanto, no es necesario renderizarla.

Aquí hay algunos interactivos flash-based demos and explanations.

+0

Este proceso es necesario, pero no suficiente. Cualquier objeto cóncavo aún tendrá que tener las superficies renderizadas en el orden correcto, y si un objeto aparece en frente de otro, entonces la eliminación simple de la cara posterior no ayuda. –

+0

Nombré eliminación de caras ocultas porque ya se mencionó Z-buffering. Si escribiera algo más, estaría reiterando la página de Wikipedia que vinculaba. – spoulson

1

Hardware pixel Z-Buffering es por mucho la técnica más simple, sin embargo, en escenas de objetos de alta densidad aún puede intentar renderizar el mismo píxel varias veces, lo que puede convertirse en un problema de rendimiento en algunas situaciones. - Sin duda, debe asegurarse de que no está mapeando y texturizando miles de objetos que simplemente no son visibles.

Actualmente estoy pensando en este tema en uno de mis proyectos, he encontrado esto estimuló algunas ideas: http://www.cs.tau.ac.il/~dcor/Graphics/adv-slides/short-image-based-culling.pdf