Simulación de objetos rígidos - DAC
Simulación de objetos rígidos - DAC Simulación de objetos rígidos - DAC
Simulación de objetos rígidos Luis Peña Sánchez Mayo 2008 /TAG3D
- Page 2 and 3: Luis Peña Sánchez Simulación de
- Page 4 and 5: Luis Peña Sánchez Simulación de
- Page 6 and 7: Luis Peña Sánchez Simulación de
- Page 8 and 9: Luis Peña Sánchez Simulación de
- Page 10 and 11: Luis Peña Sánchez Simulación de
<strong>Simulación</strong> <strong>de</strong> <strong>objetos</strong> <strong>rígidos</strong><br />
Luis Peña Sánchez<br />
Mayo 2008 /TAG3D
Luis Peña Sánchez <strong>Simulación</strong> <strong>de</strong> Objetos Rígidos<br />
Índice<br />
1 INTRODUCCIÓN 2<br />
1.1 JUSTIFICACIÓN 2<br />
1.2 DESARROLLO 2<br />
2 FASE AMPLIA DE DETECCIÓN DE COLISIONES 3<br />
2.1 SUBDIVISIÓN ESPACIAL 4<br />
3 FASE CONCRETA DE DETECCIÓN DE COLISIONES 5<br />
3.1 CONSIDERACIONES FÍSICAS 6<br />
3.1.1 TRASLACIÓN 6<br />
3.1.2 ROTACIÓN 6<br />
3.2 REPRESENTACIÓN DE LOS OBJETOS 8<br />
3.3 DETECCIÓN DE COLISIONES 8<br />
3.4 REACCIÓN FRENTE A LAS COLISIONES 9<br />
4 BIBLIOGRAFÍA 10<br />
1
Luis Peña Sánchez <strong>Simulación</strong> <strong>de</strong> Objetos Rígidos<br />
1 Introducción<br />
1.1 Justificación<br />
En el mercado actual <strong>de</strong> los sistemas <strong>de</strong> visualización <strong>de</strong> 3D, ya sean entornos<br />
<strong>de</strong> realidad virtual, producciones <strong>de</strong> vi<strong>de</strong>o generadas por or<strong>de</strong>nador o<br />
vi<strong>de</strong>ojuegos, cada vez tiene mayor importancia la simulación <strong>de</strong> <strong>objetos</strong> y sus<br />
interacciones físicas para aumentar el realismo y la inmersión en estos mundos<br />
virtuales.<br />
Debido a la evolución <strong>de</strong>l hardware tanto <strong>de</strong> CPUs como, principalmente, <strong>de</strong><br />
GPUs, esta simulación física se pue<strong>de</strong> ir complicando y mejorando para po<strong>de</strong>r<br />
alcanzar cotas que permitan emplearse mo<strong>de</strong>los complejos <strong>de</strong> simulación en<br />
entornos en tiempo real. En la actual generación <strong>de</strong> tarjetas gráficas que<br />
implementan la arquitectura unificada para gráficos, la resolución <strong>de</strong> estos<br />
problemas se ve mejorada por el alto grado <strong>de</strong> paralelismos que presentan y el<br />
aprovechamiento <strong>de</strong> las nuevas características <strong>de</strong> hardware que se adaptan<br />
perfectamente a estos fines.<br />
En el presente trabajo expondremos algunas técnicas que permiten la<br />
simulación <strong>de</strong> las interacciones físicas entre <strong>objetos</strong> <strong>rígidos</strong>, quedando<br />
pendientes los fluidos que son tratados con técnicas propias.<br />
1.2 Desarrollo<br />
Uno <strong>de</strong> los principales retos a los que hay que enfrentarse para po<strong>de</strong>r simular<br />
los <strong>objetos</strong> sólidos en un mundo virtual es la <strong>de</strong>tección <strong>de</strong> colisiones, es <strong>de</strong>cir,<br />
<strong>de</strong>cidir cuándo <strong>de</strong>ben aplicarse fuerzas entre dos <strong>objetos</strong> para producir el<br />
efecto <strong>de</strong>seado, por ejemplo rebotar o <strong>de</strong>formarse. En este trabajo nos<br />
centraremos en los <strong>objetos</strong> <strong>rígidos</strong>, es <strong>de</strong>cir aquellos que no presentarán<br />
<strong>de</strong>formación <strong>de</strong>bida a la actuación <strong>de</strong> fuerzas sobre ellos.<br />
Habitualmente la tarea <strong>de</strong> <strong>de</strong>tectar colisiones consume mucho tiempo ya que<br />
<strong>de</strong>bemos procesar todos los elementos dos a dos para conseguir saber cuando<br />
2
Luis Peña Sánchez <strong>Simulación</strong> <strong>de</strong> Objetos Rígidos<br />
dos elementos <strong>de</strong>ben interactuar entre sí. El mecanismo que proponemos en<br />
este trabajo se divi<strong>de</strong> en dos fases: amplia y concreta.<br />
En la primera fase realizaremos una primera búsqueda <strong>de</strong> grano gran<strong>de</strong> en la<br />
cual sólo preten<strong>de</strong>mos encontrar que dos <strong>objetos</strong> pue<strong>de</strong>n (<strong>de</strong>bido a sus<br />
dimensiones) entrar en colisión, con esta fase preten<strong>de</strong>mos no buscar<br />
interacciones entre dos <strong>objetos</strong> que, <strong>de</strong>bido a su tamaño y posición en el<br />
espacio, no puedan entrar en colisión. Esta fase no garantiza que los pares <strong>de</strong><br />
<strong>objetos</strong> encontrados estén en colisión, pero asegura que aquellos que no<br />
salgan <strong>de</strong> esta fase, seguro no están en contacto.<br />
La segunda fase comprobará si entre los pares <strong>de</strong>tectados en la fase anterior<br />
existe o no colisión y, <strong>de</strong> existir, calculará que fuerza experimentan entre sí y,<br />
en consecuencia que transformación se produce en los momentos <strong>de</strong><br />
translación y rotación <strong>de</strong> estos <strong>objetos</strong>.<br />
2 Fase amplia <strong>de</strong> <strong>de</strong>tección <strong>de</strong> colisiones<br />
Es esta primera fase buscamos aquellos <strong>objetos</strong> que dos a dos pue<strong>de</strong>n entrar<br />
en colisión, con el fin <strong>de</strong> construir un conjunto <strong>de</strong> pares <strong>de</strong> <strong>objetos</strong> que entran<br />
en colisión. En general este proceso se pue<strong>de</strong> <strong>de</strong>sarrolla <strong>de</strong> distintas maneras,<br />
pero es común ro<strong>de</strong>ar a cada objeto <strong>de</strong> una estructura que lo cubra por<br />
completo y hacer esta primera fase <strong>de</strong> acuerdo a esa estructura <strong>de</strong> cobertura<br />
que tenemos. En particular para esta fase emplearemos esferas que contengan<br />
al objeto.<br />
Existen varios mecanismos para obtener la colección <strong>de</strong> pares que antes<br />
hemos dicho, métodos como la fuerza bruta que comprueban dos a dos todos<br />
los <strong>objetos</strong> o or<strong>de</strong>nación y barrido (sort and sweep) se pue<strong>de</strong>n emplear, pero<br />
en este trabajo emplearemos el mecanismo <strong>de</strong> subdivisión espacial ya que<br />
presenta una cualida<strong>de</strong>s muy buena <strong>de</strong> cara el paralelismo y su posible<br />
explotación en las GPUs.<br />
3
Luis Peña Sánchez <strong>Simulación</strong> <strong>de</strong> Objetos Rígidos<br />
2.1 Subdivisión espacial<br />
Este método para la <strong>de</strong>tección <strong>de</strong> colisión se basa en dividir el espacio don<strong>de</strong><br />
se encuentran los <strong>objetos</strong> por medio <strong>de</strong> una parrilla uniforme cuyas celdas<br />
sean, como mínimo, <strong>de</strong>l tamaño <strong>de</strong> la mayor <strong>de</strong> las esferas que contienen<br />
<strong>objetos</strong>.<br />
Cada celda contiene una lista <strong>de</strong> los centroi<strong>de</strong>s <strong>de</strong> los <strong>objetos</strong> (centros <strong>de</strong> las<br />
esferas que contiene a los <strong>objetos</strong>) que están en ella. Para comprobar si<br />
existen colisiones entre dos <strong>objetos</strong> se proce<strong>de</strong> a comprobar sólo aquellas<br />
celdas que son inmediatamente contiguas entre sí. Así acortamos el espacio <strong>de</strong><br />
búsqueda en función <strong>de</strong>l número <strong>de</strong> celdas que hay y la relación <strong>de</strong> distancia<br />
entre celdas.<br />
En este caso, un objeto pue<strong>de</strong> ocupar como máximo 2 d celdas, siendo d la<br />
dimensión <strong>de</strong>l espacio que estamos subdividiendo, en general 3. Así pues un<br />
objeto pue<strong>de</strong> ocupar como máximo 8 celdas y su centroi<strong>de</strong> se encontrará sólo<br />
en una <strong>de</strong> ellas.<br />
A la hora <strong>de</strong> realizar el test <strong>de</strong> la siguiente fase, se enten<strong>de</strong>rá que dos <strong>objetos</strong><br />
pue<strong>de</strong>n colisionar si se encuentran en la misma celda y, al menos uno, tiene el<br />
centroi<strong>de</strong> en dicha celda.<br />
4
Luis Peña Sánchez <strong>Simulación</strong> <strong>de</strong> Objetos Rígidos<br />
5<br />
Objeto 1 (O1) – Azul<br />
Objeto 2 (O2) – Rojo<br />
Objeto 3 (O3) – Naranja<br />
Objeto 4 (O4) – Morado<br />
Objeto 5 (O5) – Ver<strong>de</strong><br />
Por ejemplo el objeto O5 (ver<strong>de</strong>) pertenece a las celdas 15 y 20 y su centroi<strong>de</strong><br />
está en la celda 15, el objeto O3 (naranja) pertenece a las celdas 7,8,12 y 13 y<br />
su centroi<strong>de</strong> en la 13 y el objeto O1 (azul) pertenece a las celdas 1,2,6 y 7, con<br />
centroi<strong>de</strong> en la celda 6. Con estos <strong>objetos</strong> observamos que no pue<strong>de</strong> existir<br />
colisión puesto que el centroi<strong>de</strong> <strong>de</strong> estos <strong>objetos</strong> está en celdas que no<br />
comparte <strong>de</strong>ntro <strong>de</strong> sus conjuntos <strong>de</strong> pertenencia. Pero el objeto O2 (rojo) con<br />
centroi<strong>de</strong> en la celda 2 pue<strong>de</strong> colisionar con el objeto O1 ya que comparten<br />
celdas y en una <strong>de</strong> ellas se encuentra el centroi<strong>de</strong> <strong>de</strong> uno <strong>de</strong> ellos.<br />
Así pues, sólo podrá existir colisión entre los <strong>objetos</strong> O1 y O2 o entre O3 y O4,<br />
pero ninguna otra combinación sería válida.<br />
3 Fase concreta <strong>de</strong> <strong>de</strong>tección <strong>de</strong> colisiones<br />
Una vez que hemos encontrado un conjunto <strong>de</strong> pares <strong>de</strong> elementos que<br />
pue<strong>de</strong>n estar en colisión <strong>de</strong>bemos calcular si efectivamente están en colisión<br />
que fuerzas ejercen el uno sobre el otro y, en consecuencia, como variarán <strong>de</strong><br />
posición en el espacio tras la colisión.
Luis Peña Sánchez <strong>Simulación</strong> <strong>de</strong> Objetos Rígidos<br />
Para representar el movimiento <strong>de</strong> un cuerpo rígido <strong>de</strong>bemos tener en cuenta<br />
dos aspectos: traslación y rotación.<br />
La traslación representa el movimiento <strong>de</strong>l centro <strong>de</strong> masa <strong>de</strong>l objeto a lo largo<br />
<strong>de</strong> un vector <strong>de</strong> dirección <strong>de</strong> movimiento, mientras que la rotación se <strong>de</strong>scribe<br />
como el giro <strong>de</strong>l objeto alre<strong>de</strong>dor <strong>de</strong>l centro <strong>de</strong> masa.<br />
3.1 Consi<strong>de</strong>raciones físicas<br />
3.1.1 Traslación<br />
Des<strong>de</strong> el punto <strong>de</strong> vista físico, objetivo final <strong>de</strong> nuestra simulación, la traslación<br />
entendida como movimiento lineal <strong>de</strong>l centro <strong>de</strong> masa <strong>de</strong> un objeto es igual al<br />
<strong>de</strong> una partícula. Así pues, cuando una fuerza F actúa sobre un cuerpo rígido<br />
(o partícula) causa una variación en el momento lineal P <strong>de</strong> dicho cuerpo:<br />
dP<br />
= F . A<strong>de</strong>más, tenemos la velocidad <strong>de</strong>l centro <strong>de</strong> masa v dado la relación<br />
dt<br />
P<br />
entre el momento lineal P y la masa <strong>de</strong>l cuerpo M: = v y, por otro lado la<br />
M<br />
velocidad en la <strong>de</strong>rivada <strong>de</strong> la posición <strong>de</strong>l centro <strong>de</strong> masa x respecto al<br />
tiempo:<br />
dx<br />
v =<br />
dt<br />
3.1.2 Rotación<br />
Una fuerza F que actúa sobre un punto, distinto <strong>de</strong>l centro <strong>de</strong> masa, <strong>de</strong> un<br />
objeto rígido pue<strong>de</strong> causar un cambio en el momento angular L <strong>de</strong>l objeto. Esta<br />
variación <strong>de</strong>pen<strong>de</strong> <strong>de</strong> la posición relativa <strong>de</strong>l punto <strong>de</strong> acción r respecto <strong>de</strong>l<br />
6
Luis Peña Sánchez <strong>Simulación</strong> <strong>de</strong> Objetos Rígidos<br />
centro. De hecho a la <strong>de</strong>rivada <strong>de</strong>l momento angular respecto al tiempo (par <strong>de</strong><br />
torsión) es igual al producto cruzado <strong>de</strong> r y F:<br />
dL<br />
dt<br />
= r × F<br />
De la <strong>de</strong>rivada respecto al tiempo <strong>de</strong> L obtenemos la velocidad angular w <strong>de</strong>l<br />
objeto cuya normal es la velocidad <strong>de</strong> giro <strong>de</strong>l objeto.<br />
w = I(<br />
t)<br />
1<br />
L<br />
Don<strong>de</strong> I(t) es el tensor <strong>de</strong> inercia <strong>de</strong>l objeto, una matriz 3x3 que representa la<br />
resistencia <strong>de</strong>l objeto a girar respecto a los distintos ejes. Esta matriz <strong>de</strong>be<br />
recalcularse cada vez ya que <strong>de</strong>pen<strong>de</strong> <strong>de</strong> la orientación <strong>de</strong>l cuerpo en cada<br />
instante. Para calcular la inversa <strong>de</strong> I(t) emplearemos la matriz R(t), matriz <strong>de</strong><br />
rotación que <strong>de</strong>scribe la orientación <strong>de</strong>l objeto en el instante t.<br />
1 1 T<br />
I ( t)<br />
= R(<br />
t)<br />
I(<br />
0)<br />
R t)(<br />
Nuestro objetivo final el obtener una matriz <strong>de</strong> transformación para el giro <strong>de</strong><br />
acuerdo al instante <strong>de</strong> tiempo en el que me encuentre. Para representar este<br />
giro po<strong>de</strong>mos emplear dos notaciones, por un lado una matriz <strong>de</strong><br />
transformación (4x4) o una cuaterna <strong>de</strong> valores q que represente únicamente el<br />
giro. Emplearemos la cuaterna por diversos motivos, entre ellos el <strong>de</strong> mayor<br />
facilidad <strong>de</strong> cómputo y el <strong>de</strong> mejor a<strong>de</strong>cuación a la estructura <strong>de</strong> las GPUs<br />
La cuaterna q = [ s,<br />
vx<br />
, v y , vz<br />
] representa la rotación s en radianes alre<strong>de</strong>dor <strong>de</strong>l<br />
eje ( v x , v y , vz<br />
) . La variación <strong>de</strong> la cuaterna dq con la velocidad angular w se<br />
calcula como:<br />
dq =<br />
Don<strong>de</strong><br />
cos , a<br />
2<br />
sin<br />
2<br />
w<br />
a = es el eje <strong>de</strong> rotación y = w dt es el ángulo <strong>de</strong> rotación. De<br />
w<br />
esta variación obtenemos la cuaterna <strong>de</strong>l instante t+dt:<br />
q t + dt dq ×=<br />
q(t<br />
.<br />
( ) )<br />
7
Luis Peña Sánchez <strong>Simulación</strong> <strong>de</strong> Objetos Rígidos<br />
3.2 Representación <strong>de</strong> los <strong>objetos</strong><br />
Con los conceptos físicos sabemos cómo afectan las fuerzas <strong>de</strong> unos <strong>objetos</strong><br />
sobre otros, pero <strong>de</strong>bemos consi<strong>de</strong>rar que un objeto es más complejo que una<br />
partícula, para empezar el cálculo <strong>de</strong>l centro <strong>de</strong> masas no es trivial. Para saber<br />
cómo calcular las colisiones entre dos <strong>objetos</strong> <strong>de</strong>bemos saber cómo<br />
representarlos.<br />
Para este trabajo se ha estudiado el método <strong>de</strong> representar los <strong>objetos</strong>, en vez<br />
<strong>de</strong> cómo polígonos, cómo partículas ([Bell et al. 2005] y [Tanaka et al. 2006]).<br />
Un cuerpo rígido será representado por un conjunto <strong>de</strong> partículas que sean<br />
esferas <strong>de</strong> idéntico tamaño.<br />
Para generar las partículas discretizamos el espacio alre<strong>de</strong>dor <strong>de</strong> la figura por<br />
medio <strong>de</strong> una parrilla y comprobamos si existe un voxel (celda 3D <strong>de</strong> la parrilla)<br />
contiene o no una parte <strong>de</strong>l objeto, por ejemplo por medio <strong>de</strong> <strong>de</strong>tección <strong>de</strong><br />
cruces entre los lado <strong>de</strong> la celda y la malla poligonal <strong>de</strong> objeto, si es así<br />
creamos una esfera inscrita <strong>de</strong>ntro <strong>de</strong> la celda.<br />
3.3 Detección <strong>de</strong> colisiones<br />
Al representar los <strong>objetos</strong> como conjuntos <strong>de</strong> partículas, la <strong>de</strong>tección <strong>de</strong><br />
colisiones entre dos cuerpos con una geometría compleja se reduce a<br />
encontrar la colisión entre dos partículas que les pertenezcan. Cuando la<br />
distancia que separa dos partículas es menor que su diámetro existe una<br />
colisión.<br />
8
Luis Peña Sánchez <strong>Simulación</strong> <strong>de</strong> Objetos Rígidos<br />
Pero al dividir cada objeto en partículas <strong>de</strong>bería, teóricamente, comprobar si<br />
existe colisiones entre las n posibles partículas. Lo que nos <strong>de</strong>ja una magnitud<br />
<strong>de</strong> or<strong>de</strong>n O(n 2 ) si empleamos la fuerza bruta, con una n bastante gran<strong>de</strong> este<br />
cálculo es inviable para las GPUs si <strong>de</strong>seamos una reacción en tiempo real.<br />
Para mejorar esta perspectiva po<strong>de</strong>mos aprovechar el particionado <strong>de</strong>l espacio,<br />
cómo en la fase amplia <strong>de</strong>l algoritmo, y reparticionar el espacio <strong>de</strong> acuerdo a<br />
una parrilla tridimensional uniforme que contenga las distintas partículas <strong>de</strong> los<br />
distintos <strong>objetos</strong>. Con la parrilla formada y almacenando en cada voxel aquellas<br />
partículas que se encuentran en su interior, tenemos que las partículas que<br />
pue<strong>de</strong>n colisionar con la partícula i sólo pue<strong>de</strong>n ser: (1) aquellas que<br />
pertenecen a la misma celda, o (2) aquellas que se encuentren en las 26<br />
celdas inmediatamente adyacentes a la actual, a<strong>de</strong>más se pue<strong>de</strong>n establecer<br />
otras restricciones como la <strong>de</strong> que una celda no pue<strong>de</strong> albergar a más <strong>de</strong><br />
cuatro partículas <strong>de</strong>bido a que nos es posible <strong>de</strong>formar las partículas.<br />
En consecuencia, la efectividad <strong>de</strong> se mejora <strong>de</strong>l O(n 2 ) al O(n). Empíricamente<br />
se ve que se obtienen mejores resultados si el tamaño <strong>de</strong>l lado <strong>de</strong>l voxel es<br />
igual al diámetro <strong>de</strong> las partículas. Esta magnitud es abordable por las GPUs<br />
para aplicaciones en tiempo real.<br />
3.4 Reacción frente a las colisiones<br />
Una vez que <strong>de</strong>tectamos una colisión nos queda por calcular que efecto tiene<br />
en las fuerzas que afecten al objeto. Para ello <strong>de</strong>bemos calcular las fuerzas<br />
que afectan a cada partícula <strong>de</strong> un objeto por separado y luego sumarlas todas<br />
en conjunto para saber la acción final sobre el objeto en conjunto.<br />
Para la colisión entre la partícula i y la partícula j, <strong>de</strong>bemos mo<strong>de</strong>lar tres fuerza<br />
que actual sobre ella: (1) la fuerza fi,s que representa la elasticidad lineal <strong>de</strong>l<br />
objeto, (2) la absorción <strong>de</strong> la fuerza <strong>de</strong> impacto fi,d y (3) la fuerza <strong>de</strong> giro<br />
proporcional a la velocidad tangencial <strong>de</strong> objeto fi,t.<br />
El cálculo <strong>de</strong> las fuerzas <strong>de</strong>pen<strong>de</strong> <strong>de</strong> los coeficientes <strong>de</strong>l material y/u objeto<br />
frente a las distintas fuerzas, así como al diámetro y posición relativa <strong>de</strong> la<br />
9
Luis Peña Sánchez <strong>Simulación</strong> <strong>de</strong> Objetos Rígidos<br />
partícula respecto al centro <strong>de</strong> masa, y <strong>de</strong>pendiente <strong>de</strong> la velocidad <strong>de</strong> la<br />
partícula j respecto a la partícula i.<br />
Del cálculo separado <strong>de</strong> cada colisión <strong>de</strong> cada partícula <strong>de</strong> un objeto<br />
obtenemos la fuerza cinética Fc y <strong>de</strong> torsión que experimenta el objeto Tc.<br />
F<br />
T<br />
c<br />
c<br />
=<br />
=<br />
i,<br />
s<br />
i objeto<br />
i<br />
i objeto<br />
( f + f + f )<br />
( r × ( f + f + f )<br />
i,<br />
s<br />
i,<br />
d<br />
i,<br />
d<br />
4 Bibliografía<br />
i,<br />
t<br />
i,<br />
t<br />
T. Harada. Real-Time Rigid Body Simulatio on GPUs. GPU Gems 3.<br />
2007<br />
S. Le Grand. Broad-Phase Collision Detection with CUDA. GPU Gems 3.<br />
2007<br />
M. Tanaka, M. Sakai, S. Koshizuka. Rigid Body Simulation Using a<br />
Particle Method. ACM SIGGRAPH R. Posters. 2006.<br />
N. Bell, Y. Yu, P.J. Mucha. Patricle-Based Simulation of Granular<br />
Materials. ACM SIGGRAPH. 2005.<br />
10