Rainvive is a project of ETC's Year-Long Animation Studio, which is focus on producing a short Unreal animation film about an arid desert revived with the help of a Native American nature spirit. In this project, I worked as a Technical Artist focusing on physics-based simulation part.
Technical artist (simulation) / Character Grooming Artist
The team started from a pre-production package given by the ETC faculty, in which describes the story, environment, character and also provided a reference storyboard. After understanding the story, we concluded that there are three main things that will need physics-based simulation:
Since we want to be able to see the piece in real time and iterate faster, we decided to do the rendering and simulation as much in Unreal as possible. Thus, the solutions for the simulations I finally reached are:
Our character artist came up with the design of our protagonist as a little girl with short hair and four braids.
As we are using Unreal 4.24 as our render engine, it comes with a fresh new grooming system i would like to try. So I started by reading through Unreal's official documentation.
Its grooming system works as follow:
By creating XGen groom in Maya and exporting it as alembic cache, Unreal is able to apply skinning and physics on hair.
This is a test video of the groom on an Unreal Mannequin.
This pipeline could produce very realistic looking and physically accurate hair simulation. By adjusting the parameters, one can even create the image of simulation on each hair follicle. However, I did not figure out a way to make the braids with it. According to the character design, our little girl has one hair band attached to the end of each of her braids. However, there is no way for us to attach these hair bands to an alembic cache properly. Thus, I took the braids as solid mesh and applied bone-chain simulation on them.
After consulting with our faculty instructors as well as our cultural advisor, we removed a lot of the dangling decorations on our protagonist. The main parts that need to be simulated on her is her long scarf and her dress.
This is a WIP screenshot of painting the dress with Unreal cloth paint brush. We were not very satisfied with the result though - doing everything in real-time results in us having less artistic control during the cloth simulation. Although Unreal has exposed a number of parameters for us to adjust the physics material of the cloth, we still lack direct ways to interact with the cloth during simulation. Also, the collision detection was limited to simple primitives like sphere, box, cylinders and such. This results in aliasing in collision detection between the character's thighs and the cloth while she is making some extreme leg gestures.
In conclusion, UE's cloth might work well in scenarios that needs the cloth to react in real-time, but for a pre-rendered animation project like us, we probably want to look at techniques such as nCloth in Maya in future.
As for her scarf, we could not apply UE's cloth because it has all the bronze decorations on it, which is rather solid. So we only applied UE cloth on the dangling strings of her scarf, but use bone-chain fragments for each section of her scarf with a bronze decoration. Below is an overview of how the clothing physics performs on our character.
I started by researching on techniques that can be used in Unreal to do fluid simulation. The first thing comes to my mind is Nvidia's Flex package, which provides a particle based physics simulation for game engines. It can simulate fluid, cloth and a number of cool effects in Unreal. However, it doesn't support Unreal 4.24, which is the version that the team has locked down with. Thus, I had to look for ways to do the simulation outside Unreal, bake it as a cache file, and import it to our project. I experimented a bit with Blender, but I was not very satisfied with its level of control. The software I ended up using is Houdini.
Meanwhile, I began researching on rain drop physics and finding reference videos, especially rains in deserts. For the raindrops hitting on ground, I found this reference video on youtube, which is a slow-motion video of a droplet hitting on a sandy surface.
The sand particles are caught by the droplet's surface tension, and together, they strengthened the surface tension force, forming a bouncy sphere. As time goes by, more water is absorbed by sand, the "sand-droplet sphere" will start to break down. With this idea in mind, I came up with an effect that looks like this:
However, as we further develop our world building, I realized that our story is happening in a desert whose environment is similar to Arizona. The ground surface would be cracked soil instead of sand. As a result, the fluid would be absorbed directly into the soil. This is the adjusted version:
Although the team is satisfied with this droplet, but we discovered that placing a lot of alembic cache in the scene is time consuming and performance heavy, we ended up using particle system for massive raindrops hitting the ground, while keeping only the hero close-up shots using alembic cache.
Below are some WIPs in Houdini.
The shot when our protagonist raised her hand to feel the rain. Massive raindrops in background is made by the team's VFX artist with Unreal particle system.