Está en la página 1de 10

Alta fidelidad en simulación de tejidos usando programación paralela

Oscar Cuadros Linares


1
Universidad Católica San Pablo
ocuadrosl@gmail.com

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

El enfoque predominante en la animación de objetos es la fı́sica. Se usa métodos numéricos


para aproximar las ecuaciones, desarrollando modelos geométricos en tiempo discreto. Estas
animaciones se han venido estudiando por varios años, presentando la gran ventaja de lograr
simular el mundo real. Sin embargo, presentan desventajas como la complejidad de controlar
la animación de forma manual y la lentitud del cálculo de la simulación. El primer problema
sigue siendo muy complicado de tratar y requiere aún mucha investigación. El último problema
ha sido ayudado por el aumento en el rendimiento de las computadoras personales, incluyendo
los avances en los productos básicos como tarjetas de vı́deo (GPU) y multiprocesadores. Todo
esto ha causado que la simulación fı́sica se encuentre en su edad de oro. (Selle, 2008)
Existen diversas técnicas para resolver el problema de la animación de objetos deformables.
De las cuales, algunas buscan realizar la animación en tiempo real, pero sacrificando la fidelidad
en la representación de la simulación, técnicas conocidas como Non hero characters. Mientras
que otras buscan dar el mayor realismo posible, técnicas conocidas como hero characters, las
cuales deben tener calidad fotográfica en los tejidos, donde el logro de tales exige mayor resolu-
ción, porque el número de curvas y pliegues esta limitado por la discretización de los tejidos.
(McDonnell et al., 2006)
Por otro lado, en cuanto a la detección colisiones, también existen técnicas orientadas
básicamente a reducir el número de veces que se utilice los algoritmos de proximidad entre
primitivas. Se han propuesto diversas estructuras de datos buscando segmentar el espacio tridi-
mensional que contiene a los objetos, de forma que se pueda realizar búsquedas previas a la
utilización del algoritmo de detección de colisión utilizado. En este artı́culo utilizamos la es-
tructura de datos de segmentación de objetos tridimensionales en cajas alineadas a los ejes, que
contienen partes del objeto particionado, estructura conocida como Axis Aligned Bounding Box
Hierarchy (AABBH).
Finalmente, dado que, la simulación fı́sica de tejidos es muy lenta y más si se busca obtener
un alto grado de realismo y la tecnologı́a de hardware permite realizar operaciones de CPU
de forma paralela. Es importante maximizar el uso de los recursos con los que contamos al
momento de realizar los cálculos. Por ese motivo, es que este proceso, se realiza utilizando
programación con multi-hebras, lo cual permite aprovechar el tiempo ocioso de él o los proce-
sadores, reduciendo ası́ el tiempo destinado a generar la animación de los tejidos.
La principal contribución de este artı́culo es la paralelización del método de integración
semi-implı́cito. El cual es usado para el momento de la simulación del movimiento de los teji-
dos. Ya que para lograr una alta fidelidad en la simulación hacen falta mallas con miles de
triángulos. Dado que este proceso tiene un costo computacional muy alto hace que el calculo
de los frames de la animación sea muy lento. Es por esto, que es importante maximizar el uso
de los recursos de procesamiento con los que se cuente.
Otra contribución es la aplicación de un algoritmo detección de colisiones segmento-triángu-
lo basado en el método de Möller, (Möller and Haines, 1999) pero sin tener que hacer una
proyección del triángulo en 2D. Lo cual nos permite realizar un solo producto cruz. Este algo-
ritmo fue propuesto por Sunday (Sunday, 2006).
El resto del artı́culo esta organizado como sigue: en la sección 2 se hace un revisión de
los trabajos relacionados resaltando sus principales aportes. En la sección 3 estudiamos los
conceptos básicos de fı́sica que se utiliza en la simulación de tejidos. En la sección 4 veremos
los métodos de integración utilizados. En la sección 5 revisamos la detección de colisiones y la
respuesta a estas. En la sección 6 vemos la utilización del paralelismo en nuestro modelo. En
la sección 7 se muestran ejemplos del aplicativo. En la sección 8 se presentan las conclusiones.
En la sección 9 se proponen trabajos futuros y a continuación la bibliografı́a.

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

