Personal Project – Final Animation

Week: 14 – 18 June

With 5 more days until dateline, I decided to give priority on finalising all the shots that I’ve managed to block last week. And if I had more time left, I would then work on the remaining shots. I actually planned to finalise the animation right after doing the blocking last week, but I was very busy with the Indie Film project in preparing the Maya files with road geo and final camera scaling, so that I could send the files to the team members as soon as possible for them to be able to carry out their tasks.

Finalising Character Animation

Back to the personal project, I started with Shot11 again this time as this shot has all the effects in it, so I can reuse all the effect settings that I setup in this shot for another shots.

During the previous blocking process, I intentionally used the constant interpolation so I can focus on the blocking poses and not distracted by the in-between motions. But to finalise the animation, I need to change it to another interpolation first.

Constant interpolation

I selected all the keyframes in the Graph Editor and changed the interpolation to ‘Bezier’.

Bezier interpolation with ‘Automatic’ handle

But with the current ‘Bezier’ interpolation, an ‘Automatic’ handle type was assigned to it which caused the character’s motion to look a bit weird and it keep moving even the character has the same poses in 2 adjacent keyframes because Blender will try to smoothen the curves by averaging its shapes based on the location of the keyframes. It’s like when we add a ‘Subdivision Surface’ modifier to smoothen an object shape, and it use the location of edge loops and topology of the object to average the smooth shape.

Bezier interpolation with ‘Auto Clamped’ handle

To fix this, I changed the handle type to ‘Auto Clamped’ instead of ‘Automatic’. The animation looked better now but a bit more works need to be done. With the new interpolation, I’m now have more controls to change the timing and offset the animation for which parts should move slower or faster by adjusting the keyframes and curves.

I paid attention to each movement in the sequence including the subtle changes to character’s facial expression and animating small details such as the follow through motion of the pistol bag. And since this scene has a slow motion part, I animated the character’s finger pulling the trigger and also the movement for the top part of the gun.

During this proses, I constantly switched between the low-poly and subdivision mode to make sure the final shape doesn’t overlap with other parts or objects

The final curve with some offset animation
Shot11 – Final character animation (no effect)

I then proceeded to finalise the animation for other 4 shots. The process was almost similar with Shot11.

Shot10 (no effect)
Shot09 (no effect)
Shot08 (no effect)
Shot07 (no effect)

Render Properties

Before I proceeded with making the effects, I want to make sure that the render settings are correct first so I can get proper render results especially when I want to test and see how the effects will look in render.

I changed several parameter in the ‘Render Properties’ rollout. I decided to use ‘Cycles’ render engine instead of ‘Eevee’ because I want to have a better glass reflection for the bullet trail effects. I also turned on the ‘Transparent’ and ‘Transparent Glass’ so that the 3D character can be rendered on the footage and I will be able to achieve the glass effect that I want.

Since ‘Cycle’ generally take much longer time to render, I want to optimise it to get faster render but at the same time not sacrificing the quality too much. I reduced the render sampling from the default; 64 to 8 and tried to render a frame. The render was quite fast, about 20 second per frame with 1920 x 1080 resolution, but the result was too grainy and bad.

I countered the grainy image by activating the ‘Denoising’ with ‘OpenImageDenoise’. There are several other denoiser options such as NLM & OptiX, but ‘OpenImageDenoise’ is the fastest to calculate. I tried to render again with 8 sampling and Denoising turned on, and this time the render quality was a bit better but the duration increased to about double.

I didn’t quite satisfied yet so I increased the sampling to 16 and tried to render again. The render took about a minute now but the quality was nice with very minimal grain. I think it matched the background footage which also has a bit of noise.

I then experimented with higher sampling to see if I can still increase the quality with acceptable render time. The render quality was getting better but it took around 2 to 5 minute per frame to render. I also tried higher sampling rate without denoising turned on, but none of the results and time fit with what I want to achieve. So I reduced the sampling back to 16 which I think the soft spot for good quality and acceptable render time.

Early Compositing Setup

Normally, compositing would be done in the last phase. But as I want to make the effects, I need to configure this first, so all assets in the foreground and background layers including the effects can appear on the background footage as I intended.

Foreground and Background Layers

In this project, since Blender has the compositing capability, I decided to do this process directly in Blender instead of using another compositing software such as Adobe After Effects and Nuke. I never done this in Blender before, so I always wanted to try it. The Blender’s compositing is a node-base and after several tries and playing around, I think its very straight forward and easy to understand.

Below was the early version of compositing nodes that I did for the shot to combine the character layer with the background plate.

Compositing nodes to make the character appear on the background plate

I made sure that the ‘Convert Premultiplied’ in Alpha Over nodes were turned on to make the edges of any object in the layer blend smoothly with the background. The compositing nodes will be updated again later as I’m making the effects.

Spark Effect

With all the render settings and basic compositing ready, I proceeded to make the spark, muzzle and bullet effects. I decided to use manual method for all the effects instead of using particle simulation.

