Display And View Group Configuration


Contents

Introduction

View groups allow a large field of view to be distributed across multiple displays by assigning a view to each display. When a view group is active, it can be controlled by any of its members so that a group of displays behaves similarly to a single large display.

Configuring Displays

In order to map views to displays, a Display entry must exist in the Displays configuration which assigns a DisplayID and AdapterIndex, with an AdapterIndex and MachineID. The adapter index indicates the monitor/projector to use, while the MachineID indicates which computer the display is connected to (MachineID needed in Multichannel only). Each view in a ViewGroup needs to reference a DisplayID listed in the Displays configuration in order for it to automatically open on that display when the group is activated.

There are two ways to edit ViewGroups and Displays. The simplest is by using the View Group Management UI which updates the underlying xml configurations automatically. After making adjustments, selecting "Ok" will save out the configuration into the appropriate xml files. The second way to set up the display configuration is to manually edit the xml files. The Displays.xml, ViewGroups.xml, and Multichannel.xml (Pro Plus Only) can be found in %PROGRAMDATA%\Lockheed Martin\Prepar3D v3. Both methods will be covered here.

Configuring Displays via UI

  1. Open Views->View Group Management.
  2. Select Displays->Configuration 1.
  3. Rename "Configuration 1" to a custom name by filling out the "Name" textbox.
  4. Below "Display" is a list of the current displays. If this list is empty, or needs to be added to, select "Add".
  5. Select the appropriate display by either double-clicking, or selecting the pencil beside the display name.
  6. This will bring up the edit page for the selected display. This window has several fields, such as "DisplayID", "AdapterIndex", and "MachineID". The user interface also allows the addition of a plugin or post-process to a display. This post-process or plugin will be added to the display globally, so they will be applied to any view on that display. An example of editing a plugin can be found on the EasyBlend page, under "Setup EasyBlend™ using the Prepar3D UI".

    Note: You can add a new Display Configuration, but it will not be active. To make your configuration active, you must move it to the top of the list of Comfigurations by selecting Displays, then clicking to highlight the configuration you would like to move. Use the arrows to the right of the box to move the highlighted display up and down in the list.

Configuring Displays by Editing Displays.xml

Below is the .xml output from following the steps above.

<?xml version="1.0" encoding="UTF-8"?>
<SimBase.Document Type="ConfigurationFile" version="3,3">
    <Descr>AceXML Document</Descr>
    <SimDisplay.ConfigurationSet>
        <Configuration>
            <Display>
                <Name>NVIDIA Quadro K5000.0.0</Name>
                <AdapterIndex>1</AdapterIndex>
            </Display>
        </Configuration>
    </SimDisplay.ConfigurationSet>
</SimBase.Document>

Configuring View Groups

A View Group is series of views which are each associated with a Display. Each view contains field of view and offset information describing the section of the overall scene which will be rendered on a given display. View groups can be created and modified in the View Management window, or by editing ViewGroups.xml. There are a number of ways to define a view group:
  1. Automatically using an AutoDetect GridSetup
  2. Automatically using a GridSetup with grid size and a starting DisplayID
  3. Manually by defining a relative Viewport
  4. Manually using a ViewFrustum
Note: You can add a new View Group, but it will not be active if there are more than one view groups. To make your view group active, you must move it to the top of the list of View Groups by selecting View Groups, then clicking to highlight the view group you would like to move. Use the arrows to the right of the box to move the highlighted view group up and down in the list.

Selecting a View

To select a view once you have saved (by selecting 'OK') and exited the View Group Manager, right click on the screen and hover over View Groups, and click on your view.

View Group Samples

The following examples set up different view groups using various features of the view group management user interface. A detailed list of features/options is included later in this document.

