“Candle on the Water”

For this shot I wanted to create something that represents hope during trying times. Despite being surrounded by water, the little candle burns on. I used Houdini and Karma to create an render this project, and had a great time diving deep into FLIP to create the ocean shore. I created a custom particle-based whitewater solver to get the intense feeling of the waves lapping up onto the bottle I was looking for. The candle was build using FLIP to give it a melted look. This project really pushed me to learn how to art direct a larger simulation by modifying things like viscosity, and custom velocity blending and fields to ensure the feeling of proper scale and intensity.

Responsible for: All aspects. Inspired by a painting by Daniel Conway

Software: Houdini, Karma, Nuke, and DaVinci Resolve.

Timing! In order to support the story of the shot, that waves crashing up on the bottle had to feel purposeful and relentless without being chaotic. So to be able to art direct the timing, I used a block-out mesh to guide the velocities of the FLIP sim which enabled me to control the motion of the simulation.

The scale of the scene was also important since the camera was very close up, if the water had too much spray or was too slow, the bottle began to feel larger than what it needed to be. To control this, I ended up increasing the viscosity based on velocity to pull together the splashing particles that were wanting to break up, as well as multiplied particle velocities together to smooth out the motion.

Whitewater: The default Houdini whitewater solver was too choatic and had too much spray for the relentless feel and timing the shot needed, so I ended up doing some research and creating a custom particle-based whitewater solver to get the behavior I was after!

Bubbles! Being such a close up shot meant bubbles were called for! I wanted to add some detail to them without creating too much visual noise. I ended up using vellum grains to advect and simulate spheres inside the whitewater surface that interacted and collided. Then with a sop solver and some handy VEX, created a solver that would calculate the bubbles age, give them a random lifespan, and pop them at the end of that life if they were outside of the water surface area. Right before popping, the bubbles grew a small fraction to add anticipation to the popping so that it didn’t feel like a mistake, and real-world bubbles also exhibit this behavior as the bubbles bursts! The solver also allowed the bubbles to reform after a certain amount of frames if the points were inside of the water surface so that I didn’t consistently lose mass as the shot progressed.

Another closeup detail called for was sand swirling along the shoreline. I ended up going very light on this element, as I didn’t want the water to appear dirty or noisy, but adding the subtlest amount of grains really added depth to the water!

Shoreline: Can’t have a dry ocean! I used a solver to calculate a wet map over the areas that were touched by the water. I added some spread to this to create the feeling of the water soaking into the sand as it gets absorbed. This was then rendered as a duplicated version of the shore with IOR set to 1, thus invisible. But mapping the wetness attribute to the IOR meant that as the surface got wet and IOR went up to 1.3, this darker and more reflective geometry was revealed only in those areas. The result is subtle but added a lot!

Another element I added was a procedural noise based degradation of the shore surface to account for the fact that as the waves pull back, it displaces the sand grains, especially around and under objects. This was fun to dive into, because in order to properly understand this I had to research how sand and waves interact which was a fascinating side quest!

Candle: Our hero asset, I wanted the candle to feel as if it was slowly melting, but burning steadily. I ended up running 3 layers of FLIP to melt the candle base, add drips, and melt everything together then meshed that to result in a melting candle. For the flame, I wanted a small yet constant flame, representing the candle’s determination. And for the smoke, to get a swirly feel, I created a custom velocity and temperature field which were sourced before density, so that they would pull the smoke up and eliminate any billowing or mushrooming that happens with pyro as temperatures interact.