stringtranslate.com

Partición del espacio binario

El proceso de creación de un árbol BSP

En informática , la partición binaria del espacio ( BSP ) es un método de partición del espacio que subdivide recursivamente un espacio euclidiano en dos conjuntos convexos utilizando hiperplanos como particiones. Este proceso de subdivisión da lugar a una representación de objetos dentro del espacio en forma de una estructura de datos en forma de árbol conocida como árbol BSP .

La partición binaria del espacio se desarrolló en el contexto de los gráficos por computadora en 3D en 1969. [1] [2] La estructura de un árbol BSP es útil en la renderización porque puede brindar de manera eficiente información espacial sobre los objetos en una escena, como por ejemplo, los objetos que se ordenan de adelante hacia atrás con respecto a un espectador en una ubicación determinada. Otras aplicaciones de BSP incluyen: realizar operaciones geométricas con formas ( geometría sólida constructiva ) en CAD , [3] detección de colisiones en robótica y videojuegos en 3D, trazado de rayos , simulación de paisajes virtuales, [4] y otras aplicaciones que involucran el manejo de escenas espaciales complejas.

Historia

Descripción general

Un ejemplo de un quadtree de partición espacial binaria recursiva para un índice 2D.

La partición binaria del espacio es un proceso genérico de división recursiva de una escena en dos hasta que la partición satisface uno o más requisitos. Puede verse como una generalización de otras estructuras de árbol espacial como árboles k -d y árboles cuádruples , donde los hiperplanos que dividen el espacio pueden tener cualquier orientación, en lugar de estar alineados con los ejes de coordenadas como en árboles k -d o árboles cuádruples. Cuando se utiliza en gráficos de computadora para representar escenas compuestas de polígonos planos , los planos de partición se eligen con frecuencia para que coincidan con los planos definidos por los polígonos en la escena.

La elección específica del plano de partición y el criterio para finalizar el proceso de partición varían según el propósito del árbol BSP. Por ejemplo, en la representación de gráficos por computadora, la escena se divide hasta que cada nodo del árbol BSP contiene solo polígonos que se pueden representar en un orden arbitrario. Cuando se utiliza la eliminación de caras posteriores , cada nodo, por lo tanto, contiene un conjunto convexo de polígonos, mientras que cuando se representan polígonos de dos lados, cada nodo del árbol BSP contiene solo polígonos en un solo plano. En la detección de colisiones o el trazado de rayos, una escena se puede dividir en primitivas en las que las pruebas de colisión o intersección de rayos son sencillas.

La partición binaria del espacio surgió de la necesidad de que los gráficos por computadora dibujaran rápidamente escenas tridimensionales compuestas de polígonos. Una forma sencilla de dibujar dichas escenas es el algoritmo del pintor , que produce polígonos en orden de distancia desde el espectador, de atrás hacia adelante, pintando sobre el fondo y los polígonos anteriores con cada objeto más cercano. Este enfoque tiene dos desventajas: el tiempo requerido para ordenar los polígonos en orden de atrás hacia adelante y la posibilidad de errores en los polígonos superpuestos. Fuchs y coautores [2] demostraron que la construcción de un árbol BSP resolvió ambos problemas al proporcionar un método rápido de ordenar polígonos con respecto a un punto de vista dado (lineal en el número de polígonos en la escena) y al subdividir los polígonos superpuestos para evitar errores que pueden ocurrir con el algoritmo del pintor. Una desventaja de la partición binaria del espacio es que generar un árbol BSP puede llevar mucho tiempo. Por lo tanto, normalmente se realiza una vez en la geometría estática, como un paso de precálculo, antes de la renderización u otras operaciones en tiempo real en una escena. El costo de construir un árbol BSP hace que sea difícil e ineficiente implementar directamente objetos en movimiento en un árbol.

Generación

El uso canónico de un árbol BSP es para la representación de polígonos (que tienen dos caras, es decir, sin eliminación de la cara posterior ) con el algoritmo del pintor. Cada polígono se designa con un lado frontal y un lado posterior que se pueden elegir arbitrariamente y solo afectan la estructura del árbol, pero no el resultado requerido. [2] Un árbol de este tipo se construye a partir de una lista desordenada de todos los polígonos de una escena. El algoritmo recursivo para la construcción de un árbol BSP a partir de esa lista de polígonos es: [2]

  1. Elija un polígono P de la lista.
  2. Cree un nodo N en el árbol BSP y agregue P a la lista de polígonos en ese nodo.
  3. Para cada otro polígono de la lista:
    1. Si ese polígono está completamente frente al plano que contiene P , mueva ese polígono a la lista de nodos frente a P .
    2. Si ese polígono está completamente detrás del plano que contiene P , mueva ese polígono a la lista de nodos detrás de P .
    3. Si ese polígono es intersectado por el plano que contiene P , divídalo en dos polígonos y muévalos a las respectivas listas de polígonos detrás y delante de P .
    4. Si ese polígono se encuentra en el plano que contiene P , agréguelo a la lista de polígonos en el nodo N .
  4. Aplique este algoritmo a la lista de polígonos delante de P.
  5. Aplique este algoritmo a la lista de polígonos detrás de P.

