Please ensure Javascript is enabled for purposes of website accessibility
Powered by Zoomin Software. For more details please contactZoomin

AVEVA™ XR Studio

Example: Stereoscopic Cubemap 12 Viewports

  • Last UpdatedApr 27, 2026
  • 4 minute read

This page contains an example of a RenderSetup XML file using twelve viewports to render a cubemap where each of the six faces of the cubemap is rendered in two viewports from both the left and right eyes perspectives. This combined achieves a stereoscopic vision.

Notice the parameter cameraMode is used to define which eye to render in each viewport.

cameraMode

Allows you to select what eye perspective to render in the viewport, taking into account cameraConvergenceType, global eyes separation and convergence parameters, supported values are:

  • left_eye: render the left eye perspective.

  • right_eye: render the right eye perspective.

  • setting any value different from left_eye or right_eye or not setting this parameter results in the default center camera to be used for rendering.

Limitations

  • Only supported in dualhead sidebyside rendering

    The cameraMode parameter is only supported in dualhead sidebyside rendering.

    To enable dualhead sidebyside rendering on a rendersetup XML, it is necessary to name the file by including the words "dualhead" and "sidebyside" in its filename (for example, rendersetup_fgi_12screens_cubemap_dualhead_sidebyside_inline.xml).

    The dualhead and sidebyside modes detection is currently handled by naming convention.

  • Viewports naming convention for dualhead

    The dualhead rendering imposes the following constraints, that must be respected:

    • A layout named DEFAULT_VIEWPORT must exist.

    • A layout named RIGHT_VIEWPORT must exist.

Example description

The example defines 12 viewports, corresponding to the left and right eye views of each face of the cubemap.

[SX_LEFT_EYE_VIEWPORT][SX_RIGHT_EYE_VIEWPORT][DEFAULT_VIEWPORT]

[RIGHT_VIEWPORT]

[DX_LEFT_EYE_VIEWPORT][DX_RIGHT_EYE_VIEWPORT][UP_LEFT_EYE_VIEWPORT] [UP_RIGHT_EYE_VIEWPORT]

[DOWN_LEFT_EYE_VIEWPORT][DOWN_RIGHT_EYE_VIEWPORT][BACK_LEFT_EYE_VIEWPORT] [BACK_RIGHT_EYE_VIEWPORT]

DEFAULT_VIEWPORT and RIGHT_VIEWPORT are used to render left and right eyes of the front view.

Due to current naming convention limitations, two viewports by these names must exist in the rendersetup xml when using dualhead rendering. Therefore, using these two viewports to render left and right eyes of the front camera is a common practice.

Other viewports are used to render left, right, down, up and bottom sides of the cubemap. Aside from DEFAULT_VIEWPORT and RIGHT_VIEWPORT, additional viewports can have any name.

Filename

rendersetup_fgi_12screens_cubemap_dualhead_sidebyside_inline.xml

Code example

<?xml version="1.0" encoding="utf-8" ?>

<renderSetup version="1.0">

<Viewport name="SX_LEFT_EYE_VIEWPORT">

<hwnd index="0"/>

<pos value="0 0"/>

<size value="0.25 0.3334"/>

<outputLayer value="SX_LEFT_EYE_SCENE_LAYER"/>

<cameraMode value="left_eye"/>

<layers>

<Layer name="SX_LEFT_EYE_SCENE_LAYER" type="sceneFGI">

<fgiConfig file="./GameData/hdr/fgi_default.xml"/>

<postProcess id="SX_RIGHT_EYE_POSTPROCESS" file="./GameData/hdr/post_process_default.xml"/>

<sceneName value="_all_"/>

<cameraName value="ft_player0_camera"/>

</Layer>

</layers>

</Viewport>

<Viewport name="SX_RIGHT_EYE_VIEWPORT">

<hwnd index="0"/>

<pos value="0.25 0"/>

<size value="0.25 0.3334"/>

<outputLayer value="SX_RIGHT_EYE_SCENE_LAYER"/>

<cameraMode value="right_eye"/>

<layers>