3.1. Notación y geometrı́a

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 .

3.2. Segunda ley de Newton

El estudio de la segunda ley de Newton es de particular interés para nuestra aplicación, ya


que muestra como se comporta un cuerpo en movimiento en el espacio mediante la aplicación
de diversas fuerzas. La segunda ley de Newton viene dada por la ecuación:

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)

3.3. Fuerza de la gravedad

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

La elasticidad es una fuerza de vital importancia en la simulación fı́sica de tejidos, esta es


la que permitirá que nuestro modelo tenga la propiedad de la “deformación ”. Para estudiar esta
fuerza veremos la ley de Hook dada por la ecuación:
f = −k∆l (3)
Donde ∆l es la distancia del resorte que es extendido o comprimido y k es la constante de
elasticidad, que es un valor que da la rigidez del resorte. La fuerza dada en esta ecuación es para
ambos extremos del resorte, esto quiere decir que dos objetos conectados por el mismo resorte
son atraı́dos entre si por la misma fuerza.(Eberly, 2004)

3.5. Fricción

La fricción es una fuerza de resistencia al movimiento que se da producto de la interacción


de dos superficies en contacto. La fricción siempre es paralela entre la superficie y el punto de
contacto. La magnitud de la fricción es una función de la fuerza normal que se genera entre
el contacto de superficies rugosas. (Bourg, 2002) La ecuación de la fuerza de fricción es la
siguiente:

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

4.1. Integración explı́cita

Para simular el dinamismo de nuestro modelo, debemos realizar un proceso de integración,


el cual nos permite hallar las posiciones de las partı́culas y su velocidad respecto al paso del
tiempo ∆t. Al iniciar este proceso debemos proporcionar las posiciones iniciales x0i y veloci-
dades vi0 de cada partı́cula i para i = 0, ..., n. Para evaluar las aceleraciones, velocidades y
posiciones usamos el método de integración explı́cito de Euler conocido como Fordward Eu-
ler(Terzopoulos D., 1991) dado por:

fi (t)
ai (t) =
mi
(5)
vi (t + ∆t) = vi (t) + (∆t)ai (t)
xi (t + ∆t) = xi (t) + (∆t)vi (t)

Donde ai es la aceleración de la partı́cula y fi es la fuerza total actuando sobre la partı́cula i y


vi es la velocidad respectiva de cada partı́cula. Desafortunadamente, el paso de tiempo necesario
debe ser demasiado pequeño, en especial si n es muy grande. En efecto el paso del tiempo ∆t
debe ser de orden 1/n para asegurar que cada iteración en la ecuación 5 no sea divergente.
(Witkin Andrew and Michael, 1995)
Esto quiere decir que para una simulación de un modelo con miles de partı́culas, el paso del
tiempo debe ser muy pequeño, generando esto, que la simulación sea extremadamente lenta e
inestable.
4.2. Integración implı́cita

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 + ∆t) = Y (t) + (∆t)f (Y (t + ∆t)) (6)


Como se ve, queremos evaluar f en el punto que estamos buscando Y (t + ∆t), en vez del
punto de donde venimos Y (t). Desafortunadamente, en general, no podemos resolver Y (t+∆t)
a no ser que f pase a ser una función lineal. Para lograr esto podemos reemplazar f (Y (t + ∆t))
por una aproximación lineal sobre la base de las series de Taylor. Definimos ∆Y como ∆Y =
Y (t + ∆t) − Y (t). Usando esto podemos reescribir la ecuación 6 como sigue:

Y (t) + ∆Y = Y (t) + (∆t)f (Y (t) + ∆Y )