For the spark, I used several low-poly spheres that have been modified to an oval shape. I arranged them in several variations of sizes and positions so that they looked a bit random. The spark group was then parented to a dummy object (aka ‘Empty’ in Blender) called ‘Plain Axes’ so I can change its location to anywhere I want, even when the objects in the group have animation.

I then animated the oval shaped spheres to begin from a very small size to big and then small again until they disappear while moving in outward directions. The duration of the spark animation was very short, which is 8 frames only.

I created a new material for the spark with ‘Emission’ node connected to it so it will glow by itself even without lighting. I set the strength to 10.

I updated the previous composition node with 2 ‘Glare’ nodes and attached them to the ‘Composite’ and ‘Viewer’ output to make the emission effect appears in render and also in the viewport preview. I set the quality to ‘High’ and size to maximum 9.

In Shot11, the character will dodge the enemy’s bullets for 3 times and 2 of them required the spark effect. So I duplicated the spark into 2 and placed them at the right place and changed the animation timing as both of them will appear at different time in the scene.

Spark #1 in viewport preview
Spark #1 in render test
Spark #2 in viewport preview
Spark #2 in render test

Bullet Trail Effect

The bullet trail was created from a low-poly cylinder. I modified the object to imitate shape of the trail effects from the Killer Bean and The Matrix.

Low-poly cylinder
Now it’s a bullet trail!

Next I created a bullet model and a new ‘Plain Axes’. I parented the trail model to the bullet, and then parented the bullet to the ‘Plain Axes’ object. This is the same method as I used for the previous spark effect.

Bullet and it’s trail with Array and Subdivision modifier

I applied the ‘Array’ modifier with 10 count to make the trail longer and added the ‘Subdivision’ modifier to the model with level 2 of detail for both viewport and render to smoothen the shape.

I then animated the bullet from off camera towards the character. And since this shot has a slow motion part, I modified the bullet’s animation curve in the Graph Editor to go from fast at the beginning to suddenly moving really slow during the second half of the scene.

Taper modifier

I inserted the ‘Taper’ modifier to the trail model to add a very subtle inflate and deflate motion to the effect. I then modified the curve in the Graph Editor.

For the trail’s final look, I insert a new material and tested various combination of different values of Metallic, Specular, Roughness etc to get the result I wanted. After numerous try an error, I ended up with 0.0 value for almost everything except 0.6 value for IOR and 1.0 for Transmission and Alpha.

Below are some of the render test I did when experimenting with different parameter values.

And here is the final look for the bullet trail effect.

Bullet trail final look in render

Muzzle Flash

Similar to the 2 previous effects, I created the muzzle flash from a primitive object – a low-poly sphere to be exact. I modified the sphere into the shape below and applied a ‘Subdivision’ modifier to smoothen the shape.

I animated the muzzle by manipulating its size and adjusted the animation curve in the Graph Editor for smooth transition from fast to slow motion movement.

Muzzle flash animation curve
Material with high emission in viewport preview

I then applied the same material as the spark effect which has emission on its own.

Muzzle flash final look in render

Final Compositing

Next, I imported the muzzle flash into another shots and noticed there were some visual errors on the muzzle effect when rendered. It’s like the effect was clipped or masked on the character shape.

Muzzle visual error in render

After checking several places, I found the problem came from the layers and the ‘Convert Premultiplied’ in Alpha Over node when compositing the background and foreground layer. So, some tweaks need to be done. The ‘Convert Premultiplied’ don’t work well with object that has glowing effect or soft transparency like the muzzle.

The previous compositing nodes

I can disable the ‘Convert Premultiplied’ to fix the problem with the muzzle, but that would then caused a problem with the character. I need to keep that option active in order to get a smooth alpha blend for the character with the background footage. So I created another scene collection and layer just for the muzzle to separate it in compositing and render.

New collection and layer for the muzzle

In the compositing window, I created a new ‘Render Layer’ node for the Muzzle layer and another ‘Alpha Over’ node without the ‘Convert Premultiplied’. I then combined the old ‘Alpha Over’ node and the Muzzle’s ‘Render Layers’ that I just created to the new ‘Alpha Over’.

This way, all objects and character in the foreground layer will be blended properly with the background using ‘Convert Premultiplied’, while the muzzle will be rendered separately without ‘Convert Premultiplied’.

And below is the result

Fixed!

As a final adjustment to the compositing, I added the ‘Bright/Contrast’ node to the Foreground Render Layers to change the brightness and contrast of the character so that it match with the background footage. I also added ‘Blur’ node to the Background Render Layers with animated Gaussian values to add focus and depth illusion when the character is closer to the camera.

Final compositing nodes

Final Render

I applied the same process and steps to all shots and below are the final render.

Shot07 final render
Shot08 final render
Shot09 final render
Shot10 final render
Shot11 final render

Leave a Reply

Your email address will not be published. Required fields are marked *