Configuring a View Group via UI Using a GridSetup

  1. Open Views->View Group Management.
  2. Select View Groups->ViewGroup 1.
  3. Note: If you are auto generating views, the first View Group in the list will be Auto-Fill Desktop. Do not edit that View Group. You will need to select View Groups and click Add to make a new View Group to customize.
  4. Rename "ViewGroup 1" to a custom name by filling out the "Name" textbox.
  5. Below Name, is the option to set the Side Angles that describe the field of view of the entire group. Adjusting these angles will widen or narrow down a field of view. For example: Left: -60.000, Right: 60.000, Top:20.000, Bottom:-20.000 would result in a 120 degree horizontal FOV and a 40 degree vertical FOV
  6. ViewGroupShape describes the layout of the monitors that are being used to run Prepar3D. The supported setup for a set of monitors can be either flat, cylindrical, or spherical. This will affect how the view groups adjust perspectives. Note that while Flat is useful for scenarios like a multi-channel video wall, it is not recommended for single-machine groups because the same result can be achieved with better performance by stretching a single window across multiple monitors. Cylindrical view groups will correct for the perceptive of each monitor and is recommended in most cases.
  7. AllowZoom will either enable or disable the ability to zoom the camera. Yes = Allow zooming.
  8. GridSetup is the horizontal (X) and vertical (Y) description of the layout of the physical monitors being used to visualize Prepar3D.
  9. Under GridSetup, select "Add", then select "Edit".

    • When in the edit window for GridSetup, there will be 4 groups of options.
    • GridSize is the value pair for how many monitors wide and how many monitors tall a setup is. X = width, Y = height.
    • EdgeOverlap is a way to correct the view for how much distance there may be between monitors, also called bezel correction. For this example, the fields will be set to -1.000.
    • The FirstDisplayID field is how Prepar3D knows what the furthest left, and furthest top monitor is in a setup. This is where Prepar3D will begin filling in displays sequentially to make a correct pictures. This is typically left at 1 for most users.
    • In this first example, AutoDetect will be left off since most of the fields it would look at have been set. A way to simplify this process is to simply leave everything on its default value and turn "AutoDetect" on by flipping this switch to "Yes". This will tell Prepar3D to make the best guess it can at assigning monitors in the correct order with the correct viewports based on the desktop layout.
  10. At this point, selecting "Ok" will generate a ViewGroups.xml file that should look exactly as it does below in the first xml example.

Configuring a View Group via UI Using by Manually Defining Views

Note that manually defined views should not be combined with views generated by a GridSetup unless special care is taken to ensure that two views do not map to the same DeviceID. If two views are mapped to the same device, a validation error will be displayed and the second view will be ignored.
  1. Create a new view by repeating steps 1-6 of the example above.
  2. Repeat steps 3-9 below for each view in the group.
  3. Select "Add" under the View heading in the ViewGroup editing window.
  4. After adding a view, double-click that view to open the view editor.
  5. Customize the name of this view by editing the "Name" field
  6. Next, set the DisplayID that this view will be associated with. This number is associated with a display ID that was set in the "Displays" tab. More than one view in a view group should not be mapped to the same DisplayID.
  7. Under the "Viewport" heading, set what part of the viewport this view will take up. These 4 numbers are on a 0.000 to 1.000 scale. Meaning, to view only the left half of what is possible to be viewed, then assign a left value of 0.000, a right value of 0.500, a top value of 1.000, and a bottom value of 0.000. Viewport values will be overridden by a ViewFrustum if one is defined, so leave these fields set to 0 when using ViewFrustum values to define Views.
  8. The EdgeOverlap is how much of the screen gets adjusted to make up for a bezel between monitors. The EdgeOverlap for the views is based on a percentage. So a value of -2.5 would be 2.5% of the screen that would moved to make the picture look correct.
  9. For advanced display configurations a ViewFrustum can be defined. ViewFrustum values will override Viewport definitions, so the Viewport should be left 0,0,0,0 to avoid getting a validation warning. Inside the view settings, edit the view frustum. The frustum defines where the camera is looking
    and how much of the world it can see. Changes here will affect the Field of View, orientation, and offset from the origin of the View Group.

    1. Just like earlier, the first option here is the SideAngles of the frustum.
    2. Next, there are the OffsetPBH values. These are the Pitch, Bank, and Heading offsets of the view from the view group origin point.
    3. The last option regarding the view frustum is the OffsetXYZ. This is where the offset of the view frustum's position from the view group origin point can be set. This option should only be used in vary specific situations such as multi-projector setups.
    4. An example of the XML associated with Views and ViewFrustums can be found in the last XML example below.