simplificamos

∆Y = (∆t)f (Y (t) + ∆Y )
Seguidamente aproximamos f (Y (t) + ∆Y ) por:

∆Y = (∆t)(f (Y (t) + f 0 (Y (t))∆Y ))


Notamos que f (Y (t)) es un vector y f 0 (Y (t)) es una matriz, entonces operando y despejan-
do finalmente tendrı́amos:
 −1
1
∆Y = I − f (Y (t)) f (Y (t)) (7)
∆t
Donde I es la matriz identidad. Entonces para resolver la ecuación 6 debemos primero cal-
cular el sistema lineal 7, que para nuestra simulación tiene un tiempo computacional constante
y luego resolver la integración de la forma Y (t + ∆t) = Y (t) + ∆Y . (David, 1997)

4.3. Integración semi-implı́cita

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:

vi (t + ∆t) = vi (t) + ∆vi


(8)
xi (t + ∆t) = xi (t) + (∆t)vi (t)
5. Colisiones

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.

5.1. Detección de colisiones

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
π

Figura 1: Intersección segmento triángulo

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)

5.2. Respuesta a la colisión

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

La paralelización de métodos numéricos se está convirtiendo en el centro de la simulación


moderna, porque representa una forma sustancial de ahorro de tiempo computacional.
La paralelización de nuestra simulación se realiza en el momento de la integración semi-
implı́cita del modelo, buscando acelerar el cálculo de las nuevas posiciones en cada iteración.
(Keckeisen and Blochinger, 2004)
En el proceso de la simulación tenemos que cada partı́cula xi+1 depende su estado anteri-
or xi y para actualizar la fuerza de elasticidad; además, depende de sus “vecinos”directamente
conectados mediante un resorte o con las cuales forma una primitiva triangular. Es por esto, que
no podrı́amos aplicar una paralelización de las partı́culas de forma directa, ya que ellas depen-
den de sus vecinas para hallar su nueva posición, con lo que vemos la existencia de secciones
crı́ticas para la paralelización.
Sin embargo, si bien existen secciones crı́ticas, la solución a este problema se puede realizar
utilizando la técnica de sincronización de exclusión mutua (mutex) evitando ası́, que más de
una hebra intente actualizar el mismo resorte al mismo tiempo. (Butenhof, 1997)
Finalmente el proceso de la simulación lo detallamos en el algoritmo 1:

Algorithm 1: Simulación de tejidos


begin
forall Partı́culas do
1. Actualizar las fuerzas
2. Integración semi-implı́cita paralela
3. Actualizar los árboles AABB
4. Encontrar colisiones
5. Resolver colisiones
end
end

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.

En la Figura 3 se ve un objeto más complejo (conejo de Stanford rı́gido) y un tejido de


10000 triángulos, con lo que se busca demostrar el resultado de la detección de colisiones im-
plementada y como actúa la integración cuando las posiciones se alteran de forma irregular cada
que se detecta una colisión. Se observa los pliegues y arrugas que se forman al colisionar con el
conejo, notando claramente el alto nivel de realismo en la simulación. Para esta simulación se
han generado 800 frames.

Figura 3: Se observa los pliegues y arrugas que se forman al colisionar con el conejo.

El cuadro 1 corresponde al ejemplo de la figura 2, donde se muestra el promedio del tiempo


en segundos por frame y el número de hebras utilizadas.

Cuadro 1: Referente al ejemplo de la figura 2


Hebras Tiempo por Frame
8 13.0”
4 14.0”
1 16.1”

El cuadro 2 corresponde al ejemplo de la figura 3, donde se muestra el promedio del tiempo


en segundos por frame y el número de hebras utilizadas.

Cuadro 2: Referente al ejemplo de la figura 3


Hebras Tiempo por Frame
8 10.2”
4 10.4”
1 11.9”

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.

También podría gustarte