tutorial

Using Z-Depth Render passes in Fusion by David Mackenzie

Zdepth

This is question I get on a almost weekly basis, how can I use my Z-Depth pass in fusion. For those of us who have been compositing for some time it is a dead simple thing to do but for those of you who are learning to composite or even just new to Fusion or other node based tools you might find this useful. First off if you are rendering OpenEXR files then chances are your Z-Depth pass will already be in the file which means all you need to do is add a depth blur node to your flow (see below), you can test to see if the Z-Depth pass is already present by clicking in the viewer and hitting "Z" on the keyboard. If you are rendering it as separate file or as a render element then I will show you how to incorporate the channel into your flow below.

Z-Depth Pass A couple quick notes about z-depth passes. First off I want to take a moment to mention that you really should be saving your z-depth passes at a minimum of 16bits per channel the higher the better. Secondly make sure the you have enough range in your z-depth pass, you will want to make sure the all of or most of your scene is visible in the channel. Sticking to those two point you will ensure you have a good amount of "play" in your pass for when it comes time to picking the start and end points of fog etc.

Z Depth pass and Base render
Base render on the left with its zdepth pass on the right Although the z-depth pass is very white is was saved in float as a EXR so there is plenty of range.

The Fusion Comp The fusion comp is very simple. The process I use is the most basic it involves loading your beauty pass then adding a "Channel Booleans" to the flow (make sure the beauty pass is connected to the BG input). Now load your z-depth pass and pipe it into the FG input of the channel booleans.  Select the channel booleans and set the "Red", "Green", "Blue" and "Alpha" channel to "Do Nothing". Now hit the "Aux Channels" tab, click the "Enable Extra Channels" radio button. Once the Auxillary channels are enabled select the z channel and set it to "Luminance FG".

Channel Booleans Setup

That process basically copy's the z-depth pass to the z-channel of your flow which will carried all the way down your comp from this point on. This means that at any point in your comp you can access that Z-Depth information. A couple quick points you can view the Z-Depth channel by clicking in the viewer and hitting "Z" (You can push "C" to get back to colour) if you see a red "X" in the viewer then something has gone wrong as the view is unable to display a Z channel. If you see black you might want to try hitting the "Normalize Luminance" button which is the right most button at the bottom of the viewer, this will normalise the data so it can be viewed generally speaking you will only need to do this if your Z-Depth pass is in floating point, remember to turn it off otherwise your results will vary frame to frame. If you ever leave it on and do a couple hours worth of colour correcting only to realise your output is still being normalised, I guarantee you will only do it once!

Fusion Flow
Notice that teh z-depth loader is the top node that is being piped into the "FG" input of the channel booleans.

To quickly recap, we have copied our Z-Depth pass into the Z Channel of comp so that it can now be accessed. Lets move on and do something useful with it!

Depth Blur There are many nodes inside of fusion that can take advantage of the z-channel. Nine times out of ten everyone wants to use there Z-Depth pass to create a DOF (Depth of Field) effect in post, so thats what we will concentrate on.

Luckily in Fusion this is very easy to do the Depth Blur node is very quick and easy to use and although it does not generate the very best effect allot of the time in can be used to enhance a scene, in any case it is one the building blocks to generate a really nice effect (That might be the focus of another tutorial?).

So lets go ahead and add a Depth Blur node by right clicking in the node view and selecting Add Tool -> Deep Pixel -> Depth Blur.

Fusion Add Depth Blur Screen Capture
Fusion Add Depth Blur node

You can now use the "Pick" focus point tool to set the focus area, you can also use the slider to for finner control.  Most of the controls are pretty straight forward the best way to get your had around them is play with them and check out the results. You can see the results of an example I prepared earlier below. Also try experimenting with the Fog node.

Base render with depth blur and fox applied to it.

If you have any ideas for other 3d or 2d tutorials please let me know here. I hope that helps you out next time you are having trouble with Z-Depth Passes. If you do run into any trouble then post a comment! Happy Compositing!

Maxscript, speed up your workflow by David Mackenzie

Maxscript_Image

Every day I get asked if a can whip up a script for this or a script that etc. More often than not I just walk over to the artist machine and do a very simple type in, maybe a few lines at most and that will solve their problem. Now not that I mind walking to someones desk to help them I thought I might take a second to discuss some ideas about manipulating large numbers of objects quickly, effectively and working on specific object types.  I really believe that scripting can empower artists, many artists shy away from scripting especially when there sitting next to a TD but a simple understanding of some simple scripting ideas can speed up an artists ability to work. I do not intend this to be a introduction to scripting. I just want to show you how you can manipulate objects quickly using simple loops, basic conditional statements and the max script listener.

For Loops

Loops are how we iterate over objects, numbers, arrays etc. I found the best explanation of it in the Maxscript help file, "The for loop iterates through a range of numbers, time values, or a sequenced collection of values, such as an array or object set."

In this example we will be iterating over materials, a specific type of material. There are a number of way one can accomplish this you could simple iterate through sceneMaterials and check to see if each material is the correct class that you want, this however would be slow and unnecessary. Instead we are going to use the getClassInstances function that will return an array of objects of a given type. For exmaple:

getClassInstances Sphere -- This would return an array of every instance of a sphere in the scene. getClassInstances VrayMtl -- This will return an array of every Vray Material in the scene.

It is very simple to use the array returned by getClassInstances() in a loop. for i in (getClassInstances VrayMtl) do(print i) --This will print every Vray Material in the scene

So now that we can iterate a given type of object or "class" we really want to be able to do something with them. An important concept to understand is that when we loop through the returned array each item in the array as we move through it is stored in the variable "i". Consider the following code:

for i in (getClassInstances Sphere) do(i.radius = 100)

That statement will set the radius of every sphere to equal 100. It does this by first collecting them using the getClassInstances() function and "moving" the variable "i" through the array where "i" is used to access the  radius property and set to 100. We could also do something a bit more interesting like set the radius of every sphere to be random. We will use the random function in this example to give us a random integer. for i in (getClassInstances Sphere) do(i.radius = (random 25 100)) Now each sphere will have a random radius between the 25 and 100.

Unless you really wanted to create Spheres with a random radius lets move on and learn how to do something useful.

The Maxscript Listener

Using the listener you are able to record your "actions" so to speak. This is a very easy way to query a property that you may wish to manipulate in a script. For example you might want to turn off trace reflections on all V-Ray Materials. To do this open the max script listener (Maxscript -> Maxscript Listener or hit F11). Once the listener is open go to the Macro Reorder menu and enable the macro recorder.

Open Maxscript Listener Screen Capture

Maxscript Listener Enabled Screen Shot

If you now go and open the Material editor select a V-Ray Material and Turn off Trace reflections. Imediately you should notice that Listener updating, in this example it should read something like:

meditMaterials[1].option_traceReflection = off

In the above piece of code where are interested in everything after the ".", meditMaterials provides access to the materials in the editor (another article for that).

Now using what we learnt in the section covering loops we can now go ahead an change every V-Ray material in the scene:for i in (getClassInstances VrayMtl) do(i.option_traceReflection = false)

How easy was that? As you can see simple type in expressions or loops can save you a great deal of time. Just to recap we very quickly went over using loops with the getClassInstances() function and using the listener to ascertain what property's we need to change. If you have any question then please just post in the comments I will do my get back to ASAP. Also remember the maxscript help file is your friend it is a fantastic help, if you are having trouble of some of the more basic concepts I suggest you start there.

I hope that shed some light on some very simple scripts that you might be able to use. If you have an idea for a tutorial use this form, I am more than happy to tackle any challenges you have in 3d or 2d.

Cheers,

Dave