CR Devil May Cry 4 – FX Tasks List

CR Devil May Cry 4 (CRデビルメイクライ4)

My last Japanese 3DCG project during my time at Flystudio Malaysia before Digital Frontier JP parted ways, it was a fun ride for me as I got to explore many new opportunities such as creating a reusable FX assets for other artists and my first foray in writing lots of scripts for pipeline automation!

Sure enough this project was the last fun project before I switch industry to work as a Python developer professionally for the financial risk technology sector as of this article posting.

As mentioned before for GANTZ: O and Infini-T Force, my duties include both the FX assets creation/usage and also compositing the final FX looks in After Effects.

Sadly I don’t have a way to share a demoreel for this project as majority of the cuts are really short (between 1 to 10 secs). For now, enjoy the promotional video that are available on YouTube!

Not to forget the FX tasks sheet of the available shots that I’ve work on in the trailer as PDF which you can download here.

FX Tasks

Sanctus’ Devil Aura FX assets:

  • Created from scratch from studying the original DMC4 gameplay footage.
  • Uses Maya nParticle and render using in-house custom renderer for majority of the assigned shots.
  • Uses Vray Lights for FX lighting that requires interaction with CHBG (Characters and Backgrounds) assets.
  • Setup lighting and particle rig that are artist driven for others to use.
  • Create look presets for compositing in After Effects.

Uses ready-made FX assets for the following shots:

  • Nero’s Devil Aura/Sparks
  • Vergil’s Devil Aura
  • Gun Muzzle Flash
  • Bullet Trail
  • Smoke Trail
  • Wing Trail
  • Feathers
  • Ice Debris
  • Sparks
  • Sword Aura and Trail

Written MEL Scripts to automate the following tasks:

  • One click button that configure the render settings (draft and beauty) based on project specifications.
  • Referencing latest camera version from the server.
  • Select objects based on a list for FBX Geo Cache export from Maya 2014 to Maya 2013 (for use with in-house custom renderer).
  • Create render layers that separate FX, CH and BG based on the assets’ naming convention.
  • Bake CH animation as Alembic cache for quicker FX lighting iteration using Maya 2014 GPU Cache.
  • Auto-align particle emitters to relevant CH joints.
  • Various Vray render scripts for compositing.

Written After Effects JSX scripts for:

  • Exporting QuickTime movie using the current project filename as prefix for WIP delivery.
  • Clean up project for delivery to Digital Frontier JP:
    • Remove unused effects/masks.
    • Remove repeat/unused footage.
    • Apply specific effects based on comp name.

Random Food for Thought

  1. The in-house custom renderer are pretty amazing as it renders really fast! The render quality can’t rival a properly setup Vray materials and lighting but when one can quickly output a very heavy particles scene at 3-5fps (with the average of 10-20fps for most shots) at HD resolution, it was a great productivity booster.
  2. I can’t remember the number of shots that I’ve worked on but I’m guessing around 25-30 shots within 8 months.
  3. Lots of masking during compositing! A necessary evil when the deadline for most shots are fast approaching to remove unwanted FX based on director’s feedback.
  4. Watching Devil May Cry 5 E3 2018 announcement trailer which runs at real-time 60fps using the RE Engine blew me away since the render time for the CHBG preview render average 3-10 mins per frame on an Intel i7 3930K which has six cores with hyper-threading clocked at 3.2GHz!

But Where’s My Monthly Dosage of Nuke Tips?

I’m afraid I got distracted with work and drawing since early October!

If you have any questions about my work on this project, let me know in the comment section below.

Upcoming Plan for Q4 2018

Upcoming Plan for Q4 2018

It’s been four months since I started my current job as a Software Engineer in the Financial Risk Tech industry and neglected the site… so a quick update for my upcoming plan for Q4 2018!

  1. I’m running out of idea for useful Nuke Tips that has already covered in prior posts or by other Good Samaritan in other websites/forums.
  2. Expect more Python (or MaxScript/MEL Script) tutorials to replace Nuke Tips but relevant for 3DCG VFX artist.
  3. General production pipeline articles for a single artist focusing on Project DQ .

