Simulador de Tela RasgableBeta
Tira, rasga y agita al viento una tela Verlet sujeta con alfileres
Esta herramienta es una versión beta que aún se está estabilizando. Avísanos si un resultado no parece correcto.
La tela es una malla de puntos unidos por hilos (restricciones de distancia). Cada punto se mueve con integración de Verlet, usando la diferencia entre su posición anterior y la actual como velocidad, y en cada fotograma los hilos se devuelven a su longitud varias veces para mantener la forma. Un hilo se rompe cuando se estira más allá del límite. Las restricciones de cizalla añaden hilos diagonales invisibles en cada celda, y las de flexión, hilos invisibles que saltan un punto, para que la tela se deforme y se doble menos. Estos hilos no se rompen solos: se rompen junto con los hilos horizontales o verticales en los que se apoyan. Pulsa y arrastra sobre el lienzo para tirar de la tela; desliza con la herramienta Cortar o con el botón derecho del ratón para rasgarla. Elige un estampado o añade una imagen (también puedes soltarla sobre el lienzo) para imprimirla en la tela; la tela adopta las proporciones de la imagen. Más precisión significa más puntos y desgarros más suaves; sube también la rigidez para que la tela fina no se descuelgue.
Procesando…
0.0
No se ha bloqueado: el resultado aparecerá cuando termine el cálculo.
Acerca de Simulador de Tela Rasgable
La tela está hecha de una rejilla de puntos unidos a sus vecinos por hilos, cada uno de los cuales es una restricción de distancia. Los puntos no guardan una velocidad. Cada uno recuerda su posición actual y la anterior, y la diferencia entre ambas hace de velocidad. Thomas Jakobsen presentó esta integración de Verlet sin velocidades, combinada con restricciones iteradas, en su charla «Advanced Character Physics» de la GDC de 2001. Era lo que movía la ropa, las plantas y los cuerpos tipo ragdoll en Hitman: Codename 47, de IO Interactive.
La tela es bidimensional. Solo se mueve en el plano de la pantalla, y cuando se dobla sobre sí misma no choca consigo misma. Por defecto los hilos solo unen vecinos horizontales y verticales, así que nada impide que una celda se deforme en rombo (cizalla) ni que la tela se pliegue (flexión). Al activar las restricciones de cizalla se añaden hilos diagonales invisibles en cada celda, y con las de flexión, hilos invisibles que saltan un punto; ambas deformaciones se reducen. Estos hilos no se rompen solos: caen junto con los hilos horizontales o verticales en los que se apoyan cuando estos se rasgan o se cortan.
Qué ocurre en un fotograma
Las restricciones se cumplen moviendo directamente las posiciones, así que cualquier corrección pasa sola a formar parte de la velocidad del paso siguiente. Velocidad y posición no pueden desincronizarse, lo que hace el método muy estable. A cambio la energía se va perdiendo poco a poco, cosa que en una tela viene bien.
- Inercia: nueva posición = actual + (actual − anterior) × amortiguación + aceleración × Δt². La amortiguación por defecto, 0,99, es el mismo truco que describe Jakobsen: bajar el 2 de 2x − x* a más o menos 1,99 añade algo de rozamiento.
- Pasada de restricciones: se recorre cada hilo por turno. Si es más largo que su longitud de reposo, se acercan sus dos extremos la mitad del exceso cada uno, y si es más corto, se separan. Si un extremo está fijado con alfiler o sujeto por el puntero, solo se mueve el otro. Todo esto se repite tantas veces como indique Rigidez (iteraciones).
- Desgarro: al terminar todas las iteraciones se corta cualquier hilo más largo que el límite de desgarro multiplicado por su longitud de reposo.
- Paredes y suelo: los puntos que salen del lienzo vuelven al borde, y en el suelo su velocidad lateral se reduce a la mitad para imitar el rozamiento.
Relajación: por qué repetir la pasada converge
Al corregir un hilo, sus vecinos vuelven a quedar con la longitud equivocada. Pero si se recorren todos suficientes veces, la malla se asienta en un estado donde todos los hilos están cerca de su longitud a la vez. Jakobsen lo llamó relajación (iteración de Jacobi o de Gauss-Seidel, según cómo se haga). Esta herramienta usa cada posición corregida de inmediato en el cálculo del siguiente hilo, es decir, es del tipo Gauss-Seidel.
Jakobsen escribió que, para la mayoría de las telas, una sola iteración basta para que se vea bien. Otra cosa es una tela de varios miles de puntos colgada solo de su fila superior. Una pasada no alcanza para enderezar todos los hilos y la tela entera se estira como goma. Con Rigidez en 2 cuelga mucho y oscila despacio; por encima de 40 apenas se estira. En este método la rigidez no es una propiedad del material. Mide hasta dónde llega el cálculo.
Con una rejilla más fina, el mismo número de iteraciones resuelve menos. Cuando la separación entre puntos baja de unos 12 píxeles, la herramienta divide cada fotograma en hasta seis subpasos.
Cómo se propaga un desgarro
Cuando un hilo se rompe, la carga que llevaba pasa a sus vecinos. Estos se estiran más, uno supera el límite y se rompe, y el desgarro avanza en línea. Con el límite por defecto de 2,6, un hilo con separación de 12 px se rompe al superar 31,2 px. Con 1,3 la zona cercana a la fila superior no aguanta ni su propio peso, y con 6 ni un tirón fuerte suele romperla.
La colocación de los alfileres cambia mucho el resultado. La opción por defecto, un alfiler cada cuatro puntos, deja que la tela cuelgue en ondas entre ellos. Fijando solo las dos esquinas, el centro se hunde mucho y el peso se concentra en los hilos de arriba. Fijando toda la fila superior, la carga se reparte mejor y la tela resiste más.
Ejemplos
Cálculo de la longitud de rotura
- Entrada
Separación 12 px, límite de desgarro 2,6- Resultado
Se rompe por encima de 12 × 2,6 = 31,2 px
La comprobación se hace después de todas las iteraciones, así que un hilo que solo se estira un momento a mitad del cálculo no se rompe.
Cuánta velocidad deja una amortiguación de 0,99 tras un segundo
- Entrada
60 fotogramas por segundo, 1 subpaso frente a 6- Resultado
0,99⁶⁰ ≈ 0,55 en ambos casos
El valor de amortiguación se define por fotograma a 60 fps. Con n subpasos, cada uno multiplica por 0,99^(1/n), así que una rejilla más fina no apaga el balanceo antes.
Cómo se usa
- Pulsa y arrastra sobre el lienzo para tirar de la tela.
- Traza con la herramienta Cortar o con el botón derecho para rasgarla.
- Ajusta gravedad, viento, límite de desgarro, rigidez y alfileres.
- Elige un estampado o suelta una imagen para imprimirla en la tela.
Términos clave
- Integración de Verlet (forma posicional)
- x_nueva = 2x − x_anterior + aΔt². No se guarda la velocidad: la diferencia entre las dos últimas posiciones ocupa su lugar.
- Restricción de distancia
- Condición de que dos puntos se mantengan a una distancia fija. En esta tela, cada una es un hilo.
- Relajación
- Cumplir muchas restricciones corrigiéndolas de una en una y repitiendo hasta que el conjunto queda casi satisfecho.
Preguntas frecuentes
La tela se estira demasiado.
Sube Rigidez (iteraciones), sobre todo si has aumentado la resolución de la rejilla. Con pocas iteraciones los hilos nunca vuelven a su longitud y la tela parece de goma.
Se rompió sola mientras colgaba.
El límite de desgarro o la rigidez son demasiado bajos, y los hilos estirados por el propio peso superaron el límite. Sube uno de los dos o fija toda la fila superior.
¿Así se hace la ropa en los videojuegos?
Este enfoque y su sucesor, la dinámica basada en posiciones (PBD), se usan mucho en juegos. Las telas de producción añaden hilos diagonales para la cizalla y otros que saltan un punto para la flexión, y gestionan los choques con los personajes. Aquí puedes activar las restricciones de cizalla y de flexión para ver qué cambian.
Fuentes
- Thomas Jakobsen, Advanced Character Physics, Game Developers Conference 2001 (CMU course mirror)
- L. Verlet, Computer "Experiments" on Classical Fluids. I, Phys. Rev. 159, 98 (1967)
Revisado el: