Empezando con Mantaflow (líquidos)

Desde la versión Blender 2.80 han cambiado muchas cosas en Blender. Una de ellas y que creó un gran “hype” en la comunidad es el tema de las simulaciones. Hasta entonces, Blender, disponía de su sistema de simulación de fluidos que, siendo muy básico, te permitía hacer alguna que otra simulación. Eso sí, con muchas limitaciones. En la gran reescritura y reorganización de Blender se incorporó un nuevo sistema de simulación de fluidos, conocido como Mantaflow. Desde siempre me han encantado las simulaciones de fluidos y he tenido experiencia con paquetes especializados en simulación de fluidos como RealFlow o softwares de 3D con buenas herramientas de simulación, como fue en su tiempo ICE en Softimage. Incluso tuve la oportunidad de trabajar en algún trabajado en publicidad haciendo simulación de fluidos. También he tocado, algo más tímidamente, Houdini que me parece una brutalidad, pero a estas alturas me da la sensación de que necesitaría otra vida para seguir aprendiendo, pero bueno, ahí lo tengo para ir “jugueteando”. Nunca es tarde para aprender y además si disfrutas con esto pocas excusas podemos poner. Y ahora con lo que estoy disfrutando es con Mantaflow.

¿Qué es Mantaflow?

Mantaflow es un framework. Esto quiere decir que no es un software de por sí, con su interface y usabilidad, si no que es un conjunto de bibliotecas que te permiten realizar simulaciones de fluidos realistas. Es de código abierto y es por eso posible incorporarlo en cualquier proyecto.

mantaflow liquid blender 280

Con Mantaflow es posible simular tanto líquidos como gases. Y los gases pueden incorporar humo o humo y fuego. Es decir, que es un framework completo de simulación de fluidos.

En este articulo no vamos a entrar en detalles técnicos pues no es un “paper” científico sobre cómo funciona el sistema en sí. Pero siempre puedes visitar la página del proyecto en mantaflow.org. Ahí tienes un montón de pdfs con información sobre todo el sistema, así como el código fuente para que puedas chafardear. Pero si quieres experimentarlo en un software donde ya está implementado para eso tenemos Blender.


Mantaflow dentro de Blender

Debo decir que desde la incorporación de Mantaflow dentro de Blender he disfrutado desde la primera implementación y he podido ir comprobando como en cada versión se incorporan mejoras, tanto de interfaz como de rendimiento. Porque el rendimiento es muy importante en este tipo de simulaciones que suelen ser muy pesadas de calcular. Pero, aunque no tengamos un equipo muy potente ya podemos hacer algunas cosas. Tampoco nos vamos a flipar mucho, pero al menos podremos jugar con Mantaflow.

La receta de líquidos en Mantaflow dentro de Blender

Lo primero que vamos a hacer es aprender a usar Mantaflow. Este artículo pretende ser la primera aproximación a Mantaflow a modo de receta. Es decir, cómo ponemos en marcha estas simulaciones. Y en este primer artículo nos centraremos en los líquidos. En posteriores artículos entraremos en gases que es también algo muy alucinante y espectacular de hacer y de ver.

Así que veamos cómo nos organizamos con Mantaflow dentro de Blender. Lo primero que vamos a hacer es ver qué necesitamos para crear un fluido. Se necesitan, básicamente, dos objetos: Un emisor y un domain.

Tip: Puedes crear un líquido o volumen rápidamente seleccionando un objeto y después desde el menú Object > Quick Effects > Quick Smoke o Quick Liquid. De esta forma se crea un dominio, un emisor y se ajustan los parámetros de una forma básica. Incluso te añade los shaders necesarios para el líquido o el volumen.

¿Qué es un domain en Mantaflow?

Como la idea es no complicar el artículo con muchos tecnicismos diremos que un dominio es un objeto que representará la zona o espacio 3D donde se va a calcular toda la simulación. Dentro de este domain se harán los cálculos para que la simulación sea más rápida y fácil de calcular por el sistema. Más adelante veremos que se pueden combinar varios dominios y hacer un montón de “virguerías”, pero eso lo veremos en un tutorial más avanzado.

