Colisiones

Anuncio
Colisiones
Miguel Ángel Otaduy
Animación Avanzada
18 de Febrero de 2014
Detección vs. Respuesta
• Dos problemas diferentes, pero a
la vez ligados.
• ¿Hay colisión?
• ¿Qué hacemos si hay colisión?
• La formulación del problema de
detección de colisiones vendrá dada por
el algoritmo de respuesta diseñado.
Problema Tipo 1
• Dos objetos colisionan y queremos calcular
fuerzas entre ellos para evitar interpenetración.
– Cálculo de penetración
– Fuerzas de penalty
Problema Tipo 2
• Dos objetos colisionan pero no queremos que
haya penetración.
– Detección de la primera colisión
– Fuerzas de restricción
Problema Tipo 3
• Disparamos a un enemigo en un juego.
– Detección de colisión entre rayo y avatar
Problema Tipo 4
• Buscar un camino libre de obstáculos para pasar
un piano por una puerta (motion planning).
– Buscar puntos libres de colisión
– Calcular distancias al entorno
Problema Tipo 5
• Buscar una configuración estable entre dos
moléculas (molecular docking).
– Calcular distancias entre átomos.
Problema Tipo 6
• Simulación de partículas.
– Para cada partícula, buscar las K partículas
más cercanas y calcular la distancia a ellas
(K nearest neighbor search)
Problema Tipo 7
• Traza de rayos.
– Para cada píxel, encontrar el punto de la
escena del que proviene el rayo incidente.
Problemas Generales
1. Detección de colisiones y consultas de
proximidad (proximity queries):
problema geométrico.
2. Determinación de contactos (contact
determination): caracterización de la
respuesta del problema puramente
geométrico.
3. Respuesta a colisiones (collision
response)
Geometría Computacional
• Resolver problema geométrico
• Cuestiones importantes:
– Complejidad asintótica del algoritmo
– Almacenamiento necesario
– Robustez
– Algoritmos y estructuras de datos
Índice
• Detección de colisiones y consultas de proximidad
–
–
–
–
–
–
Problema general y coste computacional
Broad phase vs. narrow phase
Volúmenes envolventes
Particiones espaciales
Campos de distancias
Detección continua
Ej: Cálculo de Intersecciones
• Dados 2 objetos A y B con n triángulos,
calcular todas las intersecciones entre
triángulos de A y B
• Algoritmo bruto: calcular la intersección
entre cada triángulo de A y B
• Coste O(n2)
Ej: K Vecinos más Cercanos
• Dados n puntos, calcular para cada uno de
ellos los K puntos más cercanos.
• Algoritmo bruto A: para cada punto, calcular la
distancia a los demás. Recorrer la lista de
distancia K veces, buscando los K más
cercanos.
Coste O(K n2).
• Algoritmo bruto B: Ordenar las distancias y
escoger los K más cercanos.
Coste O(n2 lg n)
Ej: Penetración Global
• Dados 2 objetos A y B con n triángulos
cada uno, calcular la traslación mínima
para separarlos.
• ¿Coste? O(n6) en 3D.
Espacio de Configuraciones
y Suma de Minkowski
• Dados 2 objetos P y Q con n grados de libertad
cada uno, el espacio de configuraciones
representa todas las posibles combinaciones de
configuraciones de ambos objetos
• Corolario: en el espacio de configuraciones
podemos distinguir las configuraciones libres de
colisión de las configuraciones con colisión
(configuration space obstacles, CSO)
• Ejemplos a analizar:
–
–
–
–
Punto en 2D/3D con obstáculos fijos
Esfera en 2D/3D con obstáculos fijos
Una caja que puede trasladarse y rotar en 2D
Dos cajas que pueden trasladarse entre ellas en 2D
Espacio de Configuraciones
y Suma de Minkowski
• Dados 2 objetos P y Q que sólo se pueden
trasladar entre ellos, y con n vértices cada uno,
el contorno del CSO se puede calcular mediante
una suma de Minkowski:
Espacio de Configuraciones
y Suma de Minkowski
• Teorema 1: Los objetos intersecan si y sólo si el
origen del espacio de configuraciones está
incluido en el CSO.
• Teorema 2: Si los objetos no intersecan, la
distancia mínima entre ellos es igual a la
distancia del origen al contorno del CSO.
• Teorema 3: Si los objetos intersecan, la distancia
de penetración entre ellos es igual a la distancia
del origen al contorno del CSO.
• El contorno del CSO puede tener O(n6) vértices.
Motivación de la Detección
de Colisiones
• Si vamos a realizar muchas consultas
similares, construimos una estructura
de datos (acceleration data structure)
que permita entresacar (prune/cull)
muchas consultas de forma rápida.
Estructuras de Datos
• Jerarquías de Volúmenes Envolventes
(Bounding Volume Hierarchies)
– Si el volumen A no interseca con el volumen
B, ninguna primitiva incluida en el volumen
A puede intersecar con las primitivas
incluidas en el volumen B
Estructuras de Datos
• Particiones Espaciales (Spatial
Partitioning)
– Una primitiva no puede intersecar con otras
primitivas con las que no comparte ninguna
celda de la partición espacial
• En el fondo, la base de ambos métodos es la
misma. Las BVHs se centran en los objetos,
mientras que las particiones espaciales se
centran en el espacio.
Broad Vs. Narrow Phase
• Broad phase:
– Dados n objetos, determinar pares de
objetos (potencialmente) en colisión.
– Ej: algoritmo sweep-and-prune.
• Narrow phase:
– Dado un par de objetos, entresacar partes
libres de colisión y detectar pares de
primitivas en colisión.
Sweep-and-Prune
•
•
•
•
Se envuelve cada objeto con una caja AABB.
Se proyectan las AABBs sobre los ejes X, Y, Z.
Se ordenan los intervalos proyectados.
Existe potencial colisión entre dos objetos si…
– Hay intersección entre sus 3 pares de intervalos.
• Coste computacional:
– O(n lg n + m).
Ordenación de
los intervalos
Número de
pares de salida
Sweep-and-Prune
Potencial
colisión
Sweep-and-Prune
• Optimizaciones:
– Combinar SAP con particiones espaciales
– Explotar coherencia temporal (cambios pequeños
entre fotogramas), y sustituir quicksort/mergesort
por ordenamiento por inserción (insertion sort).
• Implementado en muchos (todos?) motores
de física hoy en día.
Volúmenes Envolventes
• Almacenar un árbol, con particiones
sucesivas del objeto, más volúmenes
envolventes.
Test con BVHs
• Test recursivo: si hay colisión entre los
nodos A y B, se testean sus nodos
hijos, etc.
Tipos de Volúmenes
• Esfera, axis-aligned bounding box
(AABB), oriented bounding box (OBB),
cierre convexo (convex hull), k-discrete
orientation polytope (k-DOP), etc.
• Criterios de selección:
– Coste del test entre dos volúmenes
– Tamaño del volumen
– Coste de cálculo del volumen
• Un volumen más simple (p.ej., esfera) es más
fácil de actualizar y testear, pero es más
grande, dando lugar a más falsos positivos.
Algoritmo para Sólidos Rígidos
• Test(a, b)
– Transformar a al sistema de referencia
local de b.
– Si Interseccion(a, b) y a y b son hojas
• Test de primitivas
– Si Interseccion(a, b)
//Asumimos que a es mayor que b y tiene hijos
• Para todos los hijos de a:
– Test(a.hijo, b)
Algoritmo para Deformables
• Antes de realizar los test de colisiones,
se han de recalcular los volúmenes.
• El resto del algoritmo funciona igual
que con sólidos rígidos.
• ¿Cuál es el coste mínimo con sólidos
deformables, asumiendo coste O(1)
para actualizar un volumen?
– O(n), porque un árbol tiene O(n) nodos.
Esfera
Colisión:
Esfera
• Para sólidos rígidos, sólo es necesario
trasladar el centro.
• Cálculo de esfera mínima: similar a
programación lineal (miniball
problem).
• Cálculo rápido a partir de dos hijos:
– Colocar el centro en el punto medio de la
línea que une los dos centros, de manera
que se envuelvan los dos radios.
AABB
AABB en 3D, representada por 6 valores:
minx, miny, minz, maxx, maxy, maxz.
Colisión: Si los 3 intervalos intersecan.
AABB
• Cálculo rápido a partir de dos hijos:
– Incluir los máximos y mínimos de los
hijos.
– Es un cálculo óptimo!
OBB
Se almacena un punto y 3 segmentos.
Este volumen está pensado para sólidos
rígidos, como una caja óptima que se
transforma con la transformación del sólido.
OBB – Test del Eje Separador
(Separating Axis Test)
• Dos objetos convexos no intersectan si y
sólo si se encuentra un eje sobre el que las
proyecciones no intersectan.
• Aplicado a OBBs:
– Sólo es necesario testear 15 ejes: las 6
direcciones de las caras, y los 9 productos
vectoriales definidos por pares de aristas.
OBB – Cálculo por Covarianza
Puntos:
Media:
Covarianza:
Los vectores propios de la matriz de covarianza
definen (en la mayoría de los casos) buenos
segmentos para una OBB.
Árbol de una BVH
• Top-down: dado un conjunto de puntos, se
encuentra la dirección de máxima
dispersión, se busca el punto medio, y se
dividen los puntos a un lado y otro del punto
de medio (y así sucesivamente).
• Bottom-up: se define una hoja por
triángulo, y se agrupan las hojas de manera
que el volumen de los nodos resultantes sea
mínimo.
Vector propio de la matriz de covarianza
con valor propio máximo
Particiones Espaciales
• Rejilla regular
• Octree
• K-d Tree: muy usado para el problema de los
k vecinos más cercanos
• Binary space partitioning tree (BSP-Tree):
muy usado en su día para el cálculo de
visibilidad (antes del z-buffer)
Spatial Hashing
(Rejilla regular con tablas hash)
• En lugar de almacenar una rejilla regular
completa, se mapean las celdas a una tabla
hash.
• Pequeño problema: múltiples celdas mapean
a una misma posición de la tabla.
• 2 problemas ejemplo:
– Detección de penetraciones entre mallas de
tetraedros
– Detección de impactos entre triángulos y vértices
Penetraciones en Mallas
de Tetraedros
...
Paso 1: Por cada nodo, se calcula el índice de la
celda correspondiente, y se introduce un
puntero en la posición de la tabla hash.
Penetraciones en Mallas
de Tetraedros
...
Paso 2: Por cada tetraedro, se calcula una caja
envolvente, se calculan los índices de las celdas
ocupadas por la caja, y se introducen punteros
al tetraedro en las posiciones de la tabla hash.
Penetraciones en Mallas
de Tetraedros
...
Paso 3: En las posiciones de tabla hash con
nodos y tetraedros, se testean las primitivas.
A)
 Sin colisión
