detección de colisiones - facultad de ingeniería

29
Detección de Colisiones Material extraído de Real-Time Rendering 4ta Edición Capítulo 25 Computación Gráfica Avanzada Ingeniería en Computación Facultad de Ingeniería – Universidad de la República Jimena Mignaco

Upload: others

Post on 08-Jul-2022

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Detección de Colisiones - Facultad de Ingeniería

Detección de Colisiones Material extraído de Real-Time Rendering 4ta Edición

Capítulo 25

Computación Gráfica Avanzada Ingeniería en Computación

Facultad de Ingeniería – Universidad de la República

Jimena Mignaco

Page 2: Detección de Colisiones - Facultad de Ingeniería

Introducción

01/10/20 2 Computación Gráfica Avanzada: Detección de Colisiones

• ¿Qué entendemos por una colisión?

• ¿Para qué sirve detectarlas?

• ¿Cómo las detectamos? ¿Hay un método universal?

• ¿Cuántas intersecciones hay que verificar?

Page 3: Detección de Colisiones - Facultad de Ingeniería

Detección en tres fases

01/10/20 3 Computación Gráfica Avanzada: Detección de Colisiones

• Fase Amplia: Se buscan pares de objetos que posiblemente colisionen mediante la evaluación de objetos más simples que contienen a los elementos de la escena.

• Fase Media: Se busca una posible colisión entre partes de ambos objetos.

• Fase Reducida: Se analizan las primitivas de dichas partes, llegando a la respuesta final: ¿Hay colisión?

Page 4: Detección de Colisiones - Facultad de Ingeniería

Fase Amplia: Sweep and Prune

01/10/20 4 Computación Gráfica Avanzada: Detección de Colisiones

• Consiste en ordenar los segmentos paralelos a cada eje en orden creciente para así ver los solapamientos. El análisis se hace en cada eje por separado. Ver: visualizador

• Se considera que no hay que reordenar mucho los segmentos ya que en un período corto de tiempo (frame a frame) se esperan pocos cambios (coherencia temporal). Esto podría permitir un algoritmo casi O(n).

Page 5: Detección de Colisiones - Facultad de Ingeniería

Fase Amplia: Grillas

01/10/20 5 Computación Gráfica Avanzada: Detección de Colisiones

• Se divide el espacio en celdas (cajas) de igual tamaño.

• En primer lugar insertamos los objetos en las celdas. Luego observamos si alguno comparte celda con otro.

• Es una decisión importante el tamaño de la celda.

Page 6: Detección de Colisiones - Facultad de Ingeniería

Fase Amplia: Jerarquía de Volúmen Acotante (BVH)

01/10/20 6 Computación Gráfica Avanzada: Detección de Colisiones

• Una de sus ventajas es que la estructura sirve para múltiples propósitos, como por ejemplo view frustum culling.

• Se verifica si los objetos intersecan superponiendo cada hoja con todo el BVH. Si no hay intersección, se abandona ese subárbol.

A

B

D E

C

F G

Page 7: Detección de Colisiones - Facultad de Ingeniería

Fase Media

01/10/20 7 Computación Gráfica Avanzada: Detección de Colisiones

• Cuando llegamos a esta etapa, ya tenemos pares de objetos candidatos a colisionar, lo que se quiere hacer es ver que parte de dichos objetos colisiona (si lo hace).

• La idea es hacer BVH balanceados y eficientes, donde los volúmenes acotantes se ajusten lo mejor posible a los objetos. Cuanto más pequeños sean, mejor.

• El resultado de esta etapa es pares de hojas cuyos volúmenes acotantes colisionan.

• Luego de construir el BVH, se evalúa si hay colisiones.

Page 8: Detección de Colisiones - Facultad de Ingeniería

Construcción del BVH

• De abajo hacia arriba: Comienza combinando varias primitivas hasta encontrar un BV para ellas. Estas primitivas deben ubicarse juntas, lo que puede determinarse utilizando la distancia.

• Inserción Incremental: Se parte de un árbol vacío. El punto de inserción elegido debe ser el que minimice el área (o volumen del BVH).

