Detección de Colisiones

Anuncio
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
Descargar