Representaciones de físicas complejas Llogari Casas PID_00168431
CC-BY-NC-ND • PID_00168431
Los textos e imágenes publicados en esta obra están sujetos –excepto que se indique lo contrario– a una licencia de Reconocimiento-NoComercial-SinObraDerivada (BY-NC-ND) v.3.0 España de Creative Commons. Podéis copiarlos, distribuirlos y transmitirlos públicamente siempre que citéis el autor y la fuente (FUOC. Fundación para la Universitat Oberta de Catalunya), no hagáis de ellos un uso comercial y ni obra derivada. La licencia completa se puede consultar en http://creativecommons.org/licenses/by-nc-nd/3.0/es/legalcode.es
Representaciones de físicas complejas
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
Índice
1.
2.
Sistemas de partículas......................................................................
5
1.1.
Concepto de sistemas de partículas ............................................
5
1.2.
Deflectores ...................................................................................
10
1.2.1.
Parámetros de un deflector ...........................................
10
1.2.2.
Uso de deflectores en animación ..................................
11
Reactor..................................................................................................
18
2.1.
Animaciones complejas de cuerpos rígidos ................................
18
2.2.
Animaciones complejas de cuerpos deformables .......................
27
2.3.
Animaciones complejas de superficies líquidas ..........................
33
CC-BY-NC-ND • PID_00168431
5
1. Sistemas de partículas
1.1. Concepto de sistemas de partículas Las representaciones de elementos como la lluvia, la nieve o el humo significan un punto y aparte en las animaciones. De no ser por los sistemas de partículas, sería imposible trabajar con estos elementos en MAX. Un sistema�de�partículas es un objeto que crea pequeños subobjetos, que en su conjunto funcionan como si de un único objeto se tratara aunque permiten tener una cierta independencia entre sí. Las partículas que creamos nacen a partir de un emisor y se comportan según los parámetros establecidos. Una gran diferencia entre estos elementos y cualquier otro objeto de MAX es que las partículas nacen en el emisor pero desaparecen pasados unos fotogramas. MAX dispone de herramientas para determinar el tiempo de vida de las partículas y, por tanto, su visibilidad. Hay dos tipos de sistemas de partículas, los que no responden a eventos y los que sí que lo hacen. El primer tipo es un sistema que trabaja de manera continua y no depende de ningún suceso. El segundo tipo, identificado en MAX bajo el nombre de PF�Source, permite definir aspectos que afectarán a las partículas de diferentes maneras en función de lo ocurrido en la escena. Estas últimas partículas se denominan sistemas de partículas y son especialmente útiles si queremos que dichas partículas vayan cambiando de aspecto a lo largo de la animación. Un ejemplo de ello podría ser el de un cohete espacial: cuando las partículas salen de éste tienen aspecto rojizo, a imitación del fuego, para poco a poco irse convirtiendo en humo hasta que llega su desaparición de la escena.
Dentro del grupo de sistemas de partículas que no responden a eventos, podemos crear seis tipos de sistemas: Snow (nieve), Blizzard (ventisca), Spray, Super�Spray, PArray (matriz de partículas) y PCloud (nube de partículas). Los usos principales de estos sistemas de partículas son los siguientes: •
Snow: se usa para simular nieve, arena y otros elementos donde la partícula emitida tenga un aspecto esférico.
•
Blizzard: es similar al anterior pero, a diferencia de éste, admite más parámetros. Como en el caso anterior, el emisor está basado en un plano. Sirve para representar efectos de lluvia irregular y de polvo levantado por
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
6
el viento. Ofrece la posibilidad de incorporar como partículas elementos que se hayan creado previamente. Un ejemplo de ello podría ser una hoja de modo que simule el movimiento de ésta cuando sopla viento.
•
Spray: a diferencia de los dos anteriores, el emisor está basado en un punto. Esto provoca que su uso se limite a partículas que son emitidas desde objetos como pueden ser grifos, mangueras o chimeneas.
•
Super�Spray: es muy parecido al anterior pero admite muchos más parámetros que aquél. Al igual que sucediera con Blizzard, tiene también la posibilidad de emitir objetos previamente creados.
•
PArray: tiene multitud de parámetros que permiten ajustar tanto el tipo de partículas como su disposición espacial y la fuente a partir de la que se generarán. Uno de sus usos más habituales es la de crear efectos de esparcido de metralla en las explosiones.
•
PCloud: éste es un sistema de partículas un poco especial, ya que permite crear partículas para rellenar un determinado volumen siguiendo un patrón. Así, por ejemplo, podríamos modelar un pájaro y generar una bandada de los mismos pájaros a partir de ese único pájaro modelado.
Consejo: aunque resulta evidente que en muchas ocasiones usando sistemas de partículas complejos podemos llegar a obtener los mismos resultados que si usamos sistemas de partículas sencillos, usar sistemas de partículas avanzados requiere muchos más cálculos de ordenador que usar sistemas simples como pueden ser Snow o Spray. Para agilizar el trabajo y como norma, es aconsejable usar el sistema de partículas más adecuado a aquello que queremos obtener. Abrid el archivo hoja01.max. Este archivo contiene la malla de una hoja que ya tiene movimiento de rotación incorporado. Id al panel Create y elegid Blizzard del apartado Particle�Systems. En el visor izquierdo cread un emisor de este tipo de partículas.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
7
De las características del emisor, elegid el apartado Particle�Type y seleccionad Instanced�Geometry.
Esto activará el apartado Instancing�Parameters. Activad el botón Pick�Object y seleccionad la hoja.
Para poder ver cómo será el resultado final, activad Mesh en el apartado Viewport�Display.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
8
Podéis probar a modificar diferentes parámetros y observar así diferentes resultados.
Consejo: cuando se trabaja con sistemas de partículas suele ser necesario usar deformadores de superficie. Los deformadores son elementos que modifican la apariencia de un objeto por efectos de campos de fuerza. Algunos de ellos están pensados para trabajar con mallas de cualquier tipo. Sin embargo, hay algunos especialmente indicados para ser usados con sistemas de partículas; es el caso de los deflectores, que permiten crear campos de fuerza de manera que, cuando las partículas chocan contra ellos, las hacen rebotar en diferentes direcciones según sean las características del deflector. Podemos acceder a la creación de deformadores de espacio por medio del botón Space�Warps del panel Create. Hasta ahora hemos visto cómo funciona un sistema de partículas simple, no sujeto a eventos. Como ya se ha mencionado anteriormente, existen en MAX otro tipo de partículas, los flujos�de�partículas o PF�Sources. Este tipo de partículas son los usados habitualmente en la creación de juegos, ya que permiten crear sofisticados efectos que responden a acciones de otros elementos de la escena. Para enlazar o conectar los eventos que suceden en la escena, MAX utiliza una
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
9
interfaz similar a un diagrama de flujo conocida con el nombre de vista de partículas. Esta ventana permite, de forma gráfica, gestionar cómo actuarán las partículas a lo largo del tiempo que dura la animación.
La vista de los flujos de partículas se divide en cuatro partes. Una primera zona corresponde a la presentación de eventos; esta zona es la que se usa para conectar los eventos entre sí y para gestionar el comportamiento que tendrán las partículas pertenecientes al flujo. La segunda zona es la correspondiente al panel de parámetros y en ella es posible modificar los parámetros de cada apartado. La tercera zona actúa a modo de almacén; en esta parte se encuentran todas las acciones disponibles para poder construir los eventos. Finalmente, existe una cuarta zona de información, en la que se explica al usuario la función de cualquier acción seleccionada en la zona del almacén.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
10
El modo de construir eventos es cambiar o añadir operadores y pruebas. Cada operador es el responsable de efectuar una acción diferente: variar la velocidad, modificar el ángulo, cambiar el color, etc. Las pruebas permiten verificar condiciones y, en función de los resultados, permitir el paso de una partícula de un estado a otro. 1.2. Deflectores
1.2.1. Parámetros de un deflector Los deflectores actúan como escudos que se usan para repeler las partículas generadas por un sistema de partículas. Pueden servir, por ejemplo, para simular la acción de la lluvia sobre el suelo, que es lo que haremos en este ejercicio, o crear efectos de cascadas y chorros de agua de una fuente impactando contra una superficie. El efecto del deflector está controlado, básicamente, por tres factores: el primero es su tamaño, el segundo es la orientación en la que se encuentra en escena en relación con el sistema de partículas al que está enlazado y, por último, a la fuerza con que hace rebotar las partículas que impactan sobre él.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
11
Cuando situamos un deflector en el escenario, se visualiza en modo de representación alámbrica, como si estuviéramos viendo el visor en modo Wireframe, y sus parámetros básicos son: Bounce
Controla la velocidad con la que las partículas rebotan en el deflector. Con un valor de 1, las partículas saldrán del deflector a la misma velocidad con la que hayan chocado. Cuanto menor sea el valor, más alta será la pérdida de velocidad y menor será el rebote.
Variation
Indica la cantidad de partículas que variarán su velocidad de forma aleatoria respecto al valor especificado en Bounce.
Chaos
Indica la cantidad de dispersión que se producirá respecto a lo que sería un rebote de un reflejo perfecto, es decir, de ángulos de incidencia y reflexión completamente iguales, como es el caso del que produciría un rayo de luz sobre un espejo. Un valor de 100 variará el ángulo de este reflejo considerablemente.
Friction
Indica el valor al que se ralentizarán las partículas a medida que se vayan desplazando sobre la superficie del deflector. Un valor de 0 indicará a Max que no debe haber fricción y, por consiguiente, no frenará las partículas. Un valor de 100 implicará que se detengan cuando entren en contacto con la superficie del deflector.
Inherit�Vel
Si su valor es superior a 0, el movimiento que pueda tener el deflector afectará tanto a las propias partículas como a los valores introducidos hasta el momento. Un ejemplo en el que deberíamos aplicar un valor distinto a 0 podría ser el de un paraguas en manos de un personaje que lo hace girar, al tiempo que el paraguas recibe impactos producido por un sistema de partículas que genera lluvia.
1.2.2. Uso de deflectores en animación Abrid el archivo deflector.max que encontraréis en la carpeta de recursos. Observad que, en la escena, se encuentran lo que será una gota de agua en forma de esfera deformada, una salpicadura en forma de esfera y un plano que hará las veces del suelo. Podéis resituar las gotas de agua de modo que queden fuera de la ventana de perspectiva en un lugar en el que no molesten. Hecho esto, desplazaos al apartado Space�Warps y escoged Forces.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
12
Insertad en la escena, mediante el visor lateral, una fuerza del tipo Gravity. La posición en que coloquéis dicha fuerza en la escena es poco significativa, ya que lo único que nos interesa es que esté presente y que apunte hacia abajo; más adelante usaremos esta fuerza para hacer que, cuando las gotas de agua reboten sobre el suelo, vuelvan a él. A continuación, desde el mismo panel Space�Warps, añadid un deflector. Los deflectores tienen su propio apartado en este panel. Creadlo de forma que tenga una medida igual o similar a la del plano y situadlo en el mismo lugar que ocupa dicho plano.
Con lo que en este momento tenemos en escena, ya podemos iniciar el sistema de partículas que generará la lluvia. A lo largo del proceso, aprenderemos a enlazar todos estos elementos entre sí. Desplazaros hasta el panel Create�>�Particle�Systems�>�PF�Source. Cread un emisor de partículas en el visor superior. A continuación, cambiadle el nombre que MAX pone por defecto y llamadle "emisor"; de esta forma nos será más fácil identificarlo. Hecho esto, desde el visor lateral o desde el frontal, seleccionad el emisor que acabáis de crear y resituadlo en un lugar más elevado que el que ocupa la fuerza del viento.
Con el emisor seleccionado, acudid ahora al menú Graph�Editors�>�Particle View. Esto os abrirá la ventana específica de creación de sistemas de partículas. Fijaos en que el emisor que habéis colocado en la escena está presente en esta ventana de construcción.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
13
Haced clic en Birth (origen) y podréis ver que, al lado, os aparecen las características que tendrá el emisor que acabáis de incorporar. Variad el valor del final de emisión hasta 130 y el de inicio situadlo en ?30. Así, cuando se inicie y finalice la escena, la lluvia estará cayendo. Luego, aumentad la cantidad de gotas (Amount) hasta 750. Observad que los parámetros que habéis introducido son ahora visibles al lado del propio generador (Birth).
Observad que, en el apartado Display01 que tenéis en la ventana, se indica que el emisor generará puntos (Ticks). Nosotros, sin embargo, queremos que incorpore la gota que simboliza la lluvia. Esto significará que debemos cambiar Ticks por Geometry en el panel de las propiedades que aparece en el lateral cuando seleccionamos el elemento Display01.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
14
Como podréis comprobar en el escenario, el hecho de seleccionar Geometry no es garantía de que se incorporen las gotas de lluvia que teníamos en el escenario, ya que no se lo hemos indicado a MAX en ningún momento. Así pues, será necesario modificar el elemento Shape� (Tetra) por un elemento de instancia de forma (Shape� Instance). Mediante esta instancia de forma, podremos seleccionar directamente en el escenario la gota que queremos que se represente en el sistema que estamos creando. Así pues, seleccionad Shape (Tetra) y haced clic en la tecla de suprimir. A continuación, arrastrad hasta la posición que ocupaba Shape�(Tetra) un elemento del tipo Shape�Instance.
Al seleccionarla, aparecerán sus propiedades. En el primer apartado de ellas, Shape�Instance, encontraréis un botón por el que podréis seleccionar la geometría de la gota directamente en el escenario. Su funcionamiento es muy simple. Haced clic para activar, desplazaos al escenario y haced clic encima de la gota. Automáticamente, quedará incorporada como elemento de representación, y el botón None cambiará su nombre por el del elemento seleccionado.
Observad el escenario y veréis que las gotas son enormes. En este mismo apartado, encontraréis dos formas de variar dicho tamaño. El apartado Scale os permitirá hacer las gotas más pequeñas o más grandes, si fuese el caso. Desde el apartado Variation, podréis hacer que tengan tamaños distintos entre ellas. Un valor igual a 0 implica que todas serán iguales, mientras que un valor de 100 hará que unas puedan tener las medidas originales y otras ser imperceptibles.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
15
Ahora que ya tenemos las gotas en la escena podréis observar que su posición no es muy correcta, ya que algunas tienen la punta de deformación hacia abajo. Haced clic en el apartado Rotation01 y, en sus parámetros, indicad que queréis que se orienten según las coordenadas del mundo, World�Space.
Ha llegado el momento de añadir el deflector que habíamos creado al inicio. Para ello, en la ventana de construcción, arrastrad un icono del tipo Collision al evento en el que estamos trabajando. Haced clic sobre él para que aparezcan sus propiedades y haced clic en el botón By�List. Seleccionad, como elemento de choque, el deflector que habíais incorporado en la escena. Si movéis el deslizador de la línea de tiempo, veréis que ahora las gotas ya no atraviesan el plano que hace las veces de suelo.
Observad que esta acción tiene un elemento que sobresale de la forma rectangular. Este elemento indica que es posible crear una conexión con otro evento. En nuestro caso, este nuevo evento será el rebote, la salpicadura, de la gota de agua en el suelo. Para empezar a crear el evento, arrastraremos un elemento indispensable del mismo a la ventana de construcción. Dicho elemento indispensable será la velocidad que queramos imprimir a las salpicaduras. Así pues, arrastrad una instancia de Speed a una zona libre de la ventana de construc-
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
16
ción. Haced clic en uno de los dos enlazadores (el de la colisión o el que se ha creado cuando habéis incorporado Speed) y arrastradlo con el ratón hasta el otro enlazador. Se creará una línea de conexión entre ambos elementos.
Deberéis, ahora, incluir en este nuevo evento una Shape�Instance y, actuando de la misma forma a como ya hicisteis anteriormente, cambiar Ticks por Geometry, para que nos permita escoger y escalar la esfera sin deformar, que tenemos en el escenario. En el apartado Display de este nuevo evento deberéis cambiar también Ticks por Geometry. Si vais al escenario observaréis un detalle: el cambio de forma se realiza correctamente cuando la gota que cae toca al deflector, pero la salpicadura, en lugar de cambiar de sentido, sigue la misma trayectoria que la gota. Para solucionar este problema, debéis seleccionar Speed y, en sus propiedades, activar la casilla de verificación Reverse.
Si pensamos en la realidad, la salpicadura deja de existir desde el momento en que vuelve a entrar en contacto con el suelo. Si observamos la escena, veremos que eso aún no es así. Para que tal cosa se realice correctamente, deberemos añadir varias cosas. Por un lado, la fuerza de gravedad que hemos incorporado a la escena. Por medio de ella, conseguiremos que las salpicaduras retornen al suelo. Por otro lado, un elemento que nos permita enlazar a otro evento. Este nuevo evento será, simplemente, la orden de borrar la salpicadura. Así pues, añadid ambas cosas y enlazadlas con el evento de borrado de la forma que podéis ver en la imagen siguiente.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
17
Si todo ha funcionado correctamente deberíais ver, conforme movéis el cursor por encima de la línea de tiempo, la lluvia cayendo y el rebote de las salpicaduras en el suelo. Recordad que, si las salpicaduras os parecen poco naturales, siempre podéis, desde el panel Modify, variar los parámetros propios del deflector hasta que encajen con el efecto que creáis más conveniente.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
18
2. Reactor
2.1. Animaciones complejas de cuerpos rígidos Uno de los apartados más potentes de MAX, por lo que a animación de corte realista se refiere, es reactor. Este plugin incluido en MAX, ya desde hace algunas versiones, contiene un conjunto de herramientas que permite simular escenas basadas tanto en cuerpos rígidos como en cuerpos blandos, fluidos o gases, evitando así pasar innumerables horas para definir movimientos que, de otro modo, resultan bastante complicados de simular. Reactor permite trabajar con diferentes tipos de colecciones de objetos de distintas características: •
Rigid�Body�Collection: permite determinar las características de cuerpos rígidos que no se deforman bajo un impacto.
•
Cloth�Collection: son objetos capaces de sufrir deformación, los cuales permiten interactuar con otros objetos de la escena.
•
Rope�Collection: son elementos con comportamientos libres como, por ejemplo, cortinas, cuerdas, redes, etc. Pueden ser asignados a otros objetos de la escena, que serán los responsables de su movimiento.
Abrid el archivo dado01.max que se encuentra en la carpeta recursos_MAX. Este archivo contiene la malla ya coloreada de un dado a la que le aplicaremos, desde reactor, un comportamiento para que el propio programa genere la animación de caída de éste, la colisión y los rebotes que pueda haber contra lo que sería el tablero de juego. Para ello, asignaremos propiedades físicas concretas a dicho dado como pueden ser la masa de éste, la fricción o la elasticidad. Lo primero que haremos será crear el tablero de juego; para ello, bastará con hacer, por ejemplo, una caja cualquiera situada por debajo del dado y que será el lugar donde chocará éste cuando se produzca la caída.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
19
Hecho esto accederemos al menú Utilities, activaremos la opción reactor e iremos al apartado Properties.
Desde este apartado podremos adjudicar las cualidades físicas del dado y del tablero de juego, estableciendo su masa, la fricción y la elasticidad de cada una de las superficies.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
20
Hecho esto, deberemos ahora crear el elemento que permitirá crear la animación. Esto podemos hacerlo por medio de la barra de herramientas de reactor o directamente desde el menú reactor. En cualquier caso, elegiremos la opción Rigid�Body�Collection. Esta opción es la correcta para la creación de un cuerpo rígido.
El icono que aparece probablemente quedará colocado encima del elemento que tengamos seleccionado en ese momento en la escena, pero eso no implica que deba mantenerse en ese lugar, ya que su presencia allí puede ser muy molesta; por lo tanto, lo mejor es situarlo en un lugar donde no estorbe para nada.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
21
Seleccionaremos ahora el elemento del cuerpo rígido y abriremos el panel de los modificadores. En el apartado RB�Collection�Properties indicaremos Add y del desplegable que aparecerá elegiremos el dado y el tablero.
Si es necesario, reajustaremos las propiedades del tablero a una masa equivalente a cero para que no se desplace cuando se realice la animación.
Indicaremos a reactor que vamos a trabajar Mesh�Convex�Hull. Esta opción indicará a reactor que debe usar la forma actual, tanto del dado como de la superficie de juego, en el momento de la colisión.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
22
A continuación ya podremos acceder a ver un previo de la animación.
Aparecerá una ventana de proceso y cuando haya terminado éste, MAX mostrará una vista previa de la animación. Por defecto, reactor muestra siempre el previo de la ventana de Perspectiva.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
23
Atención: si no hemos convertido el tablero de juego a malla, MAX nos indicará que no puede realizar la animación; en ese caso, debemos acudir al panel de modificadores y convertir el tablero. De ser necesario, podemos ajustar los parámetros para que la animación se adapte a aquello que queremos realmente. Cuando el resultado sea adecuado, desde el mismo panel del previo podremos crear la animación propiamente dicha. En este punto es importante que prestemos atención al cuadro que indica la cantidad de fotogramas que vamos a crear, ya que después de convertir el previo en animación no podremos dar marcha atrás. Observación: antes de convertir el previo en animación definitiva, podríamos añadir más elementos. Para que reactor los tomara en cuenta, deberíamos repetir los pasos que hemos seguido hasta ahora. Así, por ejemplo, si quisiéramos podríamos añadir más dados.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
24
Aunque en este caso no sea necesario, otra posibilidad sería la de añadir más superficies de choque. Un ejemplo de ello podría ser el de un balón lanzado sobre un tejado en el que rebota y salta a otro tejado.
Después de crear la animación, aparecerán en la Track�Bar los keyframes correspondientes a cada elemento. Bien, desde la propia Track�Bar o desde el editor de curvas es posible eliminar aquellas keys que no sean necesarias y modificar lo que nos convenga de cada key.
Hasta aquí hemos completado esta simulación y si habéis hecho una superficie completamente plana, os habrá quedado bien; sin embargo, observad el caso del clip siguiente. En él eso no es así, ya que las sombras muestran que las piezas no han llegado a tocar el suelo, es como si quedasen flotando.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
25
Éste suele ser un error muy común cuando las superficies tienen agujeros o cuando la zona de impacto se encuentra en un punto por debajo de la altura máxima del objeto que recibe el cuerpo que se mueve. En este caso, el punto más alto es el reborde del tablero de juego.
Para evitar que ello suceda, debemos indicar a MAX que no se trata de una superficie convexa, sino que tiene una concavidad y que queremos que sea respetada.
Ésta es la manera de hacer que algunos cuerpos puedan atravesar los agujeros de otros como, por ejemplo, sería el caso de querer poner estos dados dentro del barrilete de juego.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
26
En el clip inferior puede verse un ejemplo más claro de lo que sucede cuando no se activa la opción Concave�Mesh.
En todos los movimientos que hemos generado hasta ahora con reactor siempre el objeto ha empezado su movimiento en caída libre, completamente vertical y sin rotación alguna, pero eso no tiene por qué ser así. Reactor permite definir una velocidad inicial y una dirección y rotación del movimiento. Para definir estos parámetros, debemos activar el modo de Autokey y crear un fotograma clave que contenga la información de la posición y la rotación al inicio de la animación.
Desplazarnos hasta un fotograma cualquiera de la animación y crear otro fotograma clave con la variación de rotación y posición del objeto. Reactor almacenará estos datos cuando procese la animación y calculará qué velocidad debe llevar el objeto para que coincidan ambos frames con el movimiento que generará automáticamente. En función de estos datos creará el resto de la animación.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
27
Observación: para que reactor pueda realizar estos cálculos, debemos indicar que queremos que empiece a calcular la animación en un fotograma situado entre los dos keys que hemos creado, ya que de lo contrario no funcionará. Así pues, si por ejemplo hemos creado una key en el fotograma 0 y otra en el 5, podremos decirle que empiece sus cálculos a partir del fotograma 1, 2, 3 o 4.
2.2. Animaciones complejas de cuerpos deformables Simular el movimiento del agua cuando un objeto cae en ella o el movimiento de una cortina mecida por el viento puede ser, en animación frame a frame, una tarea si no interminable, sí, por lo menos, muy lenta y tediosa. Reactor permite obtener estos movimientos en pocos minutos gracias a ayudantes como pueden ser Water o Wind.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
28
A lo largo de este apartado veremos cómo hacer que una cortina se mueva por efecto de un ayudante de veleta pudiendo modificar sus parámetros fácilmente para ajustarlos a la necesidad de cada momento. Abrid el archivo cortina01.max que se encuentra en la carpeta recursos_MAX y seleccionad la malla que hará la función de cortina. Del catálogo de modificadores elegid el reactor�Cloth. Este modificador es necesario para que este cuerpo sea considerado flexible. Si no se pone este modificador, la Cloth�collection no podrá construirse.
Si pensamos cómo se comporta una cortina mecida por el viento, veremos que la parte superior, la que está sujeta a la barra, no se mueve. Así pues, lo que haremos será precisamente eso, sujetar la cortina en la zona en la que no debe moverse. Desplegad el modificador reactor�Cloth que acabamos de incorporar y seleccionad Vertex. Extended la selección hasta que queden seleccionados todos los vértices situados en la parte superior de la cortina.
Aún dentro del apartado Vertex, desplazaos hasta la parte inferior, en Constrains. En este apartado haced clic en Fix�Vertex; esto creará una restricción para los vértices seleccionados que hará que dichos vértices queden fijados donde están y no se muevan cuando el viento mueva la cortina. Con ello parecerá que la cortina está sujeta por la barra −cilindro− que la sostiene.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
29
Acudid ahora al panel Create y del apartado Helpers elegid las herramientas de reactor.
Indicad que queréis crear una nueva colección de cuerpos flexibles, CL�Collection, y añadid a esta colección la malla que hará las veces de cortina. Seguidamente, haced clic en un visor para añadir el ayudante de cuerpo flexible. Este ayudante queda identificado en la escena mediante un icono de una camiseta.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
30
Observad que en el panel de seleccionar Cloths el único objeto que aparece es el que tiene el modificador reactor Cloth. Es importante recordar que para añadir cualquier objeto a esta colección debemos siempre añadir este modificador.
Volved al panel Helpers de la solapa Create, elegid Wind y haced clic en un visor. Se creará un símbolo parecido a una veleta.
Mediante las herramientas de rotar y de mover, colocad la veleta de manera que la punta de la flecha apunte hacia el objeto Cloth que queréis mover; en este caso, la cortina.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
31
Con la veleta seleccionada, abrid el panel de modificadores y allí encontraréis Wind. En el apartado Properties podréis definir la velocidad y las variaciones que queréis que tenga el viento que queréis crear.
Seleccionad a continuación la malla de la cortina. Desde el panel de los modificadores podréis acceder a sus propiedades. Adjudicadle una masa para que adquiera el peso necesario. En este apartado encontraréis también algunos parámetros importantes que modificar según lo que queramos obtener: •
Damping: cuanto mayor sea el valor, más ondulación tendrá la cortina.
•
Stifness: cuanto mayor es el valor, más rigidez tendrá.
•
Avoid�self-intersections: este parámetro provoca que cuando los pliegues van apareciendo no se crucen y, por tanto, choquen y se despeguen. Activar esta opción da resultados más reales, pero requiere mayor tiempo de procesado.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
32
Acudid al panel Utilities y desplegad reactor para probar el previo de animación. Cuando os parezca adecuada, convertidla a animación definitiva.
Observación: al igual que hiciéramos con los dados, podemos incorporar movimientos y velocidades iniciales por medio de AutoKey. Recordad que para que esto sea posible, debemos fijar posición y rotación en el fotograma 0. Crear otra key unos fotogramas más adelante y modificar en dicha key lo que nos convenga. Indicar a reactor que empiece a simular la animación desde un fotograma intermedio entre las dos keys. En las imágenes de ejemplo puede verse la cortina en el fotograma 0 y en el fotograma 5. La simulación se ha indicado para que empiece desde el fotograma 1.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
33
2.3. Animaciones complejas de superficies líquidas Animar los líquidos es de las tareas más complejas cuando se trabaja en animación tradicional. Por sus características, estos cuerpos siempre muestran una inestabilidad muy difícil de simular. Hasta ahora hemos visto dos maneras de animar líquidos en MAX: mediante el modificador de ruido y por medio de un sistema de partículas. En los casos en los que aplicamos estas técnicas, las características del líquido eran siempre las mismas; no había variación, el agua del lago permanecía siempre en éste sin que nada perturbara su vaivén y el chorro de agua del grifo era siempre constante; pero ¿qué pasaría si quisiéramos simular la caída de un cuerpo sólido en un líquido? Aunque puede simularse esta acción mediante otras vías de trabajo, la mejor opción será trabajar a partir de reactor. Abrid el archivo piscina.max que se encuentra en la carpeta recursos_MAX. Veréis que se trata de una piscina vacía y una esfera que hace las veces de pelota y que será lo que lanzaremos dentro de la piscina. Lo primero que haremos será crear la superficie del agua. Para ello, acudiremos al apartado Space�Warps del panel Create y del desplegable elegiremos reactor. Aparecerá entonces el botón de creación de agua, Water.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
34
Con este botón seleccionado acudiremos al visor superior y trazaremos un plano de agua que ocupe toda la superficie de la piscina y lo colocaremos en el lugar donde queremos que llegue el nivel del agua.
Atención: este plano no es un plano normal, simplemente simula el límite del agua. Si renderizáramos ahora la escena, no veríamos nada, ya que dicho plano es invisible al render. Crearemos a continuación otro plano –éste sí que será un plano normal– que ocupe la misma superficie del plano del agua. Éste será el plano de simulación del movimiento del agua. Dicho plano será "renderizable" y se adaptará a la forma del plano del agua cuando este último reciba el impacto del balón. Para que se adapte mejor al comportamiento del plano del agua, es aconsejable que este plano que acabáis de crear tenga suficientes vértices, ya que, de lo contrario, los movimientos ondulantes del agua quedarán poco creíbles.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
35
Consejo: mientras dura este proceso de trabajo podéis colocar el plano receptor de la simulación separado del plano del agua; de este modo, os será mucho más sencillo de manipular y al final ya lo colocaréis en su lugar. Seleccionad ahora el plano del agua y activad el botón de enlace a efectos especiales, que se encuentra en la barra principal de herramientas.
Haced clic en el plano del agua y a continuación haced clic en el plano receptor. Esto creará los vínculos necesarios entre ambos elementos. Si seleccionáis el plano receptor y vais al panel de los modificadores, podréis observar que se ha creado el vínculo, ya que veréis que por encima del plano se ha colocado un reactor�Water (agua).
En las propiedades de este modificador podréis incrementar o disminuir la escala. Este parámetro afecta directamente a la intensidad en la que se recibe el impacto. Una escala por debajo de 1 creará simulaciones muy tenues. Por encima de este número actuará como factor de multiplicación de los movimientos de la superficie líquida.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
36
Para completar este vínculo es necesario que desactivéis la herramienta de enlazar a efectos especiales y seleccionéis ahora el plano del agua. En el mismo panel de modificadores, en el apartado Properties encontraréis una casilla llamada Landscape. La activación de esta casilla permite usar un contenedor en el que rebotarán las ondas formadas por el agua a modo de pared. Éste es el caso de las paredes de la piscina cuando lancemos la pelota. Así pues, activad Landscape, haced clic en None para activarlo y haced clic en la caja que hace la función de piscina. Ahora esta caja rebotará en las ondas que se produzcan en el agua y las devolverá hacia el centro de la piscina, como ocurre en la realidad.
Atención: algunas versiones de MAX no permiten indicar este parámetro hasta que el cuerpo receptor no está definido como superficie cóncava en una colección de cuerpos rígidos. Si estáis en esta situación, obviad este último paso y dejadlo hasta que hayáis creado la Rigid�Body�Collection. Ahora es el momento de hacer la animación de la pelota; para ello, podéis seguir el mismo proceso que ya hicisteis con el dado. Cuando hayáis terminado, deberéis crear la colección de cuerpos rígidos, en la que hay que añadir el contenedor que hace de piscina y la esfera. Recordad que para que un cuerpo pueda entrar dentro de otro, es necesario que el que permite la penetración sea cóncavo. Así pues, en el apartado de simulación geométrica de reactor daremos a la esfera una superficie convexa y a la piscina, una superficie cóncava.
Representaciones de físicas complejas
CC-BY-NC-ND • PID_00168431
37
Si probáis ahora la animación, veréis que el balón desaparece después de impactar con el agua. Para que esto no suceda, debéis acudir, dentro de reactor, a las propiedades de éste y activar la casilla Unyielding; eso hará que no desaparezca y que se reproduzca correctamente tanto la animación del agua como la del balón.
Representaciones de físicas complejas