01/10/20 Computación Gráfica Avanzada: Detección de Colisiones 8

Page 9: Detección de Colisiones - Facultad de Ingeniería

Construcción del BVH

• De arriba hacia abajo: Se parte de un objeto raíz y se va fragmentando en k partes utilizando la estrategia Divide y Vencerás.

• Lineal: Se construye asignándole un entero del código de Morton a cada triángulo, basado en su centroide.

01/10/20 Computación Gráfica Avanzada: Detección de Colisiones 9

Page 10: Detección de Colisiones - Facultad de Ingeniería

Evaluación de Colisiones en un BVH

01/10/20 Computación Gráfica Avanzada: Detección de Colisiones 10

A

B

D

H I

E

J K

C

F

L M

G

N O

Page 11: Detección de Colisiones - Facultad de Ingeniería

Costos en un BVH

01/10/20 Computación Gráfica Avanzada: Detección de Colisiones 11

𝑡 = 𝑛𝑣𝑐𝑣 + 𝑛𝑝𝑐𝑝 + 𝑛𝑢𝑐𝑢

• Considerando movimientos de cuerpo rígido:

• nv es el número de tests BV/BV, cv el costo de realizar cada test. • np es la cantidad de pares de primitivas a evaluar, cp el costo de

cada evaluación • nu es la cantidad de BV que se actualizan debido al movimiento,

cu el costo de actualizar

Page 12: Detección de Colisiones - Facultad de Ingeniería

Posibles BV

01/10/20 Computación Gráfica Avanzada: Detección de Colisiones 12

• Una decisión importante es cuál volumen acotante elegir para armar el BVH

Page 13: Detección de Colisiones - Facultad de Ingeniería

OBB

01/10/20 Computación Gráfica Avanzada: Detección de Colisiones 13

• Creación del árbol OBB

• Para evaluar colisiones entre OBBs, se utilizan cálculos matriciales para pasar de un sistema de coordenadas a otro, ya que cada OBB en su propio sistema de coordenadas es un AABB.

Page 14: Detección de Colisiones - Facultad de Ingeniería

Colisiones de OBBs

• Una forma menos exacta pero más eficiente, es hacer dos tests AABB, uno para cada sistema de coordenadas. Si bien puede determinar colisiones donde no hay, esto implicaría ir más profundo en el árbol, pero evitaría tests más complejos.

01/10/20 Computación Gráfica Avanzada: Detección de Colisiones 14

Page 15: Detección de Colisiones - Facultad de Ingeniería

Fase Reducida

01/10/20 15 Computación Gráfica Avanzada: Detección de Colisiones

• Se llega a esta etapa con una lista de pares de hojas. El siguiente paso es contrastar las primitivas o evaluar la distancia entre ambos objetos.

• Primitiva vs Primitiva: Cada primitiva de la primera hoja, se compara con todas las primitivas de la segunda.

• Verificación de tolerancia: Considerando la distancia entre dos objetos y su velocidad/aceleración se puede obtener una cota mínima de tiempo, ya que se sabe que por un determinado tiempo no van a colisionar.

Page 16: Detección de Colisiones - Facultad de Ingeniería

Detección de Colisiones con rayos

01/10/20 16 Computación Gráfica Avanzada: Detección de Colisiones

• Se representan los objetos con un conjunto de rayos. En este caso, solo con los rayos de las ruedas se puede saber si el auto colisiona con el piso o no, sin tener que analizar todo el auto.

Page 17: Detección de Colisiones - Facultad de Ingeniería

BSP

01/10/20 Computación Gráfica Avanzada: Detección de Colisiones 17

• Se evalúa la intersección entre una geometría contenida en un árbol BSP y otro objeto, como por ejemplo una esfera, un cilindro o una envolvente convexa.

Page 18: Detección de Colisiones - Facultad de Ingeniería

BSP: Aproximación a cilindros

01/10/20 Computación Gráfica Avanzada: Detección de Colisiones 18

• Hay ocasiones en las que un personaje es aproximado mejor por un cilindro que por una esfera

Page 19: Detección de Colisiones - Facultad de Ingeniería

BSP: planos de bisel

• En algunas ocasiones para corregir errores en la detección puede ser necesario agregar planos de bisel.

01/10/20 Computación Gráfica Avanzada: Detección de Colisiones 19

Page 20: Detección de Colisiones - Facultad de Ingeniería

Colisiones cuando el tiempo importa

01/10/20 20 Computación Gráfica Avanzada: Detección de Colisiones

• Hay ocasiones donde importa que el cálculo se haga en un tiempo limitado. En estos casos, cambiamos la forma de recorrer el árbol para lograr recorrerlo todo (de manera menos precisa), en menos tiempo. Se recorre utilizando BFS y no DFS.

Page 21: Detección de Colisiones - Facultad de Ingeniería

Modelos Deformables

01/10/20 21 Computación Gráfica Avanzada: Detección de Colisiones

• Considerando que la conectividad de la malla se mantiene

incluso frente a las deformaciones, es posible desarrollar

algoritmos ingeniosos que puedan explotar esta propiedad

• En lugar de crear todo el árbol de nuevo, podemos

actualizarlo, esto es bastante eficiente utilizando AABBs.

Page 22: Detección de Colisiones - Facultad de Ingeniería

Partículas

01/10/20 22 Computación Gráfica Avanzada: Detección de Colisiones

• Sistemas de partículas: Cada partícula puede colisionar solo con objetos visibles en la pantalla

• Partículas para simulaciones físicas: se puede considerar que las partículas interactúan solo con partículas cercanas.

Page 23: Detección de Colisiones - Facultad de Ingeniería

Evaluación Dinámica

01/10/20 23 Computación Gráfica Avanzada: Detección de Colisiones

• Al considerar que los objetos se mueven, evaluar colisiones cada un determinado tiempo puede no ser la opción más exacta.

• Se puede aprovechar la velocidad relativa entre dos objetos.

• Pasan a ser importantes la velocidad y la distancia de los objetos, ya que empezamos a plantearnos: ¿Pudo en este tiempo este objeto a colisionar con un objeto b?

Page 24: Detección de Colisiones - Facultad de Ingeniería

Esfera-Plano

01/10/20 Computación Gráfica Avanzada: Detección de Colisiones 24

• Imaginemos la esfera de centro c y radio r que está en movimiento. Luego pasará a ser la esfera de radio e, donde 𝑒 = c + Δ𝑡𝑣

• Supongamos que queremos evaluar la intersección con el plano 𝑛𝑥 + 𝑑 = 0 • A continuación calculamos la distancia con signo, sustituyendo x en la ecuación

del plano por c (y luego por e). A estas distancias las llamaremos Sc y Se respectivamente

Page 25: Detección de Colisiones - Facultad de Ingeniería

Esfera/Esfera

01/10/20 Computación Gráfica Avanzada: Detección de Colisiones 25

• La idea es utilizar la velocidad relativa y transformar el problema a uno de rayo/esfera.

Page 26: Detección de Colisiones - Facultad de Ingeniería

Esfera/Polígono

• Se realiza algo similar al caso Esfera/Esfera, mediante la suma de Minkowski. Se engrosa el plano del polígono para compensar el volumen de la esfera que pasa a ser un rayo.

01/10/20 Computación Gráfica Avanzada: Detección de Colisiones 26

Page 27: Detección de Colisiones - Facultad de Ingeniería

SAT: Separating Axis Test

• Se proyectan los segmentos sobre los ejes y se evalúa si en todos ellos coinciden

01/10/20 Computación Gráfica Avanzada: Detección de Colisiones 27

Page 28: Detección de Colisiones - Facultad de Ingeniería

Recursos

• Sweep and Prune: https://www.geogebra.org/m/pewq5wnc

• Shaft culling: https://www.geogebra.org/m/kmepyswx

01/10/20 Computación Gráfica Avanzada: Detección de Colisiones 28

Page 29: Detección de Colisiones - Facultad de Ingeniería

Gracias por su atención

Jimena Mignaco

[email protected]