top of page
  • zarahnajmi

Avatar Shot Recreation Week 6: Prettying Things

Hello again! I am now on week 6 of my capstone project and things have been flying by! My focus this week is slightly different. I'm going to be addressing whatever notes Professor Lim gave me during our previously weekly, but apart from that I would like to put the majority of focus into my Samson 3D model as well as creating the procedural islands for the background of my shot.


Working on the Hi-Res Model of the Samson

Most of my focus this week is going into the 3D model. Let's get to it!


I started by making a few more small tweaks to my proxy before jumping in. I messed around a bit with mesh flows and building shapes in the previous weeks, but I think I was rushing too much which is why things weren't coming out as I liked. So, I'm starting fresh.


I'm going to start my creating the main high-resolution shapes without worrying about holding edges at the moment. A lot of the times when modeling I will pick one part or area at a time to focus on and complete to it's entirety (holding edges, details and all) before moving on to the next piece. However, such a workflow has proved inefficient in the past, so I'm trying to force myself to stop hyperfixating on only one area at a time. I'll be working in passes for this project. First pass, built the high-resolution geometry. It's always good practice to keep geometry separated at this point rather than trying to build everything from one mesh. Then all the pieces can be connected. Second pass is connecting parts and adding holding edges. Third pass is details. Of course it takes more fine tuning but that's the gist of it.


So, for my first pass, I'm going to start with the rotors. Looking at the reference, I can identify the separate parts that I'll have to build.



I can also separate the outer ring into sectors of 12 (dotted lines mark the seams).


I started by lining up a cylinder with the proxy and scaling and rotating it to fit. Then, I created an empty and used a "Transform Attribute Values" operation to get it to match the rotation and translation. This acts as a transformations guide so I can work on modeling the component at world transforms (which is so much easier than modeling directly on a tilted object), and then once the piece is done I can transfer transformation values from the guide to my geometry.



So now, I'm just gonna work at the rotor model. Remember, I'm keeping it relatively simple for this first pass. I don't want to get stuck hyperfixating on details.



The nice thing about these rotors is that the parts are almost completely modular. I can model a 1/12 slice of it then just duplicate that around.


Also, I like to have a folder called "BACKUPS". This is where I may save out pieces of geometry before I start making major changes to mesh flow and the like. Having this allows me to easily backtrack or start fresh if an object becomes too messy or if I want to "reload checkpoint", if you will.


Moving on to the components that connect the rotors to the main body. I'll start with the simplest piece, which is the once at the very center. It's just a box with a slightly rounded top and some bevels. After that's out of the way, the side pieces provide a bit more of a challenge. It's a cube with some extrusions again, but also sports several cutouts as well as a rounded shape--a slice of a sphere--sticking up from the top.



You can see in this drawover I've also started considering mesh flows that will be needed for this component. Some parts, such as the cutout where the vent in from attaches to the object, I can get away with doing "stick ons" which I'll demonstrate when I get to. Also, I won't need a translation guide for this piece since it doesn't really have much rotation, so I can model it in place. I also revisited Andrew Chan's Behance post on building the helicopter prop for the film itself, since it offers some better shots of these pieces.


A couple other things to keep in mind (and I apologize if this post seems to be going all over the place, I word vomit 😅):

I'm done going to be working on too may of the really fine details, as those kinds of things can be done using normal maps in the surfacing stage. Now while I don't plan to UV unwrap and surface my model (unless I end up with extra time to, I'll just be using Houdini's procedural surfacing tools), it makes it much easier on people later in the pipeline who are going to be unwrapping your model to kip things relatively simple. That's also why it's good to try breaking up a large model into as many pieces as possible instead of just one large mesh. It's easier on the modeler as well as the the surfacing artists.


Here's the final of the rotor connectors:



I wish that I had gotten a little further with the model this week, but progress is progress I suppose. Since I'm anxious to move on to the floating islands now, I'll call a stopping point here and I'll get started on the main body next week!


Creating Procedural Islands

This part was fun.

I'll admit I got really in the zone at this point and forgot to write stuff down as I went so I'll just get into a breakdown of my final process.


Now, a lot of this was following this video recommended to me by Professor Lim. He goes a little fast in his explanation but this video was ultimately super helpful!


Basically, the entire process is done using volume noises. I started off with the island at the center of the shot, adding a poly bevel then a subdivision of level 1 to smooth things a bit. Next, I used a remesh to spread some uniform polygons over my object. I prefer this over multiple subdivisions since that would add too many polygons in tighter areas and less in flatter areas with less starting geometry, which isn't what I wanted. I used an edge length of 5 since these islands are so massive. After that, a mountain node with a high amplitude and element size to add some initial noise.


Next, I used a VDB from polygons node to create a distance VDB with "density" as the field.