B)
 Colisión
C)
 Autocolisión
Función Hash
Coordenadas de la celda
Números primos grandes
Tamaño de la tabla hash
Diagramas de Voronoi
• Dadas n primitivas, partición del espacio en n celdas,
de manera que la celda i está formada por los puntos
cuya primitiva más cercana es la i.
• Dado un punto, podemos consultar de manera
automática la primitiva más cercana
Campos de Distancias
• En cada punto del espacio se almacena la
distancia a la primitiva más cercana (también
se pueden almacenar la dirección al punto
más cercano y un índice de primitiva).
Campos de Distancias
• Aplicación a sólidos rígidos: se precalcula un
campo de distancia por sólido, y la detección
de colisiones es simplemente una consulta de
puntos en el campo de distancia (Utilizado en
vídeo juegos).
• Aplicación a sólidos deformables: se puede
aproximar la deformación del campo de
distancias.
Aproximación para
Deformables
• Mallado del interior del objeto (tetraedros)
• Definir distancias exactas en los nodos
próximos a la superficie. Luego se propagan
las distancias siguiendo las aristas del
mallado
Distancias
exactas
Distancias
aproximadas
Glondu et al., Efficient Collision Detection for Brittle Fracture,
Symposium on Computer Animation 2012
Aproximación para
Deformables
• Ejemplo de propagación de frente
Cada número indica los vértices alcanzados en
el mismo paso
Aproximación para
Deformables
• Cálculo de distancias. Llegamos a un punto p
en el paso i+1. Definimos como Ni(p) todos
sus vecinos alcanzados en el paso i
• Cálculo de la dirección del punto p:
Detección Continua
• Dadas primitivas en los instantes t=0 y t=1,
detectar el instante t en que colisionan
Detección Continua
• Sirve para detectar colisiones en:
– Objetos que se mueven muy rápido y cruzan
completamente a otro (proyectiles en videojuegos)
– Objetos superficiales, sin volumen (ropa)
• Cualquier intervalo de tiempo se puede
normalizar como el intervalo [0,1]
• Se puede hacer culling jerárquico
• Finalmente hay que hacer test entre
primitivas
– Triángulo vs. Vértice
– Arista vs. Arista
Detección Continua
1. Calcular el instante de tiempo para el que las
primitivas son coplanares. Se asume que las
primitivas se mueven linealmente, y se
convierte en una ecuación cúbica en el
tiempo.
2. Dado el instante de tiempo, comprobar si
está en el intervalo [0,1], y comprobar si la
intersección está dentro de las primitivas (por
coordenadas baricéntricas)
Otros Problemas
•
•
•
•
•
Autocolisiones
Colisiones entre superficies paramétricas
Colisiones entre personajes articulados
Algoritmos paralelos
…
Descargar