Detección de Colisiones Héctor Navarro
Ecuaciones del Plano Un plano 3D se define por una normal y una distancia a lo largo de esa normal Ecuación del plano ( Nx, Ny, Nz) ( x, y, z) d 0 Encontrar d: ( Nx, Ny, Nz) ( Px, Py, Pz) d Para probar un punto (x,y,z), si la ecuación: > 0: punto arriba del plano, < 0: punto debajo del plano = 0: punto sobre el plano
Pipeline básico Primero hay que determinar si los objetos pueden estar colisionando (en tiempos discretos, en cada frame se verifica) Es demasiado lento verificar si los objetos colisionan (los mallados) Suelen usarse volúmenes contenedores (bounding volumes) para aproximar la forma de cada objeto
Volúmenes contenedores Es importante que sean convexos Esferas, cilindros, cajas, poliedros, etc Los más utilizados: esferas, cajas alineadas a los ejes (AABB), cajas orientadas (OBB) Las esferas suelen usarse para descartar colisiones rápidamente Para cajas y poliedros, cuando se van a verificar intersecciones es necesario verificar si hay puntos dentro de ellos (por eso es importante que sean convexos)
Esferas Bounding Volume mas simple Punto central y radio Punto adentro: Calcular distancia entre el punto y el centro Si la distancia <= radio, el punto está adentro Es posible evitar la raíz cuadrada de la distancia comparando con el cuadrado del radio Casi siempre vale la pena hacer una prueba de esferas antes que hacer otras pruebas mas complicadas
Bounding Boxes Alineados a los ejes (AABB) Lo especifica dos puntos: ( xmin, ymin, zmin ),( xmax, ymax, zmax ) Las normales son fáciles de calcular Test de punto adentro: x x x y z min min min y y z z max max max
Problemas con AABBs No son muy eficientes La rotación es complicada Hay que rotar los 8 puntos de la caja Otra opción es rotar el modelo y reconstruir el AABB, pero esto no es eficiente
Bounding Boxes Orientados (OBB) Punto central, 3 ejes normalizados, 3 medias longitudes de los ejes Puede también almacenarse los 8 vértices (pero después de varias transformaciones puede dejar de ser una caja por errores acumulados) Los ejes son las normales de las caras Se aproximan mejor al objeto que las esferas y AABBs
k-dop s k-discrete Oriented Polytype Un K-DOP es un poliedro de K caras que contiene al objeto Los AABB y OBBs son 6-DOPs Aproxima mejor a los objetos que los OBBs El cálculo de intersección es más complejo
Tests de intersección de planos Los planos son buenos para determinar cosas como la frontera entre niveles, líneas de llegada, etc. Son la base de los árboles BSP (Binary Space Partition) Generalmente las partes estáticas de la escena se representan con BSP, y las partes móviles con otras estructuras
Resumen de Volúmenes Contenedores Esfera AABB OBB k-dop Cápsula convexa Se incrementa la complejidad y ajuste de los volúmenes Se decrementa el costo en tiempo y memoria para intersectarlos
Test AABB/Plano Un AABB tiene 4 diagonales Encontrar la diagonal mas alineada con la normal del plano Ver si esta diagonal cruza al plano
Test OBB/Plano Transformar la normal del plano hacia el sistema de coordenadas del OBB y hacer la prueba del AABB
Prueba Esfera-Esfera Es el más sencillo Esfera 1: Esfera 2: Sphere1: Sphere 2 : if c 1 c 2 c 2 1 c ( x, y, z), r 2 ( x, y, z), r ( r spheres are intersecting Las esferas se intersectan 1 r 2 ) 1 2 2
Teorema de los Ejes Separadores (SAT) Para un par de figuras convexas, existirá una recta sobre la cual las proyecciones de las figuras están separadas sii las figuras no se intersectan Mas aún, si las figuras A y B no se intersectan, existirá un Eje separador que es ortogonal a: 1. Una cara de A 2. Una cara de B 3. Un eje de cada poliedro
Teorema de los Ejes Separadores (SAT) Esto nos dá un máximo de 15 posibles ejes separadores 6 (uno por cada normal de cada cara) 9 (uno ortogonal a cada para de caras)
Teorema de los Ejes Separadores (SAT) Entonces para determinar si dos OBBs se intersectan, es necesario verificar si alguno de estos 15 posibles ejes separadores son efectivamente separadores Si no se encuentra ningún eje separador, entonces no hay intersección
Teorema de los Ejes Separadores (SAT)
Teorema de los Ejes Separadores (SAT)
Test AABB/AABB Cada AABB define 3 intervalos en los ejes X,Y,Z Si alguno de estos ejes de solapan, los AABB se intersectan
OBB/OBB SAT Probar con los 15 posibles ejes separadores Es la prueba entre OOBs más eficiente Su mayor problema es que no indica en que puntos y ejes están las intersecciones
OBB/OBB Test Geométrico Verificar si algún vértice de A está dentro de B Verificar si algún eje de A intersecta alguna cara de B Repetir la prueba con B contra A
Jerarquías de Volúmenes Contenedores Sphere Trees, AABB Trees, OBB Trees Los árboles generalmente son precalculados El objeto se subdivide hasta llegar al nivel de detalle deseado Lo ideal es llegar al nivel de un triángulo por volumen
AABB Tree En cada nivel el AABB se subdivide a lo largo del eje mayor Se subdivide con un plano que pasa por la mediana de los puntos proyectados sobre ese eje
OBB Tree De nuevo se subdivide a lo largo del eje mayor, usando la mediana como punto de corte cómo calcular el OBB óptimo?
OBB Dada una nube de puntos, para calcular su OBB idealmente se calcular la matriz de covarianza de los puntos y se calculan los autovectores de esta matriz. Los autovectores de esta matriz dan una idea sobre cómo están orientados los puntos en el espacio
OBB Los autovectores se utilizan para conocer la orientación del OBB de la nube de puntos Otra idea es utilizar únicamente los puntos de la cápsula convexa del objeto con el fin de calcular el OBB, ya que los puntos internos podrían cambiar la orientación del OBB
OBB Si no se utiliza la cápsula convexa:
OBB Utilizando la cápsula convexa:
OBB Otras implementaciones utilizan algoritmos genéticos para encontrar la orientación óptima de la caja
Colisión Triángulo-Triángulo Método de Moller Dados dos triángulo A,B: Calcular plano que contiene a A Descartar colisión si los tres vértices de B están del mismo lado de A Calcular plano que contiene a B Descartar colisión si los tres vértices de A están del mismo lado de B
Colisión Triángulo-Triángulo Calcular la línea de intersección de los planos Proyectar los triángulos sobre esta línea Verificar si estas proyecciones se solapan
Colisión Triángulo-Triángulo
Búsqueda binaria para punto exacto de colisión Cuando se detecta una colisión devolver un paso atrás los objetos y avanzar ½ del paso Si todavía hay colisión retroceder ½ paso y avanzar ¼ de paso Si no hay colisión avanzar ahora ¼ de paso Repetir varias veces hasta la precisión requerida
Múltiples colisiones Es un problema significante Si hay N objetos, es un problema de O(N 2 ) El algoritmo de Sweep and Prune permite mejorar estos tiempos Los Bounding boxes de cada objeto son proyectados en cada eje Estas proyecciones son ordenadas Se verifica si dos de estas proyecciones se solapan en todos los ejes, hay una posible colisión
Sweep and Prune
Sweep and Prune