AutoDetect Flat, 120 degree horizontal, 40 degree
<SimBase.Document Type="ConfigurationFile" version="3,3">
    <Descr>AceXML Document</Descr>
    <ViewGroups.ViewGroupSet>
        <ViewGroup>
            <Name>View120x40</Name>
            <ViewGroupShape>Flat</ViewGroupShape>
            <SideAngles>-60.000000,60.000000,20.000000,-20.000000</SideAngles>
            <GridSetup>
                <GridSize>0,0</GridSize>
                <EdgeOverlap>-1.000000,-1.000000,-1.000000,-1.000000</EdgeOverlap>
            </GridSetup>
        </ViewGroup>
    </ViewGroups.ViewGroupSet>
</SimBase.Document>
Cylindrical, Manual View Definitions using Viewports
<SimBase.Document Type="ConfigurationFile" version="3,3">
    <Descr>AceXML Document</Descr>
    <ViewGroups.ViewGroupSet>
        <ViewGroup>
            <Name>UsingViewports</Name>
            <SideAngles>-60.000000,60.000000,20.000000,-20.000000</SideAngles>
            <View>
                <Name>LeftMonitor</Name>
                <Viewport>0.000000,0.500000,1.000000,0.000000</Viewport>
                <EdgeOverlap>-2.500000,-2.500000,-5.000000,-5.000000</EdgeOverlap>
            </View>
            <View>
                <Name>RightMonitor</Name>
                <DisplayID>2</DisplayID>
                <Viewport>0.500000,1.000000,1.000000,0.000000</Viewport>
            </View>
        </ViewGroup>
    </ViewGroups.ViewGroupSet>
</SimBase.Document>
Manually Defining Views using ViewFrustums
<SimBase.Document Type="ConfigurationFile" version="3,3">
    <Descr>AceXML Document</Descr>
    <ViewGroups.ViewGroupSet>
        <ViewGroup>
            <Name>Using View Frustum</Name>
            <ViewGroupShape>Flat</ViewGroupShape>
            <View>
                <Name>LeftMonitor</Name>
                <ViewFrustum>
                    <OffsetPBH>0.000000,0.000000,-30.000000</OffsetPBH>
                    <SideAngles>-30.000000,30.000000,20.000000,-20.000000</SideAngles>
                </ViewFrustum>
            </View>
            <View>
                <Name>RightMonitor</Name>
                <DisplayID>2</DisplayID>
                <ViewFrustum>
                    <OffsetPBH>0.000000,0.000000,30.000000</OffsetPBH>
                    <SideAngles>-30.000000,30.000000,20.000000,-20.000000</SideAngles>
                </ViewFrustum>
            </View>
        </ViewGroup>
    </ViewGroups.ViewGroupSet>
</SimBase.Document>
Manually Defining Views using Flat (Off-Axis) ViewFrustums
<SimBase.Document Type="ConfigurationFile" version="3,3">
    <Descr>AceXML Document</Descr>
    <ViewGroups.ViewGroupSet>
        <ViewGroup>
            <Name>OffAxisProjections</Name>
            <ViewGroupShape>Flat</ViewGroupShape>
            <View>
                <Name>LeftMonitor</Name>
                <ViewFrustum>
                    <SideAngles>-60.000000,0.000000,20.000000,-20.000000</SideAngles>
                </ViewFrustum>
            </View>
            <View>
                <Name>RightMonitor</Name>
                <DisplayID>2</DisplayID>
                <ViewFrustum>
                    <SideAngles>0.000000,60.000000,20.000000,-20.000000</SideAngles>
                </ViewFrustum>
            </View>
        </ViewGroup>
    </ViewGroups.ViewGroupSet>
</SimBase.Document>

View Group Properties

The tables that follow provide more details about each XML property and UI element which can be used for view group configuration.

View Group Set

A list of View Groups. Currently only one view group set is supported by a set can contain any number of view groups.
Property Description Default Value(s) Type
ViewGroup A group of views which can be used to create one large display area that spans multiple displays by assigning a portion of the view to each display. None None

Grid Setup

A GridSetup can be used to automate the process of generating view definitions for a view group.
Property Description Default Value(s) Type
GridSize Horizontal and Vertical grid size to use for generating a view group. If these values are set to 0, a view group will be generated based on the windows desktop display settings. 1,1 LONG2
EdgeOverlap Size of display overlap as a percent of display size. Positive values can be used for projector blending, and negative values can be used for bezel correction.
Example: For a 20in by 10in monitor with a half inch bezel, left/right is -2.5 and top/bottom is -5.0
0.0,0.0,0.0,0.0 FLOAT4
FirstDisplayID DisplayID of the top-left display of the grid. IDs will be assigned by incrementing the ID from left to right for each row starting at the top row. 1 ULONG
AutoDetect If true, grid size is ignored and views are generated for each display based on their location on the windows desktop. FALSE BOOL