<Layer name="SX_RIGHT_EYE_SCENE_LAYER" type="sceneFGI">

<fgiConfig file="./GameData/hdr/fgi_default.xml"/>

<postProcess id="SX_RIGHT_EYE_POSTPROCESS" file="./GameData/hdr/post_process_default.xml"/>

<sceneName value="_all_"/>

<cameraName value="ft_player0_camera"/>

</Layer>

</layers>

</Viewport>

<Viewport name="DEFAULT_VIEWPORT">

<hwnd index="0"/>

<pos value="0.5 0.0"/>

<size value="0.25 0.3334"/>

<outputLayer value="DEFAULT_2D_LAYER"/>

<cameraMode value="left_eye"/>

<layers>

<Layer name="DEFAULT_SCENE_LAYER" type="sceneFGI">

<fgiConfig file="./GameData/hdr/fgi_default.xml"/>

<postProcess id="DEFAULT_POSTPROCESS" file="./GameData/hdr/post_process_default.xml"/>

<sceneName value="_all_"/>

<cameraName value="ft_player0_camera"/>

</Layer>

<Layer name="DEFAULT_2D_LAYER" type="2dOverlay">

<layer2DName value="DEFAULT_2D_LAYER_MAIN"/>

<input1 value="DEFAULT_SCENE_LAYER"/>

</Layer>

</layers>

</Viewport>

<Viewport name="RIGHT_VIEWPORT">

<hwnd index="0"/>

<pos value="0.75 0.0"/>

<size value="0.25 0.3334"/>

<outputLayer value="FRONT_RIGHT_EYE_2D_LAYER"/>

<cameraMode value="right_eye"/>

<layers>

<Layer name="FRONT_RIGHT_EYE_SCENE_LAYER" type="sceneFGI">

<fgiConfig file="./GameData/hdr/fgi_default.xml"/>

<postProcess id="FRONT_RIGHT_EYE_POSTPROCESS" file="./GameData/hdr/post_process_default.xml"/>

<sceneName value="_all_"/>

<cameraName value="ft_player0_camera"/>

</Layer>

<Layer name="FRONT_RIGHT_EYE_2D_LAYER" type="2dOverlay">

<layer2DName value="DEFAULT_2D_LAYER_MAIN"/>

<input1 value="FRONT_RIGHT_EYE_SCENE_LAYER"/>

</Layer>

</layers>

</Viewport>

<Viewport name="DX_LEFT_EYE_VIEWPORT">

<hwnd index="0"/>

<pos value="0.0 0.3333"/>

<size value="0.25 0.3334"/>

<outputLayer value="DX_LEFT_EYE_SCENE_LAYER"/>

<cameraMode value="left_eye"/>

<layers>

<Layer name="DX_LEFT_EYE_SCENE_LAYER" type="sceneFGI">

<fgiConfig file="./GameData/hdr/fgi_default.xml"/>

<postProcess id="DX_LEFT_EYE_POSTPROCESS" file="./GameData/hdr/post_process_default.xml"/>

<sceneName value="_all_"/>

<cameraName value="ft_player0_camera"/>

</Layer>

</layers>

</Viewport>

<Viewport name="DX_RIGHT_EYE_VIEWPORT">

<hwnd index="0"/>

<pos value="0.25 0.3333"/>

<size value="0.25 0.3334"/>

<outputLayer value="DX_RIGHT_EYE_SCENE_LAYER"/>

<cameraMode value="right_eye"/>

<layers>

<Layer name="DX_RIGHT_EYE_SCENE_LAYER" type="sceneFGI">

<fgiConfig file="./GameData/hdr/fgi_default.xml"/>

<postProcess id="DX_RIGHT_EYE_POSTPROCESS" file="./GameData/hdr/post_process_default.xml"/>

<sceneName value="_all_"/>

<cameraName value="ft_player0_camera"/>

</Layer>

</layers>

</Viewport>

<Viewport name="UP_LEFT_EYE_VIEWPORT">

<hwnd index="0"/>

<pos value="0.50 0.3333"/>

<size value="0.25 0.3334"/>

