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: xmin x xmax ymin y ymax z min z z 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 Sphere1: 1 : c1 ( x, y, z ), r1 Esfera Esfera Sphere2: 2 : c2 ( x, y, z ), r2 if c1 c2 2 (r1 r2 ) 2 ng Lasspheres esferasare se intersecti intersectan 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(N2) • 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