14.05.2013 Views

Simulación de objetos rígidos - DAC

Simulación de objetos rígidos - DAC

Simulación de objetos rígidos - DAC

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!