What I’m Working on Now?

Mostly backend stuff writing in Python using the Django REST framework as my day to day job. Occasionally graphic designs work like name cards, banners, and stuff that benefited from my professional 3DCG experience!

Actual job aside, I’m prepping assets for cloth simulations practice in Houdini and maybe revisit Project DQ to brush up on the non-FX assets. Once in a while I’m also working on my very own Assets Browser toolset written in Python which you can follow the development progress over at GitHub.

Also not to forget drawing a Halloween fanart for the month of October!

Finally It’s Here!

Well the last commercial 3DCG project that I’ve work on before my previous workplace change ownership aka CRデビルメイクライ4 (CR Devil May Cry 4).

I’ll be writing up on a summary of the FX tasks for this project in a future post.

This project also marks the beginning of my scripting journey to boost my work productivity in Maya, 3ds Max and After Effects!

Naturally this leads me into the chasm of coding hell and while I see myself as a complete coding beginner (so says the person who’s currently working full time writing Python codes), it makes me wonder what will happen if I were to pursue programming courses instead of creative courses for my tertiary education…

Got a Job Offer related to 3DCG VFX?

Short answer, colour me interested! Do reach me over at LinkedIn or through email which you can find at the resume page.

Long answer, I’m still not satisfied with what I’ve done with my two years of work experience and while Project DQ is my way of learning Houdini, it still doesn’t land me a job after applying to several studios… so don’t follow what I’m doing especially to my dear visitors who’re reading this!

Serious answer, I admit I’m still a greenhorn in the 3DCG VFX industry (I used the term 3DCG since that is commonly use in Japan and I haven’t work on live-action project besides TVC during my internship) and seeking to gain more experience from the industry.

In Conclusion

Nonetheless, there is no other way besides hitting the wall until it breaks to land a job for high-end 3DCG or live action VFX industry!

Actually getting to use Nuke in production is secretly my ultimate goal. The irony of learning Nuke way back in 2010 and ended up using After Effects (and Shake) for production work (not to downplay AE but this site is known for Nuke Tips).

Now if you’ll excuse me so I can get back to modelling in 3ds Max when I should using Maya for modelling! Maybe in the near future…

Nuke Tips – Retrieve File Path List for Read Nodes

Retrieving File Path List for Read Nodes for Anyone

This is more for folks who need to know which renders or footages that they are currently using in their Nuke script.

To run the Python script, simply copy and paste the following codes into the Script Editor panel and execute it!

…fine I’ll show you a step-by-step to ensure it works for you (basically a pet peeve of mine when others wrote scripts but never document a simple idiot-proof guide that actually works).

  1. Launch Nuke.
  2. Copy the script from below (or from my GitHub repo).
  3. Paste it into the Script Editor panel.
  4. Select all the codes and press Ctrl + Enter for Win/Linux or Cmd + Return for Mac.
  5. ???
  6. Profit!


# Return filepath list for Read nodes in the current Nuke script
# Huey Yeng, 2018,
"""Return filepath list for Read nodes.

Return every Read nodes' filepath. Useful for project cleanup to identify
files that are currently being use in the current script.

List of valid filepaths.

* Include ReadGeo nodes

import nuke

nodes = nuke.allNodes('Read') # Grab all nodes with the class 'Read'. Valid classes include 'Write', 'ReadGeo', etc
source_list = [] # Initialised empty list

for node in nodes:
path = node["file"].value() # Retrieve value from "file" attribute
name = (path.split("/"))[-1] # Access the last value in array for path after splitting it with "/" delimiter
source_list.append(name) # Add/append name into source_list

result = "\nList of Read nodes:\n"

for name in sorted(source_list):

Expected Result

# A typical sample from Project DQ
# Result:
List of Read nodes:


What Should I Do Next?

You can use the result to help identify the read nodes in your script so you can safely move or delete any unused renders from your storage.

Basically there are endless opportunity like discovering the wonder of Python scripting for Nuke, bragging rights to your fellow colleagues or classmates that you have succeeded in running a custom Python script in Nuke and so on!