<outputLayer value="UP_LEFT_EYE_SCENE_LAYER"/>

<cameraMode value="left_eye"/>

<layers>

<Layer name="UP_LEFT_EYE_SCENE_LAYER" type="sceneFGI">

<fgiConfig file="./GameData/hdr/fgi_default.xml"/>

<postProcess id="UP_LEFT_EYE_POSTPROCESS" file="./GameData/hdr/post_process_default.xml"/>

<sceneName value="_all_"/>

<cameraName value="ft_player0_camera"/>

</Layer>

</layers>

</Viewport>

<Viewport name="UP_RIGHT_EYE_VIEWPORT">

<hwnd index="0"/>

<pos value="0.75 0.3333"/>

<size value="0.25 0.3334"/>

<outputLayer value="UP_RIGHT_EYE_SCENE_LAYER"/>

<cameraMode value="right_eye"/>

<layers>

<Layer name="UP_RIGHT_EYE_SCENE_LAYER" type="sceneFGI">

<fgiConfig file="./GameData/hdr/fgi_default.xml"/>

<postProcess id="UP_RIGHT_EYE_POSTPROCESS" file="./GameData/hdr/post_process_default.xml"/>

<sceneName value="_all_"/>

<cameraName value="ft_player0_camera"/>

</Layer>

</layers>

</Viewport>

<Viewport name="DOWN_LEFT_EYE_VIEWPORT">

<hwnd index="0"/>

<pos value="0 0.6666"/>

<size value="0.25 0.3334"/>

<outputLayer value="DOWN_LEFT_EYE_SCENE_LAYER"/>

<cameraMode value="left_eye"/>

<layers>

<Layer name="DOWN_LEFT_EYE_SCENE_LAYER" type="sceneFGI">

<fgiConfig file="./GameData/hdr/fgi_default.xml"/>

<postProcess id="DOWN_LEFT_EYE_POSTPROCESS" file="./GameData/hdr/post_process_default.xml"/>

<sceneName value="_all_"/>

<cameraName value="ft_player0_camera"/>

</Layer>

</layers>

</Viewport>

<Viewport name="DOWN_RIGHT_EYE_VIEWPORT">

<hwnd index="0"/>

<pos value="0.25 0.6666"/>

<size value="0.25 0.3334"/>

<outputLayer value="DOWN_RIGHT_EYE_SCENE_LAYER"/>

<cameraMode value="right_eye"/>

<layers>

<Layer name="DOWN_RIGHT_EYE_SCENE_LAYER" type="sceneFGI">

<fgiConfig file="./GameData/hdr/fgi_default.xml"/>

<postProcess id="DOWN_RIGHT_EYE_POSTPROCESS" file="./GameData/hdr/post_process_default.xml"/>

<sceneName value="_all_"/>

<cameraName value="ft_player0_camera"/>

</Layer>

</layers>

</Viewport>

<Viewport name="BACK_LEFT_EYE_VIEWPORT">

<hwnd index="0"/>

<pos value="0.5 0.6666"/>

<size value="0.25 0.3334"/>

<outputLayer value="BACK_LEFT_EYE_SCENE_LAYER"/>

<cameraMode value="left_eye"/>

<layers>

<Layer name="BACK_LEFT_EYE_SCENE_LAYER" type="sceneFGI">

<fgiConfig file="./GameData/hdr/fgi_default.xml"/>

<postProcess id="BACK_LEFT_EYE_POSTPROCESS" file="./GameData/hdr/post_process_default.xml"/>

<sceneName value="_all_"/>

<cameraName value="ft_player0_camera"/>

</Layer>

</layers>

</Viewport>

<Viewport name="BACK_RIGHT_EYE_VIEWPORT">

<hwnd index="0"/>

<pos value="0.75 0.6666"/>

<size value="0.25 0.3334"/>

<outputLayer value="BACK_RIGHT_EYE_SCENE_LAYER"/>

<cameraMode value="right_eye"/>

<layers>

<Layer name="BACK_RIGHT_EYE_SCENE_LAYER" type="sceneFGI">

