Create an Atmospheric Snow Shot in Nuke and Maya
In this tutorial, we’ll be using Nuke's 3D System to take a still image and turn it into an atmospheric shot with camera moves and moving elements. We’ll also be going over how to replicate some camera attributes such as grain as well.
The technique shown has been used on a lot of feature
films, and when done correctly, it can result in a good looking image
in a short amount of time.
Note: If you'd prefer to follow along using high resolution Images. You can download them below:
1. Find and Undistort your Image in Photoshop
Find an image, preferably square buildings and something that has depth, as well as finding something that is a high resolution.
your image in Photoshop by going to File>Open.
With your image in photoshop, we now need to go to Filter > Lens Correction.
With the Lens Correction screen up, click and hold the left mouse button and drag in and out of your image until your lines are as straight as you can get them.
To get the image out of Photoshop, go up to File again in the top left and hit Save As.
Change the format to Targa (.tga) and name your image, then click Save. Now another box will pop up but just leave this as is and hit OK. (I also then painted out a small part of one of the buildings, as I wanted to reveal more of the building in the midground.)
2. Create your Geometry in Maya
Create a camera in Maya. To do this click Create in your top tool bar then go down to Cameras and finally click Camera.
Project this undistorted image by placing it in the image plane option.
Now we need to put our undistorted image through our camera, so that we have something to line our geometry up with.
your newly created Camera in any viewport to select it.
Look to the right of Maya's interface and click the Attribute Editor on the side, if not selected already.
Scroll down in the Attribute Editor until you see the label Environment. Click the arrow next to Environment and click the Create button.
Load your undistorted image into the camera by clicking
the Folder Icon to the
right of Image Name.
We are loading this image through the camera, as this is the camera
we will be using to project the image through in Nuke.
What we have just done is set this up in Maya, so that we know where our geometry needs to be in order for the buildings to be projected correctly without warping.
Move the camera so that the ground in our image is lined up with our Reference Building in Maya. So that we can start creating our projection geometry.
Create a Cube by going to the top toolbar again and clicking Create > Polygon Primitives > Cube.
Change one of your viewports to look through the camera. By clicking Panels > Perspective > Camera.
We need to check what our units are, as ideally we want to have our geometry as close to the real world scale as possible in order to get the correct parallax and depth.
To do this go to the top toolbar and click Window > Settings/Preferences > Preferences.
A preferences box should pop up. We now need to go to the settings category on the left side. Under the Working Units section, next to Linear will be your units. I’ve changed mine to Centimeters, but change them to whatever you feel comfortable in guesstimating lengths in.
As I didn’t know the location or scale of buildings I just eye balled a rough scale for the building and scaled up my cube in order to give it the size that I estimated. In order to scale up, select the Cube and in the Channel Box/ Layer Editor adjust the values in the Scale attributes.
Now we need to pick a reference building, ideally we need something that is near the foreground that we can see most of it’s edges.
We need to move our camera to fit the geometry to our chosen reference building. So hover your cursor over the Camera viewport and hit the Space Bar to maximize it. We can hold down Alt and either Left Click to Rotate or Right Click to Transform and adjust our camera to fit the building to our geometry.
If you can’t get the building exactly lined up, you can
push the vertices around to help with this. Do this by selecting your
geometry and Right Clicking on it and selecting Vertex
from the pop up menu.
This will now allow you to move the vertices on the corners of the geometry, giving greater control (make sure not to move the vertices too much, as this will distort the geometry into a weird non-building like shape, which may cause problems later.)
Once finished we need to export the geometry to a format that
can be read into Nuke. To do this, select all your geometry and your
projection Camera and click File > Export Selection.
An export box should now pop up. Change the Files of type to FBX export and name your geometry, then hit Export Selection and we’re onto Nuke!
Note: Keep Maya Open as we will need to go back and forth to check geometry names.
3. Setup your Projections in Nuke
Read in your undistorted plate by hitting (R) and browsing to your undistorted image that we exported earlier.
We need to degrain our image so that we can apply moving grain to the the final shot. This will give the look of it being shot as a video, rather than a still. To do this select your Read in image then click TAB, type Denoise and press Enter.
You should see a message on the top of your viewer
asking you to position the analysis region over a flat area. Ideally
we want to position this area over somewhere mid to dark grey, so I’ve
chosen some buildings in the midground.
It will update the viewer to give you a preview of what the degrain outcome will be, so you can compare different areas of analysis to the original to see what gives you the best outcome. As we don’t want to soften our image too much.
The Denoise node is a heavy node which means that it takes a lot of computer power to work. So in order to help this, we render out our degrained version and disable the Denoise node. Select the Denoise node, hit TAB and type Write and then press Enter.
We now have our Degrained Plate to start setting up our projections from. As we are dealing with a projection we can’t push the camera move to much, as the camera parallax will cause parts of the buildings unseen in the photo to now be seen.
In this shot we are going to pan the camera down slightly, which will still mean we have to extend the buildings, however only a small amount. And we are only showing more of what is already seen, which means we can clone what we already have in the image.
To do this, select your newly rendered Degrained Plate and hit TAB, type Roto and then push Enter.
With our newly made Roto node we now need to start cutting out each building, so that we have them separated to project onto their correct geometry. So start by picking a building and begin rotoing. Bezier curves are particularly good for buildings which can be selected on the right hand side underneath the Fountain Pen tool.
We need to put a Paint node in between our backplate and our Roto node, so that we can extend our building to accommodate for our camera move. To do this, select your Degrained Plate and hit P which is the shortcut for Rotopaint. Now select the Clone Tool.
We need to paint in the parts of the building that will be revealed when the camera moves. This will be a back and forth process, as you may need to go back and paint more building in depending on your camera move. So for now lets paint in what we think we’ll need. I need to paint a little building into the bottom and extend my roof.
Since we have extended our building we need to adjust our roto shape to fit our new paint work in, so adjust where necessary.
Now we need to load in the geometry that we want to project our newly painted building onto. Select your Roto node and hit TAB, then type ReadGeo and hit Enter. Then press the Folder Button in your Read Geo node and navigate to the .FBX file that we exported out of Maya.
Now we need to load in the geometry that we created for this building to be projected on. So go back to Maya, click the geometry that is in the place of the building to be used to project that building onto. Remember the name of this geometry, so that we can see what piece of geometry we need to load into our ReadGeo node.
that we have the name of our geometry, go back to Nuke and Double Click
your ReadGeo node to
bring up it’s properties panel. We need to select this geometry,
so click the light grey drop down next to Node Name and select your
geometry for this building.
We now need to import the camera that will project our image onto the geometry. So to create a camera hit TAB and type Camera, then hit Enter. Now that we have our Camera node, hit the Folder Icon and read in your .FBX, as well as selecting your Camera in the Node Name drop down. The same as we did for our geometry.
Now that we have our imported camera we need to tell
nuke what to do with it. As we want to project through it, we need to
create a Project3D node and plug it in between our Roto and ReadGeo nodes. So as usual select your Roto node, hit
TAB and type Project3D,
then hit Enter.
Drag and drop the Cam Arrow onto your Project3D node onto the Camera to connect it. We’ve just created our first projection!
As we’re going to be creating more of these setups for all of our buildings, we need to create a Scene node which will place all of our setups into the same 3Dscene. So just select your ReadGeo node, hit TAB and type Scene to create a Scene node.
We need to render what we have out into a 2D image. Select your Scene node, hit TAB
and type ScanlineRender. Now
the renderer needs a camera that will be shooting our 3D scene. I
put a Constant node in set to 1920x1080 to set the format of our
image. Hit TAB,
type Constant and set
the format of it to HD.
We already have our Camera node, however as we will be wanting the camera to move at a later date, we need to copy and paste this to duplicate it and plug it into the cam arrow. As shown in the image.
Do the same for all the other buildings and plug there ReadGeo nodes into the Scene node that we created.
Now that we have our 3D scene setup, we need to create our camera move otherwise we’ll just have an image that is a duplicate of our photo. To do this we need to move our Camera plugged into the Scanline Render node.
Select the Camera plugged into the Scanline Render node and click in the Label box in order to change the name to Render_Cam.
Hover your cursor over the viewer and hit TAB to change into your 3D scene.
At the moment we’re unable to move the camera as our node is reading the translation from our fbx file. So we need to uncheck the Read from File box in order for us to be able to move it.
With this unchecked you have access to the translation
tool in your 3D scene so you can create your camera move. However we
need to think about how long our shot is going to be, so we can work out
where to put the keyframes on our timeline.
I chose to have a 3 second shot (72 Frames) as I wanted a piece that lasted long enough to have in my showreel. It’s up to you how long you want the shot to be, though just bare in mind that we can’t push the camera too far, as it means we'll have to paint more of the building work in.
Set a keyframe on the first frame by clicking on the timeline
underneath your viewer and Right Clicking on the icon next to
Translate and Rotate
in your camera settings and selecting Set Key.
Go to the frame where you want your shot to end and move the camera, either in the 3D viewer using the arrows or by adjusting the numbers in the Camera Preferences. This takes a fair bit of adjustment and it can be useful to create a new Viewer node set to the 2D view, so that you can see what your camera is seeing.
Create a new Viewer node by select your Scanline Render node and pressing Control-l.
Since we have chosen our frame length we need to set our project settings. We should generally do this at the start of the project, however as we had not decided on our frame length, we are going to set it now. So put your viewer in the Preferences Bar to the right and hit S.
Now we need to change the Frame Range to our chosen frame range, our FPS to 24 and the Full Size Format to HD 1920x1080.
4. Adding Depth
We now have our scene setup so it’s time for the finishing touches. As with all shots the last 10% can take just as long as the previous stages, if not longer. However it’s these touches that make your work stand out and push the idea as far as you can.
I choose my photo specifically for the fact that it suits smoke and haze in the distance as well as snow, plus as it’s clearly a cold night I could add smoke coming from buildings. It’s these little touches that give life and personality to a shot.
In order to add the snow to my scene I first found royalty free stock footage of snow on Youtube with movement that I liked that had also been shot against black. We now need to get our footage into our 3D scene. So that we can place the snow around much like a theater set. (It is important to convert your snow footage into an image sequence to be sure that it loads sufficiently in Nuke.)
So lets Read in our snow image sequence by hitting R and selecting your snow image sequence.
We need to get our footage into our 3D scene. To do this, select your read in snow footage and create a Card by hitting TAB, typing Card and then pressing Enter. Now attach your Card to your Scene node that we attached our buildings to.
As you will see our card is all solid color rather than just the snowflakes. To fix this we need to give our snow image an alpha and premultiply it so that just our snowflakes are visible. So select your Snow image sequence again, hit TAB and type Shuffle.
The Shuffle node allows us to shuffle channel information into other channels. We want to shuffle the red channel into the alpha, so tick the bottom box under the R input to do this.
We now need to multiply our alpha with our rgb channel
values. The black areas of the alpha have a value of 0 and white areas have
a value of 1. So 0 multiplied by any value is 0 which creates a
With this in mind we can use the Grade tool to adjust our alpha in order to give our snowflakes an alpha close to 1. If you need to fix your alpha, select your Shuffle node, hit TAB and type Grade. Change the Channels to Alpha so that we only affect the alpha channel. (You can sample your pixels by holding down Control and moving your cursor over the viewer.)
We’ve fixed our alpha! So we’re ready to use a Premultiply node to multiply our alpha by our rgb values. To do this math we need a node called Premultiply. So select your Shuffle node, hit TAB and type Premultiply. This node needs no changing so just leave it as is.
With our footage fixed so that the parts we want are solid and our footage is now on a card that we can now move in the 3D scene. We can start placing the snow around our scene.
With our Card selected, hover your cursor over the viewer and hit TAB to go back to our 3D scene and then move your snow into position using the arrows, or the translate values in the toolbar.
We can scale up the cards using the Uniform Scale slider.This will also scale up your footage, so remember to keep all your cards at a consistent scale so that your snowflakes remain uniform.
We are going to need to have snow in the background, midground and the foreground in order to create a realistic look and sense of depth to the snow. So attach another Card node into your snow footage and move it to a different place than the previous one.
You may have noticed that our snow all moves the same as we are using the same image sequence on all of our cards. We can fix this by using a TimeOffset node, this node offsets our start frame. So in order to give the snow a natural feel, I used a TimeOffset node and offset my footage forwards or backwards by a random number of frames before connecting it into a card.
It’s now a case of repeating this procedure so that you have your scene covered with a sufficient amount of snow.
In order to add some life into my scene I decided to add some moving cars.
In order to create our moving cars, we first need to cut them out from our image, so select your denoised image, hit TAB and type Roto. With the preferences open, change your Output to Alpha, select Bezier on the left hand side and start drawing around your shape.
I’ve feathered the edges of my roto where the headlights are. To do this, hold down Control and click and drag a point, this will give it a nice falloff.
We now need to premultiply our image with the alpha that we’ve created. So with the Roto node selected, hit TAB and type Premult.
We need to put our premultiplied car on a card in order to put it into our 3D scene, just like we did with the snow. So with the Premult node selected, hit TAB and type Card. With the card in the scene, connect it into the Scene node so that we can see its location. And move the car into place within your 3D scene using the translate arrows. (Quick Reminder: to flip between your 2D and 3D scene, hit TAB with your cursor over the viewer.)
Now we can either animate the card, in order to give the car movement within our scene, or this is a good opportunity to show you a new node called the Transform Geo node. The Transform Geo node does exactly that, it allows you to transform any geometry that it is connected to. So hit TAB with your Card selected and type TransformGeo.
the preferences open, Right Click
the box next to the Translate bar and hit Set Key (Make sure you’re
on the first frame in the timeline.) Now go to the last frame and
move your card (using the translate arrows in your 3D viewer) into
the position where you want your car to end up and set another key.
After scanline we need to grade our image before we add our finishing touches to the shot. To do this, we can use a few different nodes, but I prefer the Grade node.
So select your Scanline Render node, hit TAB, type Grade and hit Enter.
I wanted to add some blue into my image, so I hit the color bar next to Multiply and added a small amount of blue until I was happy with the grade.
I also dropped in some Transform nodes (Tab > Transform) in order to scale up my image and shift it into place slightly.
5. Finishing Touches
In order to create a realistic looking image we need to replicate attributes that are associated with shooting through a camera, one of which is camera blur. So to replicate this we need to do the following.
Select your Transform node, hit TAB and type VectorBlur and set the UV Channels to Motion. You can adjust the Multiply option in order to adjust how much motion blur is applied to the image, so tweak this value until you get the desired outcome.
Because the shot had such a quick turn around there was
no camera lens reference, so I just added a slight bit of distortion
to enhance the believability of the image.
To add lens distortion, select your VectorBlur node, hit TAB and type LensDistortion. With the node created adjust the values in Radial Distortion 1 and 2 until you get the desired effect (you only need small values here.)
Now we’re almost done with our shot, so the last thing to add to our final piece is grain. Grain is more apparent in dark areas of an image so in order to replicate this we need to create a mask.
Select your Lens Distortion node and as always hit TAB
and type Keyer. This
node will allow us to pull a key from the information that we have
connected to the node.
So with your Keyer preferences open, place your mouse over your
viewer and hit A in
order to view the alpha channel that we are going to be generating.
Now drag the two bars one from the left and one from the right, until you start to get a nice contrast between your dark areas and your light areas. We don’t want anything pure white or anything pure black in our alpha.
With our LumaKey generated we need to create our Grain
node, so with your Keyer node
selected, hit TAB and
This node will apply grain uniformly over the whole image without our alpha, so make sure that the Apply Only Through Alpha option is ticked, as well as Invert Alpha in order to increase the amount of grain in the dark areas. Again adjust the settings of your keyer to get your desired effect.
All that’s left to do now is Write out our finished shot. So select your Grain node, hit TAB for one last time and type Write and then press Enter. With the Write node's preferences open, hit the Folder icon next to the file bar and locate the place that you want to save your files.
going to be rendering out an image sequence. So we we need to put
some # symbols after the name. This represents your frame number values, for instance if I put three ###, I’ll get 001 on my first frame.
We then need to tell Nuke what file type we want to write out. I used dpx, so type .dpx after your title and ###. So you should have title###.dpx. The other defaults are all fine so we can now hit Render.
Another box will now pop up, check the Frame Range and hit OK and you're done!
Over the course of this tutorial you have learned how to take a simple still image and turn it into a great looking shot with plenty of atmosphere using Nuke's powerful 3D system and Maya.