Rendering Overscan in Maya

There are a few attributes in Maya you can change in order to render the image with overscan. The first is resolution, while the second is either camera scale, focal length, field of view, camera aperture, camera pre-scale, camera post-scale or camera shake-overscan. I use camera scale as it’s more intuitive numbers you need to enter and it doesn’t mess with the camera aperture, focal length or field of view.

In order to render and work with overscan correctly, it needs to be done relative to your format your working with – this is typically your final output resolution inside Nuke, but it could also be the resolution of a matte-painting or a live-action plate. The way to figure out the amount of overscan to use is simple and we can use one of two methods, either based on a multiplier or based on the amount of extra pixels we want to use.

The simplest method to me is based on a multiplier. If our format size is 480*360 (as above) and we wanted to render the image with an extra 10%, we multiply the resolution by 1.1 and set the camera scale to 1.1. Like so…

Then in Nuke all we need to do is apply a Reformat node and set it to our original render format of 480×360, the resize type=none and keep preserve bounding box=on  – this has the effect of cropping the render to our output size but keeping the image data outside of the format. Or additionally you can set the reformat like so… type=scale; scale=0.90909091; resize type=none; preserve bounding box=on. Instead of typing in 0.90909091, you can also set the scale by just typing in 1/1.1 …

If we instead wanted to render an extra 32 pixels to the top, bottom, left and right of our image – making the image 64 pixels wider and higher – we need to do things a little bit differently as we need to change the camera aperture. The reason for doing this is that adding the same number of pixels to both the width and height results in a very slight change to the aspect ratio of the image.

new width = original width + extra pixels
new height = original height + extra pixels
overscan width = new width / original width
overscan height = new height / original height
new aperture width = original aperture width * overscan width
new aperture height = original aperture height * overscan height

So using our 480×360 example from above. If we wish to add an extra 64 pixels to the width and height we would calculate it like so…

480 + 64 = 544
360 + 64 = 424
544 / 480 = 1.13333333
424 / 360 = 1.17777777
1.417 * 1.13333333 = 1.606
0.945 * 1.17777777 = 1.113

Same as before in Nuke we then apply a Reformat node with the following settings. type=to box; width/height=480, 360; force this shape=on; resize type=none; preserve bounding box=on

3 thoughts on “Rendering Overscan in Maya”

  1. Nice post!
    I would add that if you are projecting an overscan render you have to force the scanline render to the overscan format, then apply the reformat node after the scanline.

  2. import pymel.core as pm

    def calcOverscan(extraPixelsWidth, extraPixelsHeight):

    originalWidth = pm.getAttr(“defaultResolution.width”)
    originalHeight = pm.getAttr(“defaultResolution.height”)

    camera = pm.ls(sl=True)[0]

    originalApertureWidth = camera.horizontalFilmAperture.get()
    originalApertureHeight = camera.verticalFilmAperture.get()

    newWidth = originalWidth + extraPixelsWidth
    newHeight = originalHeight + extraPixelsHeight
    overscanWidth = newWidth / originalWidth
    overscanHeight = newHeight / originalHeight
    newApertureWidth = originalApertureWidth * overscanWidth
    newApertureHeight = originalApertureHeight * overscanHeight

    camera.horizontalFilmAperture.set(newApertureWidth)
    camera.verticalFilmAperture.set(newApertureHeight)

    pm.setAttr(“defaultResolution.width”, newWidth)
    pm.setAttr(“defaultResolution.width”, newHeight)

Leave a Reply to Gianluca Salerno Cancel reply

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