Creando nuestra primera simulación con Mantaflow

Así que para empezar vamos a crear un dominio. Podemos usar el cubo que ya tenemos en el visor o eliminarlo y crear uno nuevo. Podemos partir de este mismo cubo y lo editaremos a partir de aquí. El cubo que tenemos por defecto, según las unidades de medida que tiene Blender es de 2 metros x 2 metros. Es decir que nuestra simulación se calculará en un espacio tridimensional de 2 metros. Esto es para que tengamos en cuenta lo que vamos a simular y la razón por la que, si queremos, podemos editar el cubo. No es lo mismo un chorrito de un grifo que un “chorrazo” de una presa.

Pero para empezar vamos a usar este cubo. Vamos a seleccionar el cubo y lo renombramos (es una buena costumbre desde el inicio) y lo llamamos Domain. Después nos iremos al panel de propiedades en la derecha, dentro de la pestaña de Physics. En la lista de botones que nos muestra este panel presionamos el de Fluid. Este domain ya está preparado para calcular simulaciones, pero debemos cambiar algunos parámetros dentro.

01.crear dominio

El primer parámetro que cambiaremos será qué tipo de objeto vamos a usar y seleccionaremos en la lista, Domain. Dentro de Settings, elegiremos qué tipo de domain será. En la lista desplegable seleccionaremos Liquid. Todavía quedan muchos parámetros que debemos tocar, pero lo hacemos después.


Creación del emisor

Lo siguiente que haremos será crear un objeto que emita el fluido. Para esto vamos a crear una esfera, aunque puede ser cualquier geometría. Una vez creada esta esfera la vamos a renombrar como Emitter (o lo que quieras, pero que quede claro que es).

Ahora necesitamos decir que lo vamos a usar como emisor del fluido. Dentro del panel de propiedades de Physics hacemos clic en Fluids, pero esta vez en la lista tipo vamos a seleccionar Flow. Dentro de Flow Type seleccionaremos Liquid. El siguiente parámetro, Flow Behaviour, dictará como se generará el fluido en si. Seleccionaremos Inflow. De esta forma el líquido se irá generando durante toda la simulación, es decir, creamos un chorro.

02 crear emisor

Después vamos a acomodar la interfaz para trabajar cómodamente. Cuando estamos con Mantaflow y mientras estamos toqueteando parámetros lo iremos haciendo en dos elementos, principalmente, que son el dominio y el emisor. Para que no perdamos un panel de propiedades cuando necesitamos editar el otro lo que haremos será bloquear estos dos paneles para tenerlos a mano siempre. Y para eso el primer layout que nos ofrece Blender es un buen punto de partida.

Seleccionamos el Domain y en la parte superior del panel de propiedades hacemos clic en el icono de la chincheta. De esta forma ese panel no cambiará, aunque seleccionemos otro objeto. Para tener el panel del emisor dividiremos el visor 3D para crear otro panel de propiedades. Arrastramos desde la esquina superior derecha del panel del visor y sin soltar arrastramos a la izquierda. Ahora tenemos 2 visores.

04 dos visores

El nuevo visor lo haremos un poco mas estrecho para poder acomodar ahí el panel de propiedades y tener más espacio para el visor 3D. En el menú de selección de Editores seleccionamos Propiedades. A continuación, hacemos clic en el objeto emisor y veremos cómo aparecen sus propiedades. En este momento haremos clic en el icono de la chincheta. Ahora tenemos los dos paneles abiertos y sin peligro de que desaparezcan.

05 dos paneles 1
chincheta

Los parámetros del Domain