Finally, I added a volume VOP, which is where all the magic happens.


Now, in really simple terms, all that's needed to be done in here is to create some layers of uniform noise to the P value, add them to the density value, then output the result.

Now, here's my VOP network for the center island. Let's break it down:


I have four layers of noise here.


Layer 1: Large, uniform noise

The first layer was just adding some more defined overall noise, like the mountain node from earlier. I started by adding some turbulent noise to P and adding that to the initial P as a base. This adds a smaller layer of noise to the main noise. Then, I plugged in the sum into the "pos" input on a uniform noise node then just adjusted the frequency values and noise type to my liking. This is the aforementioned "main noise". The best part of this process is honestly just messing around with numbers to find the look that suits your needs best.


On volume noise, the lower the frequency, the greater the noise patterns. It's like the inverse of element size in SOP noise, in which a larger value = larger patten. Remember that here is the opposite.


The biggest challenge for me here was that since my islands are so massive, I had to reduce the frequency significantly to get good results. Something like 0.001. This became a bit of a problem in layer 4. I would be careful if you're using this method for something like a mountain (although, there's probably a solution, I just haven't tried to find it since I ultimately didn't need it).


Layer 2: Smaller uniform noise

For this next layer, it was much of the same (actually, pretty much all of these layers are the same setup copy-pasted with just different numbers)


Instead of a turbulent noise node for my base noise here, I used another uniform noise. For the main noise, I used higher frequencies to get a smaller noise pattern.


After this, a fit range node is added. This is a really interesting trick shown in the video where increasing the "source min" in the ramp can add deeper cuts in the mesh, creating distinct cracks in the rock face. Adding to the "destination max" value can enhance this effect further. I kept my changes a bit more subtle, but it still made an impact.


Layer 3: Vertical Chunks

Next, I wanted to add some large vertical layers in my island. I started with the turbulence + uniform noise setup, then in my uniform noise made it so that the y frequency was higher than the x and z frequencies. This meant less noise going up and down and more going from the sides. This gave the look of vertical cracks. I turned the overall frequencies up more to make my pattern size very large, giving the impression of large vertical chunks of rock taking up the whole island. In the fit range node, I simply added more to the destination max to make these chunks pop out further.


Now at this point, I was starting to notice holes in my volume. To solve this, I jumped back up to my VDB from polygons node and simply increased the exterior and interior band values. This acts like padding for your volume. This works better if you have "Use World Space for Band" checked on.


Layer 4: Horizontal Cuts

Finally, some horizontal cuts. This was literally the same process as layer 3, but this time with the y frequency being higher than the x and z frequencies. This is where the "less frequency = larger patterns" problem came in. I wanted to have my large horizontal cracks be farther away from eachother vertically, however at one point the node just would't let me decrease the frequency further. I stopped at a y frequency of 0.00001. Despite this, the results were still pretty good.


I also added a second uniform noise together with the main one, this one with higher frequencies over all. This is because I wanted some shallower, smaller horizontal patterning to go across the rocks alongside the larger chunks. Adjusting the fit range after the noise helped me adjust how shallow I wanted it.


And Finally...

At the end, all 4 layers are added together with the volume density to give the final output.


I wanted to add even more noise layers, but at this point my PC was starting to get upset with me. Besides, when I get to adding textures, there's always normal maps!


When the volume VOP setup is finished, the volume is simply converted back to polygons.


When all was said and done, I simply copy pasted the entire setup to the other islands in the shot, adjusting values in each layer or even deleting the ones I felt weren't needed on a particular island.



Now, this is just a start, and I'll be continuing to research different ways of creating procedural rock cliffs and implementing them into what I have.


Addressing Last Week's FX Notes

Now, let's get into VFX. I won't be able to cover all of the notes given last week since most of my time went into the helicopter and islands, but I'll get to where I can.


Slow Motion FX

So the most important point of feedback I received was that my shot does not feel like a slow motion shot. Even when turning down my timescale, flame movements look too fast, especially near the source. There could be a couple reasons for this, but my professor suggested that I may be overcompensating in some of my noise or solver settings to get my pyro to look a certain way. So, his advice to me was to turn the timescale back to 1 on all my pyro effects, then work on getting a realistic look in real-time before turning on slow motion again. So, that's exactly what I'll do.


My professor was absolutely right. Things look wayyy fast haha. Although, it looks to be more on the flame elements than the smoke, though I'll be adjusting them both.



Tweaking my main pyro flames though, it seems that there may be another reason for the the speediness, since even after turning off all my pyro noise, things seem to be moving too fast. The only other noise acting on this element is velocity noise however, so I turned down the velocity multiplier in my pyro solver (I had it up to 50 originally, since that was needed for the smoke element, but apparently not as much for the fire). Turning it down to something like 5 helped a little, and I turned up my turbulence (and its swirl size) again to break up some of the resulting uniformity again.