View Group

A group of views which can be used to create one large display area that spans multiple displays by assigning a portion of the view to each display.
Property Description Default Value(s) Type
Name The name of this View or ViewGroup None TEXT
SideAngles View frustum's half angles in degrees from main axis to sides (allowing for off-axis projection).
Example: A 120x40 degree field of view would be defined as: Left:-60, Right:60, Top:20, Bottom:-20
0,0,0,0 FLOAT4
ViewGroupShape Shape of the virtual display described by this view group. Options are Flat, Cylindrical, and Spherical. Cylindrical or Spherical is recommended for groups with
fields of view wider than 120 degrees to avoid distortion.
Cylindrical ENUM
AllowZoom Allow zooming for this view group. TRUE BOOL
GridSetup A GridSetup can be used to automate the process of generating view definitions for a view group. None None
View Defines the portion of the overall view which will be rendered on a given display. A single view should be limited to about 140 degrees. None None

View

Defines the portion of the overall view which will be rendered on a given display.
Property Description Default Value(s) Type
Name The name of this View or ViewGroup None TEXT
DisplayID DisplayID of the display this view should open on when group is active. 1 ULONG
ViewPort Viewport of this view relative to the entire display group. This will be used to generate a view frustum unless of ViewFrustom is explicitly defined. The Viewport dimensions for the entire group is Left:0, Right:1.0, Bottom:0 Top:1.0. 0,0 FLOAT4
EdgeOverlap Size of display overlap as a percent of display size. Positive values can be used for projector blending, and negative values can be used for bezel correction. Example: For a 20in by 10in monitor with a half inch bezel, left/right is -2.5 and top/bottom is -5.0 0.0,0.0,0.0,0.0 FLOAT4
ViewFrustum Explicitly defines the position, orientation, and field of view of the camera. This is only necessary for advanced display/projector configurations and will be ignored if a non-zero Viewport is provided for a view. None None

View Frustum

Explicitly defines the position, orientation, and field of view of the camera. This is only necessary for advanced display/projector configurations and will be ignored if a non-zero Viewport is provided for a view.
Property Description Default Value(s) Type
SideAngles View frustum's half angles in degrees from main axis to sides (allowing for off-axis projection). Example: A 120x40 degree field of view would be defined as: Left:-60, Right:60, Top:20, Bottom:-20 0,0,0,0 FLOAT4
OffsetPBH View frustum origin offset Pitch, Bank, and Heading angles in degrees for orientation 0,0,0 FLOAT3
OffsetXYZ View frustum origin offset (X, Y, Z) in meters 0,0,0 FLOAT3

Display Properties

Configuration Set

Encapsulates the entire set of configuration settings

Configuration

Name of a configuration associated with a DisplayID that houses all of the configuration data for that display
Property Description Type
Name The name of this element (Display, Plugin, or Parameter). TEXT
Display Contains the settings for specific display (such as a monitor or projector). None

Display

Name of a configuration associated with a DisplayID that houses all of the configuration data for that display
Property Description Default Type
DisplayID An integer index that identifies a display. Views in a ViewGroup are assigned to displays using this value. 1 ULONG
Adapterindex Adapter index of a display output. Adapter index values are assigned in the order outputs are listed by the operating system and often match the display numbers shown in the Windows screen resolution menu. This value may change if displays are disconnected and reconnected. 1 ULONG
MachineID The index of the computer/machine the display is connected to. This values is used to specific displays on Multichannel clients when a simulation session is being distributed across multiple machines. 1 ULONG
Name The name of this element (Display, Plugin, or Parameter). None TEXT
Plugin Houses all of the information about a plugin and its parameters None None

Plugin

A plugin such as a post-process which will be applied to all views on this device.
Property Description Default Type
Name The name of this element (Display, Plugin, or Parameter). None TEXT
Parameter The values passed to the plugin when the plugin is made None None

Parameter

A parameter name/value pair which can be used to configure a plugin.
Property Description Default Type
Name The name of this element (Display, Plugin, or Parameter). None TEXT
Value The value to pass in to a Plugin parameter. This is a TEXT element but it may be interpreted as a numeric value by some Plugins. None TEXT