Vamos a trabajar ahora con el domain. Lo seleccionamos y en los primeros ajustes podremos decidir la resolución de esta simulación. El primer parámetro Resolution Divisiones que tendrá un valor por defecto de 32. Para empezar, lo vamos a dejar así. Este parámetro te permite controlar la resolución de los voxels de la simulación. El tamaño del voxel se muestra en uba esquina inferior del domain. Así te puedes hacer una idea de cuánto de fina va a ser la simulación. Cuanta más división más densa será esta simulación y por tanto más lento será el cálculo. Así que, si no disponemos de un maquinón, toquemos este parámetro con cuidado. Puedes ir probando a ir subiendo poco a poco estos valores hasta encontrar el equilibrio óptimo entre calidad y “aguante” de tu equipo. Como son nuestras primeras pruebas y queremos que vaya fluido en el visor la dejaremos en 32.

El parámetro Time Scaling te permite controlar la velocidad de la simulación. Por defecto está en 1 pero si te interesa acelerar o desacelerar la simulación lo puedes hacer desde aquí. Con valores bajos es como simular un fluido en “slow motion”.

Después tenemos el CFL Number. Este valor está pensado para optimizar los cálculos entre fotogramas. Con valores mayores se necesitarán menos pasos y tiempo de simulación, pero para líquidos muy rápidos será menos preciso.

Con el Adaptive Time Steps, Mantaflow decidirá cuando subdividir estos pasos en función de un valor máximo y mínimo. Por ahora no nos complicaremos la vida porque esta es la primera simulación que vamos a realizar y será con los parámetros menos exigentes.

06 settings

Pasamos a la sección Border Collisions donde podremos marcar donde Mantaflow empezará a crear una colisión teniendo en cuenta los bordes del dominio. Si no marcamos alguna de estas casillas Mantaflow ignorará la pared seleccionada y hará que el fluido continúe una vez atravesada esa pared, pero claro, no se calculará la simulación fuera del dominio. Nos viene bien para simular líquidos que no están encerrados en un lugar y solo queremos mostrar la simulación ocurrida dentro del dominio pero que de la sensación de que el líquido continúa en la zona que no mostramos en cámara.

07 border collision

En el apartado Liquid, que solo aparece si hemos seleccionado como tipo de dominio el líquido, podemos definir cómo se crearán las partículas necesarias para la simulación del líquido. En cuanto al método de simulación solo tenemos una opción, pero el hecho de que sea un desplegable da a entender que más adelante se incluirán más. Ahora solo podemos seleccionar FLIP.

08 liquid

El resto de los parámetros los podemos dejar de momento como están. Estos parámetros nos servirán para controlar como se simula el líquido. Un parámetro interesante y a tener en cuenta es el FLIP ratio. Cuando este valor está en 1.0 realizará una simulación totalmente correcta, físicamente. Eso sí, creará un montón de partículas y salpicaduras y será algo más caótico el resultado por lo que está pensado para simulaciones de líquidos a gran escala. Si queremos realizar simulaciones a más pequeña escala deberíamos ir bajando este valor ya que la simulación es más suave y menos caótica. De todas formas, Mantaflow funciona mucho mejor con simulaciones de líquidos a gran escala.

Con el siguiente parámetro, Difusión, podemos controlar la viscosidad del líquido. De esta forma podremos decidir si nuestro líquido es agua, aceite, miel o chocolate. En este panel tenemos algunos presets con los que probar.

09 diffusion

En Internet se pueden encontrar valores para conseguir diferentes tipos de líquidos y podremos cambiar los valores de Dynamic Viscosity.

FluidDynamic viscosity (in cP)Kinematic viscosity (Blender, in m2.s-1)
Water (20 °C)1.002×100 (1.002)1.002×10-6 (0.000001002)
Oil SAE 505.0×102 (500)5.0×10-5 (0.00005)
Honey (20 °C)1.0×104 (10,000)2.0×10-3 (0.002)
Chocolate Syrup3.0×104 (30,000)3.0×10-3 (0.003)
Ketchup1.0×105 (100,000)1.0×10-1 (0.1)
Melting Glass1.0×10151.0×100 (1.0)

Las partículas

