Energy Drink Commercial – 16 – Breakdown
November 30, 2018
I will be going over the ice growing effect for the majority of this breakdown, as it was a completely unique challenge and effect.
Ice has wildly varying behaviors, from extremely crystalline to organic smooth spires. Since this was magic ice appearing across a metal can, I chose what would best fit the commercial. I wanted something that was relatively smooth as it would allow you to see through and to the surface of the can, allowing the viewer to have a clear connection to the can and its logo.
This was the reference I mainly used. A lot of this ice would be mainly formed as small droplets of water dripped down or onto specific spots building up over time like stalactites or stalagmites.
Using the Find Shortest Path node I was able to create a very straightforward procedural growth with some varying weight amounts. Using this black and white surface growth value I just run it through some noise to offset the points along their normals and have my growth. Convert to VDB and back again to get some smooth geometry.
I take the basic surface growth and time shift it back from itself and compare the two values to create a thin band of growth across the can. This allows me to auto shut on and off any amount of icicle growth. I scatter a few points across the surface and run it through a foreachloop that looks like this:
Basically how it would work is this: From a single point, scatter a few points around for some extra small seed points around the base to make each icicle instance just a little wobbly and unique. Snap them to the surface of the can. Set a distance multiplier that compares the point to the original starting seed points location and normalizes that distance from 0-1 so that the further away the point is from the center we have a controllable value to adjust different parameters like size, direction, and magnitude. This allows for a bunch of customization later on that allows a ton of creativity and and flexibility. Then a small amount of randomization for good measure.
I then rotate the normals of the surrounding points outwards based on the original seed point’s normal, so that the further the point is, the more it flares outwards. You can see the code for that above. This was one of the first significant use of quaternions for me as it was practically the only way of doing this procedural rotation very simply in VEX.
The next foreach loop does practically the same thing as before, but then creates lines for each scattered point pointed in the direction of its normal and a length based on its magnitude. Since all of the normal attribute values should have been handled with the previous wrangles, it is very straightforward just adding the normal to the position with a multiplier.
Now that we have these, I convert them into a vel field and start to solve:
The solver is extremely simple, since the vel field automatically shuts itself on and off based on our surface growth from earlier, all we really need to do is advect our points out and surface those.
A very simple solver, all that is happening is we are scattering points on the surface on the can around those initial seed points and each frame we merge them with the previous frames points and then just sample our vel field and advect those points out, all of the work is done in the initial setups.
From here I surface the points and combine that geometry to the procedural surface growth.
The bubbles were fairly simple, I scatter a bunch of points in the ice growths bounding box, use the ice growth mesh to select which points are eligible, and state a bit of logic to control its pscale based on how far away from the surface it is. This allows for the bubbles to have a size of 0 at the surface and grow bigger as the surface passes them. Its subtle, but worth it.
The minpos() function is so useful.
I just took these bubbles and booleaned them out of the growth mesh. The last little touch I wanted for the ice was typically as ice forms, it is from water with plenty of minerals and other impurities in it. This is what makes ice cloudy on the inside, which can be seen in practically all ice. To mimic this all I did was take the ice growth mesh, convert it to a vdb, erode it down, and render that inside, and it made the ice look awesome.
This project was a ton of fun, and although there were plenty of other effects in it, this one was definitely the most challenging and most fun to creatively come up with solutions for!