Class

Camera

Synopsis


This is a generic VR camera implementation. It features two cameras offset by a distance with a specific 360º projection. Its main advantages are:

  • It works with any scene component that can be rendered in an offline renderer: meshes, hair, particles, volumetrics and complex shading networks.
  • An easy learning curve to begin to create VR content. Just add the VR camera to your existing project.
  • Modest hardware requisites to reproduce the content. Any platform that can reproduce a video with the required projection is fine to experience the generated content.
  • Content that is easy to distribute either as a video file or via video streaming. It can be reproduced using dedicated software or an app, or with web standards like WebGL, WebVR. It also works with Google and Facebook 360 3D videos.

Limitations

  • Poles: By default, poles will show very evident artifacts. This requires that you adjust the stereoscopic effect for each scene and smooth it near the poles, thus diminishing the stereoscopic effect.
  • Tilt: Due to the way the stereoscopic effect is done, tilting your head will destroy the stereoscopic perception.
  • Parallax: When you move your head along any axis, there is a change in the viewpoint that the offline VR scene can’t take into account. This can diminish the immersion of the experience since we can only react to head rotations.

mode

There are four mode options available so that you can get the result that better adapts to your pipeline. They are as follows:

  1. Side by Side
  2. Over Under
  3. Left Eye
  4. Right Eye

projection

Depending on the selected projection, and options, each sample will correspond to a ray direction so that all of the space around the camera is completely covered. Choose between lat-long, cube map (6x1), cube map (3x2).

Latlong Projection

Cubemap (6x1)

Cubemap (3x2)

The 3×2 Cube Map has the advantage of better aspect ratio images.

eye_separation

Defines the separation between the right and the left camera, required to achieve the stereoscopic effect. The camera origin position is updated for each sample and displaced from the center perpendicularly to the ray direction. Doing this per sample level and not per pixel creates a better result than using two physical cameras. Here is a picture explaining this:

eye_to_neck

The horizontal distance from the neck to the eye.

top_merge_mode

These parameters define the merging function of the sky. Usually, a Cosine function (Cos) will be smoother and less prone to artifacts. Choose between None, Cosine or Shader.

top_merge_angle

Defines the angle in degrees from where the merge starts to take effect in the sky. The nearer the angle to the pole (0º top or 180º bottom), the bigger stereoscopic effect you will see below it, but the most probable artifacts will appear at the poles.

Below you can see the difference between a start top angle from 0 to 80 using a cos merging function:

bottom_merge_mode

These parameters define the merging function of the floor. Usually, a Cosine function (Cos) will be smoother and less prone to artifacts. Choose between None, Cosine or Shader.

bottom_merge_angle

Defines the angle in degrees from where the merge starts to take effect on the floor. The nearer the angle to the pole (0º at the bottom, 180º at the top), the bigger stereoscopic effect you will see below it, but the most probable artifacts will appear at the poles.

If the bottom_merge_angle is above the top_merge_angle, it will be clamped to the top_merge_angle.

merge_shader

This is used when merge_mode is set to "shader." It can be used to improve control of smoothing the poles. For example, if you have to integrate 3D with real life footage from cameras that have a very specific pole merging. Without Merge Shader, you only have generic pole merging. Black in the shader, results in no merge at all and white is completely merged.

Example of a ramp shader used to smooth the poles

position

The position of the camera.  (common)

look_at

The point at which the camera is pointing.  (common)

up

The up vector of the camera.  (common)

matrix

Matrix to define the position and orientation of the camera.   (common)

near_clip

The near clipping plane of the camera's renderable area.  (common)

far_clip

The far clipping plane of the camera's renderable area.  (common)

shutter_start

Defines when the camera shutter is open. The shutter range is normalized to 0 and 1. shutter_start of zero would equal to the first motion blur key while a shutter_start of one would equal to the latest motion blur key.  (common)

shutter_end

Defines when the camera shutter is closed. The shutter range is normalized to 0 and 1. shutter_end of zero would equal to the first motion blur key while a shutter_start of one would equal to the latest motion blur key. The shutter_end must be bigger than the shutter_start.  (common)

shutter_type

The filtering applied to time samples. By default, this is a box filter, with all time samples having the same weight. A triangle (or "tent") filter is also available which produces smoother trails.

Arnold supports custom shutter shapes with the shutter curve camera parameter. You can define as many points as required. Coordinates increase from 0 (corresponding to the shutter_start) to 1 (corresponding to the shutter_end). Values in the vertical axis must be non-negative, and it is not recommended to enter values above 1. The values are linearly interpolated between each point. In the examples below, you can see the effect different curve shapes have on the motion blur trail of a sphere that has been key-framed moving from left to right.

Various custom camera shutter curve shapes

  (common)

rolling_shutter

Rolling Shutter is used to simulate the type of rolling shutter effect seen in footage shot with digital cameras that use CMOS-based sensors such as Blackmagics, Alexas, REDs, and even iPhones. This method is implemented by rolling (moving) the shutter across the camera area instead of the entire image area all at the same time. 

Without rolling shutter (rollover image).

With rolling shutter (rollover image).

 

The Rolling Shutter direction specifies the direction that the rolling shutter takes place. The default is 'off'' and can be set to 'top' (top to bottom being the most common scanning direction), 'bottom', 'left' or 'right'. 

 

Interesting effects can be achieved when combining motion blur 'length' with rolling shutter:

Motion blur 'length' from 0 to 2

  (common)

filtermap

Weights the camera sample by a scalar amount defined by the shader linked to the filtermap. This shader will use as an input, u,v coordinates in image-space coords [0,1) and x,y in pixel coordinates. This allows you to darken certain regions of the image, perfect to simulate vignetting effects.

There is an optimization in place where if the filter returns pure black then the camera ray is not fired. This can help in cases such as when rendering with the fisheye camera where, depending on its autocrop setting, parts of the frame trace no rays at all.

Circular ramp mapped to the camera's filtermap to create a vignette effect

  (common)

handedness

Chooses the "right" handed or "left" handed coordinate system.  (common)

screen_window_min

This defines the 2d window in the projection plane that will be rendered. If set to its default (-1,-1) (1,1) the frame will exactly match with the defined region, after taking aspect_ratio into account so that there is no distortion. These should be set if you want to stretch, squash, or zoom to a particular area in an image.  (common) 

screen_window_max

This defines the 2d window in the projection plane that will be rendered. If set to its default (-1,-1) (1,1) the frame will exactly match with the defined region, after taking aspect_ratio into account so that there is no distortion. These should be set if you want to stretch, squash, or zoom to a particular area in an image.  (common)

exposure

Simulates the effect of camera exposure (in a non-physical way). Increasing this parameter by a value of one gives you one stop up (doubles the brightness). 

(common)

 

 

  • No labels