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 …