...Well the timing is better, but the shaping is completely destroyed.


After clicking through nodes and trying to find the solution to this, I came to a realization. What if part of this is issue related to how I set up for the shader? You see, in my pyro bake mode I had set the fire color volume attribute to "density", as setting it to flame or temperature was blowing out the flames too much. However, in my pyro solver, I had set the dissipation value, which affects density, to 0.99. Not only would this be affecting my shader, but also likely the shaping of my flames. The reason I put 0.99 is because you don't really need a density attribute to create fire, temperature and flame are enough, but not having density tends to break the render, if you recall my first couple weeks.


So, I created a new pyro solver, set the velocity scale back up high, and added a small amount of turbulence and viscosity (and a touch of disturbance, but I wanted my flames to be relatively smooth). This time, dissipation was set to 0.5. And somehow, this seemed to fix things! My flames are looking much better now. I'm not entirely sure if the dissipation was 100% the issue, it could have been a number of factors in my original solver settings really, and I do plan to look into that further in my own time.



Adding Collisions

The next area of feedback was pyro collisions, which are important for my main pyro elements. I wasn't sure if I had set up collisions properly since I couldn't tell in my render if they were even happening. So, my professor gave me a demonstration of how I can add collision geometry and visualize collision guides to know if said geometry is being read by the solver.


To start, I'll add in my collision geometry. Since my helicopter is not deforming as of yet, I can simply use the static collisions shelf tool to quickly turn it into a collision VDB. (It's good practice to break this into a copy of the main geometry node that is used for collisions, rather than doing everything in a single space).


Once that's done, I can simply use an object merge to plug it into the second input of the pyro solver, with collision type set to "Volume". To visualize, you can simply go to the "Fields" tab under the solver and select "Collisions" in the guides dropdown at the top.


However, my solver doesn't seem to be reading my collision object. I spend some time troubleshooting and trying different settings, but nothing seems to be happening. Unfortunately, I might just have to get some more help from my professor.


More Smoke

So, I'm going to add another smoke element to to my scene. It's essentially a copy of the main smoke effect but I wanted to produce some smoke that came a little lower to fill up more of the screen. So, I used an Attribute Adjust Vector to point my velocities more downwards, and I lowered the temperature dramatically (because cooler air rises less). This second bit also had the effect of eliminating the flames from my bake shader as the temperature got too low, but I'm not too worried about that as I'll be placing this smoke behind the main one in comp. Unfortunately, the smoke didn't fall low enough to my liking, and it kept rising too high no matter what I tweaked. Going too extreme on the velocity y value was messing with the look, so ultimately I decided to just increase the force of gravity on the pyro solver to force my smoke to fall lower. This worked, however I'm hoping for this to be only a temporary solution as according to my professor messing with gravity is not the best practice. I also keyed its density and flame values to decrease to 0 near the end, as it's not needed against the primary smoke then.



Missile Trail

And again with this one :/


Before I got into figuring out volumes, I wanted to first edit the shaping of my trail a bit. Remember how I wanted to add more noise to the smoothness of the trail to better match the reference? I decided to do that using adjust vector on the P attribute. I wanted to adjust using a ramp by the age attribute, so that there is more noise on the older particles. However, attribute adjust vector and attribute noise don't seem to let you create a custom ramp by attribute. So, I took a different approach. I created an attribute adjust float node and made a new attribute called "p_noise" that I was able to ramp by age. Then, in the attribute adjust vector, I'm able to adjust noise amplitude on P by my p_noise attribute. I had to break my noises up into two, one for the y direction and one for xy, since I needed a little more on the latter.



For the volumes itself, rather than using copy to points, I attempted either a volume rasterize or a VDB from particles. Neither were giving me a look I wanted and I wasn't sure what to adjust to get my desired look. Looks like this will be held off for another week then.


Admittedly, I've been prioritizing this particular element much less than everything else in my scene. I'm not happy about it, but I have one more week until spring break comes around and I'm really hoping to finally be over this hurdle by then.


Rendering

Nothing much to say here. The rendering process is of course getting longer and longer as the weeks go by, but otherwise going smoothly.


Fixing ACES in Nuke

Now, recall that last week the colors in my render looked really off? That's because the ACES color space was not correctly set up in Nuke. I had found several videos to help me crack this issue, but I was having little luck.


Eventually I had to get some help from my friend Sydney, who has previous experience with ACES (check out her website here). Turns out the main issue was not having the correct input and output transformation settings in the read and write nodes. Correcting those was the key.


Here is my final render for this week. I was asked by my professor to place a person in the helicopter to show the scale is correct.



4 views0 comments

Kommentare


bottom of page