El siguiente diagrama ilustra el uso de este algoritmo para convertir una lista de líneas o polígonos en un árbol BSP. En cada uno de los ocho pasos (i.-viii.), el algoritmo anterior se aplica a una lista de líneas y se agrega un nuevo nodo al árbol.

El número final de polígonos o líneas en un árbol suele ser mayor (a veces mucho mayor [2] ) que la lista original, ya que las líneas o polígonos que cruzan el plano de partición deben dividirse en dos. Es deseable minimizar este aumento, pero también mantener un equilibrio razonable en el árbol final. Por lo tanto, la elección de qué polígono o línea se utiliza como plano de partición (en el paso 1 del algoritmo) es importante para crear un árbol BSP eficiente.

Travesía

Un árbol BSP se recorre en un tiempo lineal, en un orden determinado por la función particular del árbol. Nuevamente, utilizando el ejemplo de renderizar polígonos de dos lados utilizando el algoritmo del pintor, para dibujar un polígono P correctamente se requiere que todos los polígonos detrás del plano en el que se encuentra P se dibujen primero, luego el polígono P y, finalmente, los polígonos delante de P. Si este orden de dibujo se satisface para todos los polígonos en una escena, entonces toda la escena se renderiza en el orden correcto. Este procedimiento se puede implementar recorriendo recursivamente un árbol BSP utilizando el siguiente algoritmo. [2] Desde una ubicación de visualización dada V , para renderizar un árbol BSP,

  1. Si el nodo actual es un nodo hoja, renderiza los polígonos en el nodo actual.
  2. De lo contrario, si la ubicación de visualización V está frente al nodo actual:
    1. Representar el árbol BSP secundario que contiene polígonos detrás del nodo actual
    2. Representar los polígonos en el nodo actual
    3. Representar el árbol BSP secundario que contiene polígonos delante del nodo actual
  3. De lo contrario, si la ubicación de visualización V está detrás del nodo actual:
    1. Representar el árbol BSP secundario que contiene polígonos delante del nodo actual
    2. Representar los polígonos en el nodo actual
    3. Representar el árbol BSP secundario que contiene polígonos detrás del nodo actual
  4. De lo contrario, la ubicación de visualización V debe estar exactamente en el plano asociado con el nodo actual. Entonces:
    1. Representar el árbol BSP secundario que contiene polígonos delante del nodo actual
    2. Representar el árbol BSP secundario que contiene polígonos detrás del nodo actual

La aplicación de este algoritmo de forma recursiva al árbol BSP generado anteriormente da como resultado los siguientes pasos:

El árbol se recorre en tiempo lineal y representa los polígonos en un orden de lejos a cerca ( D1 , B1 , C1 , A , D2 , B2 , C2 , D3 ) adecuado para el algoritmo del pintor.

Solicitud

Los árboles BSP se utilizan a menudo en videojuegos 3D , en particular los juegos de disparos en primera persona y aquellos con entornos interiores. Los motores de juego que utilizan árboles BSP incluyen los motores Doom (id Tech 1) , Quake (variante id Tech 2) , GoldSrc y Source . En ellos, los árboles BSP que contienen la geometría estática de una escena se utilizan a menudo junto con un búfer Z , para fusionar correctamente objetos móviles como puertas y personajes en la escena de fondo. Si bien la partición binaria del espacio proporciona una forma conveniente de almacenar y recuperar información espacial sobre los polígonos en una escena, no resuelve el problema de la determinación de la superficie visible . Los árboles BSP también se han aplicado a la compresión de imágenes. [5]

Véase también

Referencias

  1. ^ ab Schumacker, RA; Brand, B.; Gilliland, MG; Sharp, WH (1969). Estudio para la aplicación de imágenes generadas por computadora a la simulación visual (informe). Laboratorio de Recursos Humanos de la Fuerza Aérea de los EE. UU. AFHRL-TR-69-14.
  2. ^ abcdefg Fuchs, Henry; Kedem, Zvi. M; Naylor, Bruce F. (1980). "Sobre la generación de superficies visibles mediante estructuras de árbol a priori" (PDF) . SIGGRAPH '80 Actas de la 7.ª conferencia anual sobre gráficos por ordenador y técnicas interactivas . ACM. págs. 124–133. doi :10.1145/965105.807481.
  3. ^ ab Thibault, William C.; Naylor, Bruce F. (1987). "Operaciones de conjuntos en poliedros utilizando árboles de partición del espacio binario". SIGGRAPH '87 Actas de la 14.ª conferencia anual sobre gráficos por ordenador y técnicas interactivas . ACM. págs. 153–162. doi :10.1145/37402.37421.
  4. ^ Etherington, Thomas R.; Morgan, Fraser J.; O'Sullivan, David (2022). "La partición binaria del espacio genera modelos de paisaje neutros jerárquicos y rectilíneos adecuados para paisajes dominados por humanos". Ecología del paisaje . 37 (7): 1761–1769. Código Bibliográfico :2022LaEco..37.1761E. doi : 10.1007/s10980-022-01452-6 .
  5. ^ H. Radha, M. Vetterli y R. Leonardi, "Compresión de imágenes utilizando árboles de partición espacial binaria", en IEEE Transactions on Image Processing , vol. 5, núm. 12, págs. 1610-1624, diciembre de 1996, doi: 10.1109/83.544569.

Referencias adicionales

Enlaces externos