top of page
  • zarahnajmi

Avatar VFX Shot Recreation Week 14 - The Final Writeup

Finally made it! I have reached the end of this great journey at last. It's been a long and arduous, fun and learning-filled journey for sure. For this final post, I'll start of with the final render, then I'll go into each of the elements and break down their processes.


The Render



Full Render
With Reference & Contact Sheets

And here it is! Honestly, I never thought I'd come this far. Looking back at my first couple weeks, then at my final, I have to say I'm pretty happy. Could it be better? Absolutely. I definitely went through periods where I felt like I was learning nothing or where my project felt like it was only going downhill. And I still feel like I need a little more time to really push things further. But ultimately, I'm glad I learned what I did, and got where I did.


Now, let me break everything down...

I'll start with the assets and environment design, then laying out and animating the scene, then move to the VFX elements in order of appearance.



The Samson Helicopter

To be honest...my favorite part of the shot, despite it being covered up by smoke and flames two-thirds of the time :) I've always enjoyed 3D modeling quite a bit, and the reason I chose to model the Samson by hand rather than simply find another model online was because I wanted my capstone to allow me to add to both my VFX and 3D modeling portfolios.


The Samson was modeled entirely in Autodesk Maya, and textured through Adobe Substance Painter (UVs were created using Substance's auto-UV tool, for the sake of time. This is not a surfacing/texturing portfolio piece).


As I always do for any 3D modeling piece, I started by creating a proxy model of the Samson. This is a very simple blockout that allows me to get a sense of scale and proportion. Luckily, I could find the exact dimensions of the Samson Helicopter on the internet, so I also created a bounding box cube to ensure my model is sized correctly.


After the proxy is complete, I can start building each part in detail. This is for the most part pretty easy. I tend to add a bit of detail to my proxies as well, to the point where I can easily just copy a piece straight off the proxy and just edit it further.


The most difficult element by far though, was the cockpit. To cut complex shapes out a smooth, hard-surface piece is quite difficult when you're trying to maintain proper edge flow and a smooth surface finish.


This was made much easier with the make-live tool, though. I could create a solid cockpit piece with proper smoothness, then use make-live with quad-draw to manually draw on the topology for the windows. I drafted out what my edge flow might look like in Procreate and used that as my guide. The results were very fruitful.


After the large shapes were finished, I could go in and add in the little details, like the blades on the turbines and little parts and pieces on the landing skids.


Regarding simulation, most of the work was done using the proxy model, with the high-res model imported at the end for proper collisions and mattes.


Here is a turntable of the final model:



When I imported the high-resolution model into the scene, I also animated the spinning blades of the rotors. I had also been planning to animate the tilt of the large rings holding said blades, but that would have had a larger impact on time as I'd have had to resimulate the main pyro to accommodate this. The velocity field's setup, in particular, would have to be done completely differently. Where originally I had simply parented a torus to the helicopter as my base shape then lined it up with the rotors, I would have had to take a more procedural approach if I wanted to match new animation, one I unfortunately did not have time to figure out. (I could have just used keyframes, yes, but consider in an actual pipeline that the animation of a shot given to a VFX artist could be edited at any time, and keyframing things ultimately would be a much less efficient process)


Hopefully though, I might be able to implement this in the future should I revisit this shot.


The Dragon Gunship and the Missile

A similar story for these two models as above. However, I didn't go further than the proxy stage for these two, since they're both background elements that show up for at most two seconds.


The missile of course was super easy. A tube with wings.



The Dragon was more of a challenge. Even though I was just doing a quick proxy, I wanted to stay as true to the actual form as I could. The Dragon is such a...strange looking craft though, so it was interesting to try and match its forms. I am hoping one day I can get to properly hi-res modeling it.



Both the Dragon and the missile were shaded using MaterialX Standard Surface, rather than Substance textures.


The Floating Islands (Blockouts)

Before I got into creating the proper procedural floating islands of the Hallelujah Mountains with fun volume noises and such, I created simple blockouts of the islands in Maya. I picked six formations, closest to the foreground and that would give me proper reference points to where each asset in the shot would go. These blockouts were very rough, and would later act as a base mesh for the proper procedural floating islands.


Laying Out and Animating the Shot

This was one of the most important parts, I believe, as the animation would determine the final look of the shot. Particularly, the velocities and positions of the Samson as it moved through the sky would determine a lot of how my final pyro FX would look.


The most difficult part of this by far was getting the correct scale on the floating islands. They were way bigger than I had initially expected, and even now in hindsight I think they might still be too small.


The next most difficult thing was jittery animation. While trying to match up the animation with the moving camera as close to the reference ad possible, a lot of the times I encountered what felt like the helicopter's speed suddenly speeding and slowing down when its animation and that of the camera's failed to line up. I know the mismatch between the helicopter and the camera was the issue, since when I looked at both of their movements by themselves, they looked properly smooth.


But, after lots of trial and error, I finally had a properly animated shot. Now, I could start working on VFX.



Initial Pyro

The first of all the FX in this shot is the initial column of smoke and the bit of fire that lights the helicopter in the beginning of the shot. This was my first real venture into pyro FX and was an incredible learning experience. I say "first real" because I had previously done a little bit of smoke-mist in a shot recreation from the film Interstellar, but I did not spend nearly enough time on in favor of fighting with FLIP simulations 🙃.


Starting with the emitter, I had initially just selected the entire block of helicopter that was on fire and used a pyro source on that. I quickly learned that this wouldn't work, as it was making things look very ugly and blocky. So, I used an attribute paint node to paint much more localized points of emission.



For the pyro itself, I started first with the smoke. I initially wanted to try doing both the smoke and fire together, but quickly realized that they would work better as separate elements. I had to roll back my animation by two seconds to get the smoke column to rise high enough by frame 1. Rather than just have the helicopter sit in one place for those frames, I animated it so that the trail of smoke looks correct, and so I could get the proper velocities.



Regarding the shaping, my Professor Lim mentioned that the smoke from the reference for that particular effect wasn’t very good (2009), so I wasn’t too worried about matching the reference footage perfectly.


Missile Trail

If you'd been reading the early posts on this project you'd recall that this element took a ridiculous amount of time to nail down, though the solution was ultimately quite simple.


I started off by creating a particle simulation emitting from the back of the missile. The particles had a relatively high lifespan and variation since most of the missile trail remains intact while it is visible in the shot. I also added a wind force with a high swirl size so that the trail becomes less smooth as it ages.


The part that stumped me the most was instancing volumes to each of the points. I initially tried using a copy to points with a VDB, but the high number of particles and thus volumes was leading Houdini to quickly crash whenever I tried to render. I also tried volume rasterize particles and messing around with a pyro source and solver, but none of these gave the desired results.


Ultimately, the VDB and copy to points was the correct solution, but not in the way I was going about it. I had been overcomplicating the whole thing by starting with a sphere that I added P noise to, to create smoke puff shapes, then using the VDB from polygon and copying those resulting volumes. Turns out all I needed was simply to simply create a VBD node set to fog and copy that.




Missile Impact Explosion

The explosion that comes after the missile impact is probably my favorite FX in the shot. I started off by studying Houdini's built-in aerial explosion setup before setting up my own.


I started by picking where I wanted my explosion to start from by positioning a sphere (easier to see) then extracting its centroid. A pyro burst source node was connected to that centroid, and then in the pyro burst I could control how I wanted my explosion to be shaped. The result is then plugged into the pyro solver.


A rather simple setup compared to the rest of the elements in this shot, but a good starting point for more complex explosion shots in the future.




Main Pyro

This was by far the most difficult element to work with. The initial setup was similar enough to that of my initial pyro, but the difficulty came with the addition of custom velocity fields.


The emitter was once again painted using attribute paint nodes. The setup (as shown below) is a bit weird though. I started by remeshing the proxy geometry to give me more points to work with (attribute paint only affects point attributes) and then painting on there. I then used a pyro source to scatter source points then transferred the painted emit attribute over. The reason I didn't paint directly on the pyro source was simply because it is much easier to use attribute paint on a solid object rather than a cloud of points.


When I brought in the high resolution model, I realized the shape of the cockpit was different enough to warrant a rework of my emitter. I created pretty much the exact same setup, but I decided to transfer my existing paint from the proxy over to the high-res before going in with the attribute paint to make adjustments. Since it was only the cockpit that was different, I didn't want to repaint any extra data that didn't need to be repainted.



The initial setup for this element is as I said very similar to that of the initial pyro, so I wont dive into it much here. Although, I did have to bump up the velocity scale quite a bit to get the smoke plumes moving more how I wanted, billowing out instead of just shooting back as the helicopter moved forwards.


Creating custom velocities was the hard part. See, the smoke here would definitely be affected by the spinning rotors on the helicopter, resulting in swirling, spinning smoke. So, I needed to create a field of points with velocities that would convey this affect to be sourced into the pyro solver.


In creating the velocity field itself, I started with a base torus that was lined up with the helicopter's rotor. Then, I used a series of VDB and VOPs operations to direct velocities in the direction I wanted. I moved the vectors in a swirling pattern in the direction of the helicopter's rotors, and added a small amount of downwards force as well. Unfortunately, I had started working on this velocity field far to late in the semester to be able to do much more to it. The effect it gave on the smoke was good, but not my favorite. I also had to fight a bit with trying to maintain the slow motion feel of the shot against the high velocities in my velocity field, with limited success. Should I revisit this shot in the future (I probably will), I will prioritize learning more about creating velocity fields and working to properly shape my own.


With the velocity field in place, there was one final touch I needed to make before plugging in all my sources to the solver. Going back to the main setup, I used a geometry mask node to mask away velocities around the rotors, so that velocities from the main setup and from the velocity fields would not interfere with each other.


Finally, I rasterized attributes of both the main source and the velocity field, before merging them and plugging them into the solver. Before rasterizing my velocity field, I renamed the v attribute to v2, so that I did not have duplicate attributes when merging.



Fireballs

This setup made use of the pyro trails path node, which creates realistic ballistic paths for pyro trails emerging from an explosion. For the two larger fireballs, I used these paths to create a source point which I could copy larger spheres to, which would then be set on fire.



Since these fireballs are moving so quickly, I had a lot of trouble with stepping. Stepping is caused by super fast moving sources. It can make a smooth pyro trail look more like a broken dotted line.


Unfortunately, fixing the stepping led to me needing to sacrifice some of the nice shaping that I had around weeks 10 and 11, and as of right now I am not all that satisfied with how this element turned out. I will be going back to it in the future to try and get back some of that shaping while avoiding stepping and other tech problems.


Pyro Trails

The pyro trails were set up pretty much identically to the fireballs, although I needed separate pyro trail path sources to create a wider variation in their timings. I had pyro trails emitting from three different positions at different times, which I then merged all together.



Again, time and also hardware limitations left me feeling unsatisfied with this element, so I will revisit it once again.


The Floating Islands but Cooler

I'll finish off with the final piece of the environment. Even though I was working on creating procedural islands concurrently with all the VFX elements, this only really got finished near the very end, so here it is.



This setup is a bit of a doozy, but there are four main components.


  1. I used voronoi fracture on the base pieces to create large chunks of rock that are clustered together to create the full island. I used the exploded view node with some VOPs to add variation in their positions in order to get some of those nice cracks and ridges.

  2. A second voronoi fracture, this time smaller for more detail.

  3. This was the fun part. I converted all of the mesh to VDBs and made use of Volume VOPs to add finer noise and details. For this part, since the islands were so massive, I had to shrink them down before applying VDB modifications, as otherwise I just couldn't get some of the larger-scale details I wanted.

  4. A tiny bit of additional volume noise on the fully-scaled islands, to brink back some high-resolution detail.


These above steps and whatever settings within the nodes were modified to accommodate each of the different islands in the shot.


Rendering

Not much to say about rendering other than it took a very long time. And also that I made use of the ACES color space in order to allow more color details in my fire to show.


(And a little thank you note to my brother for letting me use his much more powerful pc to render some of my passes. Couldn't have done it without him :D)


Compositing

There's still a lot I have to learn about compositing fire. All I have at the moment is just a bit of glow on all the elements, plus some color grading. Depth of field was done with just some background blur.


Uncompleted Elements

Unfortunately, there were also a couple elements that never made it into the shot due to time. I do, however, intend to go back to this shot someday in the future to further expand on these elements (...probably once I get myself a better PC 😅). I've listed these elements in the (tentative) order I'd complete them in.

Floating Island Trees

The reason I put this first is because it actually came very close to completion. I might still be able to get it completed sometime in the next week (in which case this section will be updated), so here's hoping. For the trees, I downloaded a PolyHaven tree asset that I would use copy-to-points to scatter all over the islands. I felt I only needed one tree instead of variants due to the distance of the islands.


Some of the Polyhaven tree assets (and some other nature ones) are weird and don't download correctly if you use .fbx downloads. This is because they were created in Blender using its geometry nodes to scatter leaves across branches, and these instances aren't read by .fbx exports. So, I had to download the .blend file and convert the geometry node instances to meshes, then export the fbx from there.


Once I had the trees imported into Houdini, I assigned their materials in the SOP level then went to scatter them across the islands.


Before scattering, I needed to define where I wanted my trees to be placed. I defined an inclusion and exclusion group through masking. First, I used an attribute VOP to take the dot product between the islands' normals and the vector (0, 1, 0). This let me isolate surfaces of the islands that were facing upwards. I added a fit range node to be able to control the spread of the mask as well.


Next, I used attribute paint nodes to paint in more areas where I wanted trees to be included, as well as areas to completely exclude.


Finally, I blasted all primitives in the exclusion group, and scattered points on what was left. On those scattered points, I used a copy-to-points to add the trees across all the islands. I had to check on the "create packed primitives" button here. Packed primitives create point instances of copied geometry which load much faster.


I added in some randomization to scale, rotation, and color as well.


Unfortunately, I was unable to get materials on packed primitives working properly in Karma, and as such was unable to render the trees. When I figure it out though, they will be there!


Debris Pyro

I wanted to add pieces of actual flaming debris coming off of the helicopter. I had a setup started, but unfortunately never finished it in time for my capstone turn in.


Background Pyro Trails

More, smaller pyro trails further in the background to make the destruction of the helicopter more intense. Right now it just feels like a few tiny pieces of helicopter flew off from the explosion, not that an entire side of the aircraft just got blasted away. I could probably get this element done quickly, and I don't have to worry much about detailing if the trails are so small and far back.


Coverage Smoke

I wasn't able to get my main pyro to cover as much of the screen as shown in the reference without destroying the shaping too much. So, I may go in and add a secondary smoke element behind the first to provide more of this coverage.


Final Thoughts

Honestly, I think I learned a whole lot this semester. Could it have been better? Absolutely. But for the size of my scope and considering this was my first time working with pyro FX, I think I did pretty alright :) I'll probably take a break from this shot for a bit, but I will 100% return to it and continue to improve upon it.

19 views0 comments
bottom of page