Sie sind auf Seite 1von 5

Deteccin de colisiones en GPU

La interaccin entre objetos de una escena es una caracterstica muy importante en la


computacin grfica, ya que eso le da ms realismo en la simulacin de ciertos fenmenos
de distintas reas como la fsica, la qumica, la biologa, entre otros. Las colisiones son un
tema bastante interesante, porque se puede hacer una variedad cosas con ellas.
Gracias a la potencia de las GPUs y el concepto del paralelismo, las colisiones
pueden ser implementadas en GPU. En este tema se presentar los distintos algoritmos de
deteccin de colisiones en GPU, especialmente el algoritmo de deteccin usando CULLIDE.
Qu es una colisin?
Es bsicamente el resultado de la interaccin de dos o ms objetos de una escena
3D, estas respuestas varan de acuerdo a lo que desea simular. Por ejemplo, alterar las
propiedades fsicas de un objeto como el caso de los choques, impedir que un ser vivo
avance como por ejemplo una pared, u otras respuestas como la apertura de un cofre,
abrir una puerta, entre otras. En nuestro entorno todo objeto que vemos es tangible y
podemos palpar con nuestro tacto.
Algoritmos de deteccin de colisiones:
Las colisiones se clasifican en dos fases: la fase ancha y la fase estrecha. La fase
ancha consiste en localizar en toda la escena que objetos estn colisionando unos con
otros, es decir, comparar que todos contra todos, esta fase exige un algoritmo bastante
rpido, ya que es una bsqueda exhaustiva cuyo orden es O(n^2). La fase estrecha
bsicamente analizan los pares de objetos marcados en la fase ancha y determinan si
realmente se intersectan, esta fase generalmente es lenta. Los algoritmos son: sort and
sweep, Uniform Grid, CULLIDE y sus mejoras: RCULLIDE y QCULLIDE.

Sort and sweep


El algoritmo sort and sweep consiste
en asignar a cada objeto 3D un bounding box
de eje alineado(AABB), estas sern
proyectadas para su evaluacin a un eje
escogido de una sola dimensin (si se ordena
y se escoge en y o en x), una vez proyectada
se determina el rango correspondiente a
cada objeto. Esto significa que dos objetos Prueba de colisiones usando sort and sweep.
pueden colisionar si sus rangos se solapan.
Este mtodo es bastante fcil en la programacin concurrente si se hace en tres pasos:
1. Un thread por objeto para calcular su bounding box, proyectarlo para escoger el
eje y guardar los puntos iniciales S y E del rango proyectado en un arreglo.
2. Ordenar el arreglo de forma ascendente.
3. Cada hilo escoge un elemento del arreglo. Si es el punto E, termina, si es el punto
S, recorre el arreglo realizando pruebas de solapamiento hasta encontrar el punto
E correspondiente.
La desventaja es el nmero de comparaciones, su orden de complejidad es O(n^2),
puede haber ms objetos que puedan solaparse lo que implica ms comparaciones.
Uniform Grid
Tambin denominado Subdivisin espacial (Spatial
subdivision), y consiste en subdividir de forma abstracta la
escena en una cuadricula uniforme (Uniform grid) cuyos
tamaos sean iguales cada uno al igual que los objetos en
cuestin, dos objetos pueden colisionar, si una parte de ellas
estn en una misma cuadrcula. Este algoritmo asume que todos
los objetos en la escena.

Prueba de colisiones usando Uniform Grid.

Pasos:
1. Trazar en la escena un conjunto de celdas, cada celda es asignada a sus
respectivos objetos en base al centroide del bounding box.

2. Fijar un vecindario 3x3x3 en el diagrama y por cada objeto, encontrar en las


celdas vecinas y comprobar el correspondiente bounding box para solapar.
El inconveniente est en un escenario de tamaos variados y con detalles
pequeos, que es comn en escenario de mundo-real, este problema en que este
algoritmo sufre se le conoce como teapot-in-a-stadium.
CULLIDE:
Es un mtodo propuesto en el 2003 por el grupo de
DINESH en la UNC. Se trata de un algoritmo que combina las
dos fases (estrecha y ancha) y usa hardware grfico para
ejecutarlas, por lo que no requiere de alguna implementacin
en lenguaje shader. Se basa en la verificacin de la visibilidad
de los objetos. Cuando dos o ms objetos se interceptan, una
porcin de ellas pierde visibilidad, y los objetos que no estn
completamente visibles son almacenados en una estructura de
Prueba de colisiones usando
CULLIDE
datos conocida como el conjunto de colisin potencial (Potencially
colliding Set o PCS). Mientras que los objetos que estn completamente visibles no sern
registrados en el PCS.
Este mtodo propone un algoritmo conocido como el algoritmo de poda (Pruning
algorithm). El algoritmo realiza dos renderizaciones, la primera renderizacin recorre
analizando los objetos de manera lineal, mientras que la segunda realiza de manera
inversa es decir, la primera realiza el anlisis de O1,O2,O3,O4.,Oi,Oi+1,Oi+2,.On,
mientras que la segunda realiza en sentido contrario.
RCULLIDE:
Uno de los problemas de CULLIDE era la
sensibilidad frente a la resolucin del viewport haciendo
que perdiera precisin para los clculos necesarios al
evaluar las colisiones. Por esta razn se hace una mejora
que permite resolver la precisin de los clculos haciendo
que CULLIDE sea ms fiable, esto se conoce como Reliable
CULLIDE o RCULLIDE. RCULLIDE permite resolver tres
clases de errores:
Uno de los problemas que tena cullide era que el
centro del pixel no estaba contenida en la
interseccin de los dos tringulos, haciendo que
la colisin est errada.

Perspectiva: tambin en los aliasing proyectivos, estos pueden resultar en algunas de las
primitivas que no quedaron resterizadas, esto se debe en la extraa forma en que se
aplica las transformaciones.
Muestreo (sampling): se debe a la resolucin de los pixeles que no estn suficientemente
precisas. Esto trae como consecuencia que el muestreo en la interseccin entre tringulos
no es muestreado.
Precisin del depth buffer: Si la distancia entre las primitivas menor que la resolucin del
depth buffer, ocasiona resultados incorrectos en los queries de visibilidad.
El resultados de estos errores pueden conllevar a: que los fragmentos no estn
resterizados, que los fragmentos generados no estn muestreados; o que los fragmentos
estn resterizados y muestrados, pero la precisin de los frames y los depth buffer no es
suficiente.
Este mtodo busca precisar la colisin
generando dos fragmentos por pixel tocado por
tringulo y por cada pixel tocado por el triangulo,
la profundidad de los dos fragmentos debe enlazar
la profundidad de todos los puntos del tringulo
con respecto al pixel dado. Este mtodo es ms
conservativo aunque es de lectura lenta pero ms
precisa.
Se usa la suma de Minkoswki para eliminar los errores de muestreo o errores de
precisin, ya que provee una representacin bastante conservativa. Una de las estructuras
de datos que se usan en RCULLIDE son los bounding offset, entre ellos est los UOBB
(Union of Object-oriented Bounding Boxes) que son simples bounding boxes que encierran cada
triangulo de cada primitiva.
QCULLIDE:
Una de las desventajas que tiene RCULLIDE es que es tres veces ms lenta que la
misma CULLIDE debido a la cantidad rasterizados entre los bounding boxes y la
resterizacin de los triangulos. Por esta razn existe un mtodo conocido como QuickCullide. Este mtodo permite resolver colisiones cuyos mallados son complejos, y adems
se ejecuta en tiempo real. Lo interesante de QCULLIDE es que resuelve una de las
limitaciones de CULLIDE como el rendimiento y la auto-colisin, es decir que dos
tringulos cuyos vrtices no pertenecen a otros tringulos pueden colisionarse esto se
resuelve por de hardware de GPU.

QCULLIDE propone las siguientes estructuras:


FFV Aquellos objetos que son visibles en la primera pasada.
SFV Aquellos objetos que son visibles en la segunda pasada
BFV Aquellos objetos que son visibles en ambas pasadas.
NFV- Aquellos objetos que no son visibles en las dos pasadas.
Aquellos objetos de FFV y SFV que no colisionan con los del mismo conjunto son
llamados libres de colisin. En caso de que un objeto FFV est completamente visible en
su segunda pasada se puede descartar del PCS (tambin suceden con el caso SFV). Estos
son ordenados de acuerdo al orden de renderizacin en el primer paso y cada uno de los
objetos est asociado con un ndice. Se computa los PCS en el nivel de objeto usando el
algoritmo de colisin, luego se aplica el algoritmo sweep-and-prune (sort and sweep)
sobre el PCS para computar los pares que se solapan en el nivel de objeto (tambin se
hace este procedimiento a nivel de sub-objeto). Por ultimo se hace las pruebas de de
interferencia a nivel de CPU.

Simulacin de la manta sobre la


mesa usando QCULLIDE

En esta tabla se observa que QuickCullide usa menos triangulos para


evaluar que las de Cullide,
hacindolo ms eficiente

Otras estructuras de datos que son usadas para las colisiones:


1. Los rboles de cuatro nodos(QuadTree) y de ocho nodos(octree).
2. Los rboles BSP.

Das könnte Ihnen auch gefallen