Estas son unas partículas que se crean dinámicamente en función de la velocidad y dirección en la que se mueve el fluido. Las partículas que se pueden crear nos permiten incluir en nuestra simulación son salpicaduras (spray), espuma (foam) y burbujas (bubbles). Se añade mucho realismo al añadir estos componentes. De momento podemos dejar los valores por defecto, pero si queremos incluirlas en la simulación debemos seleccionar cuáles queremos que se creen. Por el momento dejaremos, para este tutorial, la espuma.

10 particles

En este momento, viene bien recordar que cuanto más compleja sea nuestra simulación más exigente será en cuanto memoria y espacio en el disco duro. Lo del espacio en el disco duro lo veremos en la sección de caché.

Mesh, creando la geometría

Hasta ahora nuestra simulación está preparada en cuanto a partículas por lo que nuestro líquido todavía no se va a ver en el render. Para eso necesitamos crear una maya de geometría.

En estas opciones podemos decidir la densidad en polígonos. El primer valor es el Upres Factor que por defecto está en 2. Lo podemos dejar así, aunque si vemos que nuestro líquido aparece muy gordo podemos ir incrementando este valor. ¡Ojo! Aquí vuelvo a avisar sobre la cantidad de recursos que requerirá el cálculo.

11 mesh

Los siguientes paneles, en este tutorial, los vamos a saltar porque darían para otro tutorial, que son Guides y Collections. No es que sean complicados en si pero necesitan un planteamiento inicial diferente. Como este tutorial es para que sepamos como realizar rápidamente un líquido nos los podemos saltar porque a partir de ahora nuestro líquido ya se puede empezar a renderizar… o no. Vamos a rematar los últimos ajustes para poder verlo en el render.


El cache

Este tipo de simulaciones generan muchísimos datos como para que se estén calculando en tiempo real todo el tiempo, en cada fotograma, por lo que nos vendrá bien tener guardados en el disco nuestra simulación, en forma de cache.

Si todavía no hemos tocado nada en este punto, si estamos siguiendo este tutorial de forma secuencial, aquí veremos que están definidos un Frame Start y End, además de un offset. Con esto le decimos en qué fotograma empieza y acaba la simulación.

En cuanto al tipo veremos que está seleccionado como Replay, que es un método que te permite calcular los datos de la simulación en “vivo”, cada vez que le demos al botón de reproducir. Por supuesto, dependiendo de la máquina que estés usando y la resolución de la simulación no esperes verlo en tiempo real. Este método nos viene bien cuando estamos con los primeros ajustes y la resolución, tanto del FLIP como de la geometría, tienen valores bajos. Es decir, como previsualización.

12 cache

En el momento que queramos calcular la animación para un render ya en producción deberíamos cambiar el tipo de cache a Modular.

Debajo del tipo de cache tenemos una casilla en la que podemos marcar si queremos que la simulación se pueda pausar y continuar en otro momento. Es la opción Is Resumable. Yo la dejaría activa y más adelante veremos por qué.

13 resumable

Como dato importante, antes de hacer nada, es decidir la ruta del disco duro donde vamos a guardar la simulación. Esto lo vemos en el primer campo de este panel. Asegúrate de tener espacio suficiente en el disco duro. Si hemos metido mucha caña a la resolución y tenemos muchos fotogramas que calcular, estos archivos de la cache se comen los gigas que da gusto.

Calculando la simulación

Una vez ajustados los parámetros de la cache es cuando vamos a generar esta simulación. Te aconsejo que ahora le des al botón de guardar tu escena.

Si volvemos a los primeros parámetros del Domain veremos que debajo de cada panel nos aparece un botón que antes no estaba, llamado Bake Data. Así que ahora toca darle a este botón y esperar. Según la resolución que hayamos elegido este cálculo será más o menos rápido. Así que paciencia, y si eres cafetero este podría ser un buen momento para ir haciendo un café.

14 bake data

