Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Resumen
Este artı́culo presenta algoritmos eficientes para conseguir alta definición en la simulación de tejidos. El proceso
inicia con la utilización de mallas triangulares, basadas en un sistema de partı́culas y resortes para representar
los tejidos que someteremos a la animación. Luego se aplica un método de integración semi-implı́cito basado en
el método conocido como Backward Euler, donde se utilizan conceptos fı́sicos para conseguir la simulación del
movimiento natural de tejidos. Seguidamente se aplican algoritmos de detección de colisiones segmento-triángulo
y segmento-segmento, apoyados en una estructura de datos espacial denominada árbol AABB. Finalmente usamos
la fricción del objeto con el que se colisiona para alterar la posición de las partı́culas. Para conseguir que la
simulación se realice en un tiempo menor, la integración semi-implı́cita es implementada usando programación
paralela.
1. Introducción
2. Trabajos relacionados
Uno de los principales trabajos relacionados es Large Steps in Cloth Simulation presentado
por David Baraff y Andrew Witkin de la universidad Carnegie Mellon en Pittsburgh - Pensilva-
nia, (Baraff and Witkin, 1998) donde proponen la utilización de un método de integración im-
plı́cito para realizar el cálculo de las posiciones de las partı́culas en la simulación. Este método
es conocido con el nombre de Backward Euler Method. A diferencia de la integración explı́cita,
Fordward Euler Method, en donde cada iteración de la función de integración depende sola-
mente de la condiciones del tiempo. La integración implı́cita esta escrita, ademas, en términos
y condiciones de ella misma, consiguiendo con esto mejorar la estabilidad de la simulación y
reducir el tiempo requerido para esta.
Otro trabajo previo es Simulation of Clothing with Folds and Wrinkles desarrollado por R.
Bridson, S. Marino and R. Fedkiw de la universidad de Stanford, (Bridson et al., 2005) en el
cual desarrollan un método semi-implı́cito de integración. Donde combinan la simplicidad de
los métodos explı́citos (como Runge-Kutta) con la eficiencia de los métodos implı́citos (como
Backward Euler). En este modelo, ellos proponen la utilización de integración explı́cita para el
cálculo de la fuerzas elásticas, las cuales son independientes de la velocidad y para las fuerzas
de amortiguación usan integración implı́cita, ya que estas fuerzas si dependen de la velocidad.
Un trabajo previo importante es Parallel Implicit Integration for Cloth Animations on Dis-
tributed Memory Architectures por M. Keckeisen and W. Blochinger de Universität Tübin-
gen, Alemania. (Keckeisen and Blochinger, 2004) Donde plantean un algoritmo para la par-
alelización de la integración implı́cita de Euler, en el que descomponen de forma estática la
malla que representa a los tejidos para realizar el proceso de integración de forma paralela,
consiguiendo con esto optimizar el uso del procesador en la animación.
Finalmente tenemos Robust High-Resolution Cloth Using Parallelism, History-Based Col-
lisions and Accurate Friction, presentado por Andrew Selle, Jonathan Su, Geoffrey Irving y
Ronald Fedkiw (Selle et al., 2009). Que a diferencia del trabajo presentado por M. Keckeisen,
(Keckeisen and Blochinger, 2004) ellos plantean la utilización del paralelismo en el proceso
de detección de colisiones usando AABBH. Sin embargo, no realizan la animación de forma
paralela, pero con esto también, consiguen la optimización del uso del procesador durante la
simulación.
3. Movimiento y fuerza
El modelo de tejido que simulamos es una malla triangular de partı́culas. Dada una malla de
n partı́culas, la posición en el espacio de la iésima partı́cula es xi ∈ R3 y el estado geométrico
para todas las partı́culas serı́a xi ∈ R3n .
f = ma (1)
Donde f es la fuerza resultante que actúa sobre el cuerpo, m es la masa del cuerpo y a es la
aceleración lineal del centro de gravedad del cuerpo. (Millington, 2007)
La gravedad es la fuerza más importante en la simulación fı́sica, ya que esta fuerza actúa
siempre sobre todos los objetos en el mundo real. Por ende, si se desea tener un buen nivel
de realismo en la simulación, esta viene a ser la fuerza más fundamental que utilizaremos. La
fuerza de la gravedad esta dada por la ecuación:
f = mg (2)
Donde m es la masa del cuerpo que se esta simulando, f es la fuerza y g es la constante
universal de la gravedad, que tiene un valor alrededor de 10m/s2 . (Millington, 2007)
3.4. Elasticidad
3.5. Fricción
f = µN (4)
Donde µ es el coeficiente de fricción y N es el vector normal entre la superficie y el objeto.
4. Métodos de integración
fi (t)
ai (t) =
mi
(5)
vi (t + ∆t) = vi (t) + (∆t)ai (t)
xi (t + ∆t) = xi (t) + (∆t)vi (t)
El método de integración implı́cito conocido como Backward Euler tiene mayor perfor-
mance respecto al método explı́cito. (Baraff and Witkin, 1998) El método es dado por:
∆Y = (∆t)f (Y (t) + ∆Y )
Seguidamente aproximamos f (Y (t) + ∆Y ) por:
Finalmente, este es el método que se usa en nuestra propuesta, dado que al usar un método
mixto de integración que combine la forma explı́cita con la implı́cita (semi-implı́cito) nos per-
mite aprovechar la simplicidad y flexibilidad de los métodos explı́citos con la eficiencia de los
esquemas implı́citos. En particular usamos una actualización explı́cita de las posiciones de las
partı́culas mientras que para la velocidad se usa una forma implı́cita. Esto permite conseguir la
estabilidad del sistema sin problemas, ya que las fuerzas fı́sicas actúan directamente sobre el
cálculo de la velocidad. Mientras que el esquema explı́cito para el calculo de las posiciones es
más simple y no presenta problemas de estabilidad ya que la velocidad fue calculada usando el
método implı́cito. (Bridson et al., 2005) La ecuación aplicada a nuestro modelo quedarı́a de la
siguiente forma:
Un sistema de colisiones es esencial para nuestra simulación, ya que se busca tener una
alta fidelidad en la simulación de tejidos. Es precisamente cuando los tejidos colisionas con
otro objeto de su entorno cuando se forman los pliegues y arrugas que le dan un alto nivel de
realismo a la animación. En este caso analizamos las colisiones que ocurren con objets rı́gidos.
Presentamos un esquema para la detección de colisiones entre dos modelos de forma com-
pleja, con la caracterı́stica de que estos modelos son objetos que pueden ser deformables. El
esquema realiza una presentación jerárquica del modelo usando volúmenes envolventes.
Las jerarquı́as de volúmenes envolventes proveen una rápida forma de detección de col-
isión entre modelos complejos. Existen varios tipos de volúmenes envolventes como: esferas,
volúmenes orientados, elipses, etc. Para este modelo usamos cajas envolventes alineadas a los
ejes AABBs (Axis Aligned Bounding Box). Esto quiere decir que todos los volúmenes de nue-
stro árbol estarán alineados a los ejes de los modelos locales, por lo que, todos los volúmenes
en el árbol tienen la misma orientación. (van den Bergen, 1997)
Dado que el árbol AABB es básicamente un árbol binario, este se construyen de arriba
hacia abajo (top down) mediante la partición recursiva del espacio. El tiempo computacional de
la construcción es de O(n) en el peor de los casos, sin embargo, en el caso promedio, donde
las primitivas están distribuidas más o menos de forma unifirme, la construcción del árbol toma
solamente O(n log n). (van den Bergen, 2004)
El motivo por el cual se ha escogido esta estructura para realizar la detección de colisiones,
es que construir el árbol usando AABBs es más rápido que hacerlo con cualquier otro tipo
de volumen. Pero la razón más importante es que el volumen usado permite hacer una reaco-
modación del árbol en menor tiempo que su construcción cuando nuestro modelo se deforma,
esto quiere decir que no hace falta reconstruir el árbol en cada iteración. (van den Bergen, 1997)
Las AABBs solo contienen un sub conjunto de primitivas del modelo, lo cual nos permite
hacer una búsqueda de colisión usando una prueba de sobreposición entre las AABBs. Esta
prueba tiene un tiempo computacional constante, pero no nos entrega la exactitud que bus-
camos, por eso luego de encontrar una sobreposición entre dos nodos hoja de dos árboles anal-
izados, hace falta usar un algoritmo de detección de colisión mucho mas exacto y que sea capaz
de entregarnos el punto de colisión. No usamos directamente estos algoritmos de detección
de colisiones entre primitivas porque tienen un costo computacional muy elevado y ademas
tendrı́amos que hacerlo para los cientos de primitivas del modelo, generando con esto que la
simulación se torne extremadamente lenta por todo el cálculo innecesario que se realizarı́a.
Para nuestro modelo, usamos el algoritmo de colisión segmento triangulo dado por Möller,
(Möller and Haines, 1999) pero con algunas variaciones. En este método se realizan directa-
mente los cálculos en 3D, evitando la proyección sobre un plano de coordenadas 2D y usa
solamente un producto cruz. Mientras que el algoritmo de Möller usa dos. (Sunday, 2006) Esta
variación del algoritmo de Möller no incrementa la exactitud de la colisión, pero si disminuye
la cantidad del cálculo realizado para encontrar el punto de colisión, con el consiguiente ahorro
de tiempo computacional. Este algoritmo también esta basado, al igual que el propuesto por
Möller, en el uso de las coordenadas baricéntricas del triángulo para determinar si el posible
punto de intersección pertenece al triángulo o solo es parte del plano que lo contiene. Figura 1.
• P0
n
• P1
V2
v
tI P1 = V(sI , tI )
V0 sI u V1
π
Por último, se debe realizar una detección de colisión segmento-segmento, para ası́ evitar
las posibles interpenetraciones que no se pueden hallar con el método segmento-triangulo, ase-
gurando con esto que nunca el tejido penetrará en el objeto. Este proceso es mucho mas sencillo
que el anterior y por consiguiente mas rápido. El método simplemente consiste en encontrar la
ecuación del plano para ambos triángulos y luego verificar si existe intersección entre ellos, de
ser ası́, solo se hace un test de sobreposición entre los seis segmentos de los triángulos y basta
con hallar sobreposición con uno de ellos para tener una colisión detectada. (Ericson, 2004)
Una vez que hemos detectado las colisiones en nuestro simulador, es importante realizar
una alteración de la posición de estas partı́culas para poder continuar con la animación. Bridson
(Bridson et al., 2005) propone un método donde se debe actualizar la velocidad de la partı́cula
usando la fricción para hallar la nueva posición de esta. La ecuación utilizada es la siguiente:
Vn = (Cn )2 .Pn
Vt = Pv − Vn (9)
Pv = −Vn + µVt
Donde Vn es la velocidad normal de la colisión, Pn es la normal de la partı́cula Cn es la
normal de la superficie con la que se colisiona, Vt es la velocidad tangencial, µ es el coeficiente
de fricción y Pv es la velocidad de la partı́cula.
6. Paralelismo
7. Ejemplos
Para los siguientes ejemplos hemos utilizado mallas de forma rectangular de 40000 y 10000
triángulos en un procesador dual core de 2,26GHz.
En la Figura 2 tenemos un tejido y una esfera rı́gida, vemos como se forman varios pliegues
y arrugas al momento que los objetos colisionan entre si. Esta animación tiene un tejido con una
resolución de 40000 triángulos y se han generado con 1000 frames; con lo cual, se demuestra la
estabilidad del sistema a pesar del alto número de triángulos y de la cantidad de iteraciones que
se realizan.
Figura 2: Esta animación tiene un tejido con una resolución de 40000 triángulos.
Figura 3: Se observa los pliegues y arrugas que se forman al colisionar con el conejo.
8. Conclusión
Hemos visto varios puntos sobre la simulación de tejidos en alta resolución, lo que nos ha
permitido simular tejidos con pliegues y arrugas con caracterı́sticas reales. Por otro lado, se hace
una integración semi-ı́mplı́cta del modelo usando programación paralela, demostrando que se
logra aprovechar mejor los recursos del procesador con el consiguiente ahorro de tiempo y sin
perder estabilidad en la simulación.
9. Trabajos futuros
Revisando los trabajos realizados sobre simulación fı́sica, podemos notar que se ha par-
alelizado ya cada una de las partes del la simulación, por ejemplo el trabajo realizado por
Andrew Selle; (Selle et al., 2009) sin embargo, un trabajo futuro importante serı́a hacer una
simulación completamente paralela donde se aproveche este tipo de programción tanto para la
integración de la animación como para la detección colisiones y para la resolución de estas.
Otro trabajo futuro, del que aún hace falta mucha investigación, es conseguir manipular
la animación de forma manual mientras esta se está realizando, por ejemplo poder cambiar
constantes de viento, elasticidad, gravedad, etc. sin tener que detener el proceso.
Referencias
Baraff, D. and Witkin, A. (1998). Large steps in cloth simulation. In SIGGRAPH ’98: Pro-
ceedings of the 25th annual conference on Computer graphics and interactive techniques,
pages 43–54, New York, NY, USA. ACM.
Bourg, D. M. (2002). Physics for Game Developers. O’Reilly Media, Inc.
Bridson, R., Marino, S., and Fedkiw, R. (2005). Simulation of clothing with folds and wrinkles.
In SIGGRAPH ’05: ACM SIGGRAPH 2005 Courses, page 3, New York, NY, USA. ACM.
Butenhof, D. R. (1997). Programming with POSIX threads. Addison-Wesley Longman Pub-
lishing Co., Inc., Boston, MA, USA.
David, B. (1997). Implicit methods for differential equations. In SIGGRAPH ’97: ACM SIG-
GRAPH 1997 Courses, New York, NY, USA. ACM.
Eberly, D. H. (2004). Game Physics. Elsevier Science Inc., New York, NY, USA.
Ericson, C. (2004). Real-Time Collision Detection (The Morgan Kaufmann Series in Interactive
3-D Technology) (The Morgan Kaufmann Series in Interactive 3D Technology). Morgan
Kaufmann Publishers Inc., San Francisco, CA, USA.
Keckeisen, M. and Blochinger, W. (2004). Parallel implicit integration for cloth animations
on distributed memory architectures. In Proc. of Eurographics Symposium on Parallel
Graphics and Visualization 2004, Grenoble, France.
McDonnell, R., Dobbyn, S., Collins, S., and O’Sullivan, C. (2006). Perceptual evaluation
of lod clothing for virtual humans. In SCA ’06: Proceedings of the 2006 ACM SIG-
GRAPH/Eurographics symposium on Computer animation, pages 117–126, Aire-la-Ville,
Switzerland, Switzerland. Eurographics Association.
Millington, I. (2007). Game Physics Engine Development (The Morgan Kaufmann Series in
Interactive 3D Technology). Morgan Kaufmann Publishers Inc., San Francisco, CA, USA.
Möller, T. and Haines, E. (1999). Real-time rendering. A. K. Peters, Ltd., Natick, MA, USA.
Selle, A., Su, J., Irving, G., and Fedkiw, R. (2009). Robust high-resolution cloth using paral-
lelism, history-based collisions, and accurate friction. IEEE Transactions on Visualization
and Computer Graphics, 15(2):339–350.
Selle, A. P. (2008). Hybrid techniques for high-fidelity physical simulation of solids and fluids.
PhD thesis, Stanford, CA, USA. Adviser-Fedkiw, Ronald.
Sunday, D. (2006). Intersections of rays, segments, planes and triangles in 3d. SofSurfer.
Terzopoulos D., Platt J., F. K. (1991). Heating and melting deformable models. In The Journal
of Visualization and Computer Animation, pages 68–73, Toronto, ON, N5S 1A4 Canadá.
van den Bergen, G. (1997). Efficient collision detection of complex deformable models using
aabb trees. J. Graph. Tools, 2(4):1–13.
van den Bergen, G. (2004). Collision Detection in Interactive 3D Environments (The Morgan
Kaufmann Series in Interactive 3D Technology). Morgan Kaufmann.
Witkin Andrew, B. D. and Michael, K. (1995). An introduction to physically based modeling.
In SIGGRAPH ’05: ACM SIGGRAPH 2005 Courses, New York, NY, USA. ACM.