Detección de colisiones en GPU.pdf

Embed Size (px)

Citation preview

  • 7/26/2019 Deteccin de colisiones en GPU.pdf

    1/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 dedeteccin 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.

  • 7/26/2019 Deteccin de colisiones en GPU.pdf

    2/5

    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

    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.

    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.

    Prueba de colisiones usando sort and sweep.

    Prueba de colisiones usando Uniform Grid.

  • 7/26/2019 Deteccin de colisiones en GPU.pdf

    3/5

    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

    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.

    Prueba de colisiones usando

    CULLIDE

  • 7/26/2019 Deteccin de colisiones en GPU.pdf

    4/5

    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 Quick-

    Cullide. 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.

  • 7/26/2019 Deteccin de colisiones en GPU.pdf

    5/5

    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

    BFVAquellos 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.

    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.

    Simulacin de la manta sobre la

    mesa usando QCULLIDE

    En esta tabla se observa que Quick-

    Cullide usa menos triangulos para

    evaluar que las de Cullide,

    hacindolo ms eficiente