Si detectamos que nos hemos equivocado en algún valor siempre podemos interrumpir el cálculo con la tecla Esc. Aunque también esto lo podemos hacer si queremos ver cómo está quedando ya que en este momento no veremos nada en el visor hasta que no haya finalizado. Como hemos seleccionado en cache la opción Is Resumable verás que ahora el botón de Bake Data ha cambiado por dos botones: Resume y Free. Si le damos a Resume continuará a partir de donde paramos el cálculo y si le damos a Free lo que hacemos es borrar la cache para empezar de nuevo.

15 resume

Este botón de Bake lo encontrarás en cada uno de los paneles que hemos comentado: en partículas y Mesh.

Así que una vez acabado el cálculo del fluido procedemos a hacer el bake de los demás.

17 bake fluidos particles mesh

Una vez calculados el fluido, partículas y la geometría ya podríamos decir que lo tenemos hecho. Solo nos faltan un par de detalles.

El primero de ellos es que si renderizamos un fotograma no vamos a ver las partículas secundarias para la espuma que habíamos creado. Vamos a ajustar esto y ya casi estamos.

Teniendo seleccionado el Domain buscamos el panel de Particles. Verás un listado con 2 grupos de partículas: Fluid y Foam. El primero es el FLIP y el segundo es para las partículas que se usarán para representar la espuma.

16 foam 1

Seleccionamos el grupo Foam y buscamos el apartado Render. En este apartado podemos decirle cómo se van a renderizar las partículas. Por defecto está seleccionada la opción Halo, pero no nos va a servir por ahora. Así que seleccionamos la opción Object. Para esto debemos crear en primer lugar un objeto que va a representar a la espuma. En este caso suele funcionar muy bien crear una esfera que vamos a escalar lo máximo que podamos, si, pequeñita y le aplicamos un material Emission para que se pueda ver. Volvemos a seleccionar el Domain y en el panel de Particles vamos a render y seleccionamos en Instance Object la esfera que hemos creado.

El siguiente detalle que vamos a tocar es el referente al material del líquido.

La geometría que hemos generado ahora no tiene ningún material por lo que tendremos que crear uno. Por ahora recomiendo usar un Glass BSDF que se calcula rápidamente. Aunque claro, todo va a depender del tipo de líquido que hayamos creado. Así que esta parte ya sería para otro tipo de tutorial, pero se libre de jugar con los materiales, luces y escoger una vista de cámara atractiva y darle al botón de render.

18 render

Con todos estos pasos básicos ya tendríamos creada nuestra primera simulación de líquido con Mantaflow. Como habrás visto, este tutorial, es para crear algo sencillo, pero si os ha parecido interesante podría crear una serie de tutoriales más concretos. Con Mantaflow se pueden crear setups más complejos de líquidos y nos dará mucha potencia si lo combinamos con los Guides. Es solo cuestión de pedirlo.

Este tutorial se publicó en enero en la revista Renderout! que puedes descargar desde aquí. Encontrarás artículos de lo más interesantes e inspiradores, incluidos mis tutoriales también ¡por supuesto!

Renderout 29

Suscríbete a Zao3D

¡Regístrate para recibir las novedades sobre los Cursos Online en Zao3D y mantente al día de nuestros últimos productos y ofertas!

¡No enviamos spam! Lee nuestra política de privacidad para más información.

4 comentarios en «Empezando con Mantaflow (líquidos)»

  1. Primero, subrayar la calidad del artículo y celebrar tu entusiasmo…
    como bien dices: «necesitaría otra vida para seguir aprendiendo». Así es, somos almas inquietas (o eso hemos elegido).
    Lo segundo, no podría ser de otra manera, agradecer tu dedicado esfuerzo por una exposición tan brillante como inspiradora.
    Muchas gracias Javier.
    Siempre atento a tus news…

    Responder
    • ¡Muchísimas gracias por tus palabras, César! La verdad es que me gusta lo que hago y por eso quiero ofrecer el mejor material posible. Claro, eso está reñido con la cantidad, pero vamos, que contenido siempre habrá en mi web. Me alegra mucho que te haya gustado el artículo porque estoy preparando más.

      ¡Nos vemos!

      Responder

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Artículo añadido al carrito.
0 artículos - 0