stringtranslate.com

Partición del espacio binario

El proceso de hacer un árbol BSP.

En informática , la partición del espacio binario ( BSP ) es un método de partición del espacio que subdivide recursivamente un espacio euclidiano en dos conjuntos convexos mediante el uso de 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 de árbol conocida como árbol BSP .

La partición del espacio binario 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 información espacial de manera eficiente sobre los objetos en una escena, como los objetos que se ordenan. de adelante hacia atrás con respecto a un espectador en un lugar determinado. 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 3D, trazado de rayos , simulación de paisajes virtuales, [4] y otras aplicaciones que involucran el manejo de estructuras complejas. escenas espaciales.

Historia

Descripción general

La partición del espacio binario es un proceso genérico de dividir recursivamente 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 árboles espaciales, como los árboles k -d y los quadtrees , en las que los hiperplanos que dividen el espacio pueden tener cualquier orientación, en lugar de estar alineados con los ejes de coordenadas como lo están en los árboles k -d o árboles cuádruples. Cuando se utilizan en gráficos por computadora para representar escenas compuestas de polígonos planos , los planos de partición se eligen frecuentemente 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 terminar el proceso de partición varía 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 orden arbitrario. Cuando se utiliza la selección de la cara posterior , cada nodo, por lo tanto, contiene un conjunto convexo de polígonos, mientras que cuando se renderizan polígonos de doble cara, 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 del espacio binario surgió de los gráficos por computadora que necesitaban dibujar rápidamente escenas tridimensionales compuestas de polígonos. Una forma sencilla de dibujar este tipo de escenas es el algoritmo del pintor , que produce polígonos en orden de distancia del 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 necesario para ordenar los polígonos de atrás hacia adelante y la posibilidad de errores al superponer polígonos. Fuchs y sus coautores [2] demostraron que la construcción de un árbol BSP resolvió ambos problemas al proporcionar un método rápido para 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 en Evite errores que puedan ocurrir con el algoritmo del pintor. Una desventaja de la partición del espacio binario es que generar un árbol BSP puede llevar mucho tiempo. Por lo tanto, normalmente se realiza una vez en geometría estática, como paso de cálculo previo, antes de renderizar 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 renderizar polígonos (que son de doble cara, es decir, sin eliminación de la cara posterior ) con el algoritmo del pintor. Cada polígono está designado con un lado frontal y un lado posterior que pueden elegirse 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 uno de los demás polígonos de la lista:
    1. Si ese polígono está completamente delante del plano que contiene P , mueva ese polígono a la lista de nodos delante de 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.

El recorrido

Un árbol BSP se recorre en un tiempo lineal, en un orden determinado por la función particular del árbol. Nuevamente usando el ejemplo de renderizar polígonos de doble cara usando 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 cumple para todos los polígonos de una escena, entonces toda la escena se representa en el orden correcto. Este procedimiento se puede implementar atravesando recursivamente un árbol BSP utilizando el siguiente algoritmo. [2] Desde una ubicación de visualización determinada V , para representar un árbol BSP,

  1. Si el nodo actual es un nodo hoja, renderice 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. Renderice el árbol BSP secundario que contiene polígonos detrás del nodo actual
    2. Renderizar los polígonos en el nodo actual
    3. Renderice 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. Renderice el árbol BSP secundario que contiene polígonos delante del nodo actual
    2. Renderizar los polígonos en el nodo actual
    3. Renderice 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. Renderice el árbol BSP secundario que contiene polígonos delante del nodo actual
    2. Renderice 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 lejano a cercano ( 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 , especialmente en los de disparos en primera persona y en aquellos con entornos interiores. Los motores de juegos 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 Z-buffer , para fusionar correctamente objetos móviles como puertas y personajes en la escena de fondo. Si bien la partición del espacio binario proporciona una manera 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 . Sin embargo, se han aplicado árboles BSP a la compresión de imágenes. [5]

Ver también

Referencias

  1. ^ ab Schumacker, RA; Marca, B.; Gilliland, MG; Afilado, WH (1969). Estudio para aplicar imágenes generadas por computadora a la simulación visual (Reporte). Laboratorio de Recursos Humanos de la Fuerza Aérea de EE. UU. AFHRL-TR-69-14.
  2. ^ abcdefgFuchs , Henry; Kedem, Zvi. METRO; Naylor, Bruce F. (1980). "Sobre la generación de superficie visible mediante estructuras de árboles a priori" (PDF) . SIGGRAPH '80 Actas de la séptima conferencia anual sobre gráficos por computadora y técnicas interactivas . ACM. págs. 124-133. doi : 10.1145/965105.807481.
  3. ^ ab Thibault, William C.; Naylor, Bruce F. (1987). "Establecer operaciones en poliedros utilizando árboles de partición de espacio binario". SIGGRAPH '87 Actas de la 14ª conferencia anual sobre gráficos por computadora 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 del espacio binario 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 Bib : 2022LaEco..37.1761E. doi : 10.1007/s10980-022-01452-6 .
  5. ^ H. Radha, M. Vetterli y R. Leonardi, "Compresión de imágenes mediante árboles de partición de espacio binario", 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