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
- Open Views->View Group Management.
- Select Displays->Configuration 1.
- Rename "Configuration 1" to a custom name by filling out the "Name" textbox.
- Below "Display" is a list of the current displays. If this list is empty, or needs to be added to, select "Add".
- Select the appropriate display by either double-clicking, or selecting the pencil beside the display name.
- 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.
<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:- Automatically using an AutoDetect GridSetup
- Automatically using a GridSetup with grid size and a starting DisplayID
- Manually by defining a relative Viewport
- Manually using a ViewFrustum
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
- Open Views->View Group Management.
- Select View Groups->ViewGroup 1. 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.
- Rename "ViewGroup 1" to a custom name by filling out the "Name" textbox.
- 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
- 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.
- AllowZoom will either enable or disable the ability to zoom the camera. Yes = Allow zooming.
- GridSetup is the horizontal (X) and vertical (Y) description of the layout of the physical monitors being used to visualize Prepar3D.
- Under GridSetup, select "Add", then select "Edit".
- 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.
- At this point, selecting "Ok" will generate a ViewGroups.xml file that should look exactly as it does below in the first xml example.
-
When in the edit window for GridSetup, there will be 4 groups of options.
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.- Create a new view by repeating steps 1-6 of the example above.
- Repeat steps 3-9 below for each view in the group.
- Select "Add" under the View heading in the ViewGroup editing window.
- After adding a view, double-click that view to open the view editor.
- Customize the name of this view by editing the "Name" field
- 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.
- 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.
- 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.
- 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. - Just like earlier, the first option here is the SideAngles of the frustum.
- Next, there are the OffsetPBH values. These are the Pitch, Bank, and Heading offsets of the view from the view group origin point.
- 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.
- 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
<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
<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
<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
<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 settingsConfiguration
Name of a configuration associated with a DisplayID that houses all of the configuration data for that displayProperty | 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 displayProperty | 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 |