<fgiConfig file="./GameData/hdr/fgi_default.xml"/>

<postProcess id="BACK_RIGHT_EYE_POSTPROCESS" file="./GameData/hdr/post_process_default.xml"/>

<sceneName value="_all_"/>

<cameraName value="ft_player0_camera"/>

</Layer>

</layers>

</Viewport>

</renderSetup>

cavePoints setup

Notice that in the displayed image, viewports are rotated in the proper direction by setting their cavePoints property.

Due to a current limitation, it is not possible to set the parameters caveEnable and cavePoints by the render setup XML when using dualhead rendering.

To achieve the displayed result, it is necessary to enable cave mode and set the cavepoints to the desired viewports by script.

The following script shows how to enable cave mode and set cave points on the six viewports.

<Coroutine name="cmd_setCavePoints" execute="true">

<wait condition="[@cmd_setCavePoints.timeFromWait]&lt;0.1" />"[@cmd_setCavePoints.timeFromWait]&lt;0.1" />

<set name="viewport_DEFAULT_VIEWPORT.caveEnable" value="True" />

<set name="viewport_DEFAULT_VIEWPORT.cavePoints" value="-1 -1 1,1 -1 1,-1 1 1" />

<set name="viewport_RIGHT_VIEWPORT.caveEnable" value="True" />

<set name="viewport_RIGHT_VIEWPORT.cavePoints" value="-1 -1 1,1 -1 1,-1 1 1" />

<set name="viewport_DX_LEFT_EYE_VIEWPORT.caveEnable" value="True" />

<set name="viewport_DX_LEFT_EYE_VIEWPORT.cavePoints" value="1 -1 1,1 -1 -1,1 1 1" />

<set name="viewport_DX_RIGHT_EYE_VIEWPORT.caveEnable" value="True" />

<set name="viewport_DX_RIGHT_EYE_VIEWPORT.cavePoints" value="1 -1 1,1 -1 -1,1 1 1" />

<set name="viewport_SX_LEFT_EYE_VIEWPORT.caveEnable" value="True" />

<set name="viewport_SX_LEFT_EYE_VIEWPORT.cavePoints" value="-1 -1 -1,-1 -1 1,-1 1 -1" />

<set name="viewport_SX_RIGHT_EYE_VIEWPORT.caveEnable" value="True" />

<set name="viewport_SX_RIGHT_EYE_VIEWPORT.cavePoints" value="-1 -1 -1,-1 -1 1,-1 1 -1" />

<set name="viewport_BACK_LEFT_EYE_VIEWPORT.caveEnable" value="True" />

<set name="viewport_BACK_LEFT_EYE_VIEWPORT.cavePoints" value="1 -1 -1,-1 -1 -1,1 1 -1" />

<set name="viewport_BACK_RIGHT_EYE_VIEWPORT.caveEnable" value="True" />

<set name="viewport_BACK_RIGHT_EYE_VIEWPORT.cavePoints" value="1 -1 -1,-1 -1 -1,1 1 -1" />

<set name="viewport_UP_LEFT_EYE_VIEWPORT.caveEnable" value="True" />

<set name="viewport_UP_LEFT_EYE_VIEWPORT.cavePoints" value="-1 1 1,1 1 1,-1 1 -1" />

<set name="viewport_UP_RIGHT_EYE_VIEWPORT.caveEnable" value="True" />

<set name="viewport_UP_RIGHT_EYE_VIEWPORT.cavePoints" value="-1 1 1,1 1 1,-1 1 -1" />

<set name="viewport_DOWN_LEFT_EYE_VIEWPORT.cavePoints" value="-1 -1 -1,1 -1 -1,-1 -1 1" />

<set name="viewport_DOWN_LEFT_EYE_VIEWPORT.caveEnable" value="True" />

<set name="viewport_DOWN_RIGHT_EYE_VIEWPORT.cavePoints" value="-1 -1 -1,1 -1 -1,-1 -1 1" />

<set name="viewport_DOWN_RIGHT_EYE_VIEWPORT.caveEnable" value="True" />

</Coroutine>

In This Topic
Related Links