Motion Vector AOV

Motion blur using the motion_vector AOV (rollover image)

 

Motion blur in Arnold is generally best accomplished by using the natural motion blur support, where transforms and vertices of objects are sampled over time from a camera's shutter open to shutter close. This requires using more AA samples to resolve noise from motion blur, but often those samples are needed anyway for noise resulting from the depth of field, direct and indirect lighting, volumetrics, and so on. In some cases where there are severe time constraints, it may be faster to instead output motion vectors and blur the images in a compositing package afterward. This type of motion blur is lower fidelity; it does not capture lighting changes as an object moves, nor complex interactions of depth relative to the camera. However, it can be sufficient in some cases.

 

We will demonstrate how to generate motion vectors for the cases where it is desirable. There are two methods to generate motion vectors, one using a shader and the other using a built-in AOV that Arnold provides. This tutorial aims to demonstrate how to use the motion_vector AOV in a pool ball scene. We will talk about the advantages and disadvantages of using this technique compared to true 3D motion blur. The motion_vector AOV outputs a color channel that shows object movement within the scene. This AOV can be used by post-processing software to calculate a 2D motion blur effect. The advantage is that it is usually quicker to render compared to true 3D motion blur.

The scene can be downloaded here.

Creating The Pool Ball Render

Before we render the Motion Vector AOV, we must first separate the pool ball from the background. We will render the pool ball (with the motion_vector AOV) separately and composite them together in a post-processing program like Nuke.

  • Before rendering the pool ball separately, we must enable Instantaneous Shutter in the Motion Blur settings. The reason being is that we don't want motion blur in the render, but we still want the motion velocity information in the motion vector AOV.  
  • Select the geometry in the scene (except the pool ball that we want to motion blur) and disable their primary_visibility. You should just see the pool ball rendered on its own.

Pool ball render (primary_visibility disabled for the rest of the scene)

Creating the Background Layer

  • Now disable primary_visibility for the pool ball that we want to motion blur. When rendered, you should see the background objects and only the shadow of the motion-blurred pool ball.

Background render (primary_visibility disabled for the pool ball)

(Left) Pool ball render (primary visibility disabled for the rest of the scene via Arnold Tag). (Right) Background render (primary visibility disabled for the pool ball)

Adding The Motion Vector AOV

  • For the pool ball render, open the Render Settings window and go to the AOVs tab. Create a motion_vector AOV by either double-clicking on it under the Inactive AOVs list or click on the right arrow icon. 

     

    • Add an Arnold Driver (Plugins > C4DtoA > Arnold Driver) to the scene and select the driver_exr in the combo box. AOVs connected to the driver will have the AOV name as a postfix (for example: /path/to/output_diffuse_direct.exr).
    • Add the motionvector AOV to this new driver.
    • The Arnold driver should appear in the attribute manager. Select Merge AOVs. This will combine the motion_vector AOV with the rendered EXR as one file.

    Enable Merge AOVs stores the AOVs in one EXR file

     

    • Enable Motion Blur in the Render Settings.
    • Render both scenes (the background without the ball and only the pool ball) and open the EXR files in Nuke.

Composite

  • Open the two EXR files in a post-processing package (in this case Nuke).
  • Connect a  'Vector Blur' node to the pool ball render. We will use the Vector Blur node to blur the pool ball using the 'Motion Vector AOV'.

 

  • Select the VectorBlur node. Change the uv channels to motionvector, and the mv presets to Arnold. Enable uv alpha and choose rgba.alpha to prevent the blur from being clipped by the alpha of the motionvector AOV.

Vector Blur node settings in Nuke

 

  • Use a 'merge' node (operation set to 'over') with its A input as the Vector Blur and it's B input as the background render.

 

Finally, we should see the pool ball render composited onto the background render as follows:

Limitations

There are are some limitations when rendering a 2D motion vector compared to rendering Arnold's native 3D motion blur. Some of these limitations include motion blur in a reflective surface, deformation blur, no true 3D motion blur effects such as a wheel spinning that is not facing the camera, and time-lapse effects using motion-blurred light sources. 

Reflected motion blur is not possible when using Motion Vector blur (rollover image)

The motion vector AOV has a problem handling deformation motion blur. If you need to render a proper motion vector AOV for deformation motion blur, you must create a custom AOV with a motion_vector shader attached to it.

  • No labels