diff --git a/Content/LiveLinkPresets/SteamVRPreset.uasset b/Content/LiveLinkPresets/SteamVRPreset.uasset new file mode 100644 index 0000000000000000000000000000000000000000..e50ea04b70622e8ebdd92dae1e4ac85ada212465 Binary files /dev/null and b/Content/LiveLinkPresets/SteamVRPreset.uasset differ diff --git a/Content/RWTHVRCluster/Config/aixcave_427.ndisplay b/Content/RWTHVRCluster/Config/aixcave_427.ndisplay new file mode 100644 index 0000000000000000000000000000000000000000..4a2fab2d2a08e4e07573ab1fd9b6f4df7322d3d4 --- /dev/null +++ b/Content/RWTHVRCluster/Config/aixcave_427.ndisplay @@ -0,0 +1,3672 @@ +{ + "nDisplay": + { + "description": "nDisplay configuration", + "version": "4.27", + "assetPath": "/RWTHVRToolkit/RWTHVRCluster/Config/aixcave_427.aixcave_427", + "misc": + { + "bFollowLocalPlayerCamera": false, + "bExitOnEsc": true + }, + "scene": + { + "xforms": + { + "cave_origin": + { + "parentId": "", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "cave_center": + { + "parentId": "cave_origin", + "location": + { + "x": 0, + "y": 0, + "z": 165 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "flystick": + { + "parentId": "cave_origin", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "calibratio": + { + "parentId": "cave_origin", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "right_hand_target": + { + "parentId": "cave_origin", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "left_hand_target": + { + "parentId": "cave_origin", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "CaveGun": + { + "parentId": "cave_origin", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "shutter_glasses": + { + "parentId": "cave_origin", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_main": + { + "parentId": "shutter_glasses", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "angle_left": + { + "parentId": "cave_center", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": -89.999984741210938, + "roll": 0 + } + }, + "angle_right": + { + "parentId": "cave_center", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 89.999984741210938, + "roll": 0 + } + }, + "angle_back": + { + "parentId": "cave_center", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": -179.99996948242188, + "roll": 0 + } + }, + "display_front_upper_left": + { + "parentId": "cave_center", + "location": + { + "x": 262.5, + "y": -105.35750579833984, + "z": 66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_front_upper_right": + { + "parentId": "cave_center", + "location": + { + "x": 262.5, + "y": 105.35750579833984, + "z": 66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_front_lower_left": + { + "parentId": "cave_center", + "location": + { + "x": 262.5, + "y": -105.35750579833984, + "z": -66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_front_lower_right": + { + "parentId": "cave_center", + "location": + { + "x": 262.5, + "y": 105.35750579833984, + "z": -66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_left_upper_left": + { + "parentId": "angle_left", + "location": + { + "x": 262.4998779296875, + "y": -105.35745239257812, + "z": 66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_left_upper_right": + { + "parentId": "angle_left", + "location": + { + "x": 262.4998779296875, + "y": 105.35749816894531, + "z": 66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_left_lower_left": + { + "parentId": "angle_left", + "location": + { + "x": 262.4998779296875, + "y": -105.35745239257812, + "z": -66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_left_lower_right": + { + "parentId": "angle_left", + "location": + { + "x": 262.4998779296875, + "y": 105.35749816894531, + "z": -66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_right_upper_left": + { + "parentId": "angle_right", + "location": + { + "x": 262.5, + "y": -105.35751342773438, + "z": 66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_right_upper_right": + { + "parentId": "angle_right", + "location": + { + "x": 262.5, + "y": 105.35748291015625, + "z": 66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_right_lower_left": + { + "parentId": "angle_right", + "location": + { + "x": 262.5, + "y": -105.35751342773438, + "z": -66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_right_lower_right": + { + "parentId": "angle_right", + "location": + { + "x": 262.5, + "y": 105.35748291015625, + "z": -66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_back_upper_left": + { + "parentId": "angle_back", + "location": + { + "x": 262.499755859375, + "y": -105.35744476318359, + "z": 66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_back_upper_right": + { + "parentId": "angle_back", + "location": + { + "x": 262.499755859375, + "y": 105.35744476318359, + "z": 66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_back_lower_left": + { + "parentId": "angle_back", + "location": + { + "x": 262.499755859375, + "y": -105.35744476318359, + "z": -66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_back_lower_right": + { + "parentId": "angle_back", + "location": + { + "x": 262.499755859375, + "y": 105.35744476318359, + "z": -66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_ground_front_upper_left": + { + "parentId": "angle_ground", + "location": + { + "x": -1.52587890625e-05, + "y": -112.5, + "z": 168.74992370605469 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_ground_front_upper_right": + { + "parentId": "angle_ground", + "location": + { + "x": -1.52587890625e-05, + "y": 112.5, + "z": 168.74992370605469 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_ground_front_lower_left": + { + "parentId": "angle_ground", + "location": + { + "x": 1.52587890625e-05, + "y": -112.5, + "z": 93.749954223632812 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_ground_front_lower_right": + { + "parentId": "angle_ground", + "location": + { + "x": 1.52587890625e-05, + "y": 112.5, + "z": 93.749954223632812 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_ground_back_upper_left": + { + "parentId": "angle_ground", + "location": + { + "x": -1.52587890625e-05, + "y": -112.5, + "z": -93.749954223632812 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_ground_back_upper_right": + { + "parentId": "angle_ground", + "location": + { + "x": -1.52587890625e-05, + "y": 112.5, + "z": -93.749954223632812 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_ground_back_lower_left": + { + "parentId": "angle_ground", + "location": + { + "x": 1.52587890625e-05, + "y": -112.5, + "z": -168.74992370605469 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_ground_back_lower_right": + { + "parentId": "angle_ground", + "location": + { + "x": 1.52587890625e-05, + "y": 112.5, + "z": -168.74992370605469 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "angle_ground": + { + "parentId": "cave_center", + "location": + { + "x": 0, + "y": 0, + "z": -165 + }, + "rotation": + { + "pitch": -90, + "yaw": 0, + "roll": 0 + } + } + }, + "cameras": + { + "DefaultViewPoint": + { + "interpupillaryDistance": 6.4000000953674316, + "swapEyes": false, + "stereoOffset": "none", + "parentId": "", + "location": + { + "x": 0.000152587890625, + "y": -396.54248046875, + "z": 94.846038818359375 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "camera_dynamic_left": + { + "interpupillaryDistance": 6.4000000953674316, + "swapEyes": false, + "stereoOffset": "left", + "parentId": "shutter_glasses", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "camera_dynamic_right": + { + "interpupillaryDistance": 6.4000000953674316, + "swapEyes": false, + "stereoOffset": "right", + "parentId": "shutter_glasses", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "camera_dynamic_main": + { + "interpupillaryDistance": 6.4000000953674316, + "swapEyes": false, + "stereoOffset": "none", + "parentId": "shutter_glasses", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + } + }, + "screens": + { + "screen_main": + { + "size": + { + "width": 43.333301544189453, + "height": 27.083297729492188 + }, + "parentId": "display_main", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_front_upper_left": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_front_upper_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_front_upper_right": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_front_upper_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_front_lower_left": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_front_lower_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_front_lower_right": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_front_lower_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_left_upper_left": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_left_upper_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_left_upper_right": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_left_upper_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_left_lower_left": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_left_lower_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_left_lower_right": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_left_lower_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_right_upper_left": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_right_upper_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_right_upper_right": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_right_upper_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_right_lower_left": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_right_lower_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_right_lower_right": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_right_lower_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_back_upper_left": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_back_upper_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_back_upper_right": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_back_upper_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_back_lower_left": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_back_lower_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_back_lower_right": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_back_lower_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_ground_front_upper_left": + { + "size": + { + "width": 300, + "height": 187.5 + }, + "parentId": "display_ground_front_upper_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_ground_front_upper_right": + { + "size": + { + "width": 300, + "height": 187.5 + }, + "parentId": "display_ground_front_upper_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_ground_front_lower_left": + { + "size": + { + "width": 300, + "height": 187.5 + }, + "parentId": "display_ground_front_lower_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_ground_front_lower_right": + { + "size": + { + "width": 300, + "height": 187.5 + }, + "parentId": "display_ground_front_lower_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_ground_back_upper_left": + { + "size": + { + "width": 300, + "height": 187.5 + }, + "parentId": "display_ground_back_upper_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_ground_back_upper_right": + { + "size": + { + "width": 300, + "height": 187.5 + }, + "parentId": "display_ground_back_upper_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_ground_back_lower_left": + { + "size": + { + "width": 300, + "height": 187.5 + }, + "parentId": "display_ground_back_lower_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_ground_back_lower_right": + { + "size": + { + "width": 300, + "height": 187.5 + }, + "parentId": "display_ground_back_lower_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + } + } + }, + "cluster": + { + "masterNode": + { + "id": "node_main", + "ports": + { + "ClusterSync": 41001, + "RenderSync": 41002, + "ClusterEventsJson": 41003, + "ClusterEventsBinary": 41004 + } + }, + "sync": + { + "renderSyncPolicy": + { + "type": "ethernet", + "parameters": + { + } + }, + "inputSyncPolicy": + { + "type": "ReplicateMaster", + "parameters": + { + } + } + }, + "network": + { + "ConnectRetriesAmount": "300", + "ConnectRetryDelay": "1000", + "GameStartBarrierTimeout": "600000", + "FrameStartBarrierTimeout": "600000", + "FrameEndBarrierTimeout": "600000", + "RenderSyncBarrierTimeout": "600000" + }, + "nodes": + { + "node_main": + { + "host": "10.0.1.29", + "sound": true, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_main": + { + "camera": "camera_dynamic_main", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1600, + "h": 1000 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_main" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_ful_left_eye": + { + "host": "10.0.1.1", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_front_upper_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_front_upper_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_ful_right_eye": + { + "host": "10.0.1.1", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_front_upper_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_front_upper_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_fur_left_eye": + { + "host": "10.0.1.2", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_front_upper_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_front_upper_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_fur_right_eye": + { + "host": "10.0.1.2", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_front_upper_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_front_upper_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_fll_left_eye": + { + "host": "10.0.1.3", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_front_lower_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_front_lower_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_fll_right_eye": + { + "host": "10.0.1.3", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_front_lower_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_front_lower_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_flr_left_eye": + { + "host": "10.0.1.4", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_front_lower_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_front_lower_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_flr_right_eye": + { + "host": "10.0.1.4", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_front_lower_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_front_lower_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_lul_left_eye": + { + "host": "10.0.1.5", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_left_upper_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_left_upper_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_lul_right_eye": + { + "host": "10.0.1.5", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_left_upper_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_left_upper_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_lur_left_eye": + { + "host": "10.0.1.6", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_left_upper_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_left_upper_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_lur_right_eye": + { + "host": "10.0.1.6", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_left_upper_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_left_upper_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_lll_left_eye": + { + "host": "10.0.1.7", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_left_lower_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_left_lower_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_lll_right_eye": + { + "host": "10.0.1.7", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_left_lower_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_left_lower_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_llr_left_eye": + { + "host": "10.0.1.8", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_left_lower_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_left_lower_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_llr_right_eye": + { + "host": "10.0.1.8", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_left_lower_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_left_lower_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_rul_left_eye": + { + "host": "10.0.1.9", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_right_upper_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_right_upper_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_rul_right_eye": + { + "host": "10.0.1.9", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_right_upper_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_right_upper_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_rur_left_eye": + { + "host": "10.0.1.10", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_right_upper_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_right_upper_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_rur_right_eye": + { + "host": "10.0.1.10", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_right_upper_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_right_upper_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_rll_left_eye": + { + "host": "10.0.1.11", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_right_lower_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_right_lower_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_rll_right_eye": + { + "host": "10.0.1.11", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_right_lower_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_right_lower_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_rlr_left_eye": + { + "host": "10.0.1.12", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_right_lower_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_right_lower_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_rlr_right_eye": + { + "host": "10.0.1.12", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_right_lower_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_right_lower_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_bul_left_eye": + { + "host": "10.0.1.13", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_back_upper_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_back_upper_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_bul_right_eye": + { + "host": "10.0.1.13", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_back_upper_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_back_upper_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_bur_left_eye": + { + "host": "10.0.1.14", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_back_upper_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_back_upper_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_bur_right_eye": + { + "host": "10.0.1.14", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_back_upper_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_back_upper_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_bll_left_eye": + { + "host": "10.0.1.15", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_back_lower_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_back_lower_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_bll_right_eye": + { + "host": "10.0.1.15", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_back_lower_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_back_lower_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_blr_left_eye": + { + "host": "10.0.1.16", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_back_lower_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_back_lower_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_blr_right_eye": + { + "host": "10.0.1.16", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_back_lower_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_back_lower_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gful_left_eye": + { + "host": "10.0.1.17", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_front_upper_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_front_upper_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gful_right_eye": + { + "host": "10.0.1.17", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_front_upper_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_front_upper_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gfur_left_eye": + { + "host": "10.0.1.19", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_front_upper_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_front_upper_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gfur_right_eye": + { + "host": "10.0.1.19", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_front_upper_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_front_upper_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gfll_left_eye": + { + "host": "10.0.1.18", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_front_lower_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_front_lower_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gfll_right_eye": + { + "host": "10.0.1.18", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_front_lower_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_front_lower_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gflr_left_eye": + { + "host": "10.0.1.20", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_front_lower_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_front_lower_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gflr_right_eye": + { + "host": "10.0.1.20", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_front_lower_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_front_lower_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gbul_left_eye": + { + "host": "10.0.1.21", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_back_upper_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_back_upper_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gbul_right_eye": + { + "host": "10.0.1.21", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_back_upper_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_back_upper_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gbur_left_eye": + { + "host": "10.0.1.23", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_back_upper_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_back_upper_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gbur_right_eye": + { + "host": "10.0.1.23", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_back_upper_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_back_upper_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gbll_left_eye": + { + "host": "10.0.1.22", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_back_lower_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_back_lower_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gbll_right_eye": + { + "host": "10.0.1.22", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_back_lower_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_back_lower_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gblr_left_eye": + { + "host": "10.0.1.24", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_back_lower_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_back_lower_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gblr_right_eye": + { + "host": "10.0.1.24", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 0, + "h": 0 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_back_lower_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_back_lower_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + } + } + }, + "customParameters": + { + "Hardware_Platform": "AixCAVE" + }, + "diagnostics": + { + "simulateLag": false, + "minLagTime": 0, + "maxLagTime": 0.5 + } + } +} \ No newline at end of file diff --git a/Content/RWTHVRCluster/Config/aixcave_427.uasset b/Content/RWTHVRCluster/Config/aixcave_427.uasset new file mode 100644 index 0000000000000000000000000000000000000000..fbda144eb9becf50bf5debbdd035427282ccae2e Binary files /dev/null and b/Content/RWTHVRCluster/Config/aixcave_427.uasset differ diff --git a/Content/RWTHVRCluster/Config/aixcave_427_stereo.ndisplay b/Content/RWTHVRCluster/Config/aixcave_427_stereo.ndisplay new file mode 100644 index 0000000000000000000000000000000000000000..c1bb8a2db096d7269c99001410a73617b81ec6f7 --- /dev/null +++ b/Content/RWTHVRCluster/Config/aixcave_427_stereo.ndisplay @@ -0,0 +1,3067 @@ +{ + "nDisplay": + { + "description": "nDisplay configuration", + "version": "4.27", + "assetPath": "/RWTHVRToolkit/RWTHVRCluster/Config/aixcave_427_stereo.aixcave_427_stereo", + "misc": + { + "bFollowLocalPlayerCamera": false, + "bExitOnEsc": true + }, + "scene": + { + "xforms": + { + "cave_origin": + { + "parentId": "", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "cave_center": + { + "parentId": "cave_origin", + "location": + { + "x": 0, + "y": 0, + "z": 165 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "flystick": + { + "parentId": "cave_origin", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "calibratio": + { + "parentId": "cave_origin", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "right_hand_target": + { + "parentId": "cave_origin", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "left_hand_target": + { + "parentId": "cave_origin", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "CaveGun": + { + "parentId": "cave_origin", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "shutter_glasses": + { + "parentId": "cave_origin", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_main": + { + "parentId": "shutter_glasses", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "angle_left": + { + "parentId": "cave_center", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": -89.999984741210938, + "roll": 0 + } + }, + "angle_right": + { + "parentId": "cave_center", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 89.999984741210938, + "roll": 0 + } + }, + "angle_back": + { + "parentId": "cave_center", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": -179.99996948242188, + "roll": 0 + } + }, + "display_front_upper_left": + { + "parentId": "cave_center", + "location": + { + "x": 262.5, + "y": -105.35750579833984, + "z": 66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_front_upper_right": + { + "parentId": "cave_center", + "location": + { + "x": 262.5, + "y": 105.35750579833984, + "z": 66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_front_lower_left": + { + "parentId": "cave_center", + "location": + { + "x": 262.5, + "y": -105.35750579833984, + "z": -66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_front_lower_right": + { + "parentId": "cave_center", + "location": + { + "x": 262.5, + "y": 105.35750579833984, + "z": -66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_left_upper_left": + { + "parentId": "angle_left", + "location": + { + "x": 262.4998779296875, + "y": -105.35745239257812, + "z": 66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_left_upper_right": + { + "parentId": "angle_left", + "location": + { + "x": 262.4998779296875, + "y": 105.35749816894531, + "z": 66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_left_lower_left": + { + "parentId": "angle_left", + "location": + { + "x": 262.4998779296875, + "y": -105.35745239257812, + "z": -66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_left_lower_right": + { + "parentId": "angle_left", + "location": + { + "x": 262.4998779296875, + "y": 105.35749816894531, + "z": -66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_right_upper_left": + { + "parentId": "angle_right", + "location": + { + "x": 262.5, + "y": -105.35751342773438, + "z": 66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_right_upper_right": + { + "parentId": "angle_right", + "location": + { + "x": 262.5, + "y": 105.35748291015625, + "z": 66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_right_lower_left": + { + "parentId": "angle_right", + "location": + { + "x": 262.5, + "y": -105.35751342773438, + "z": -66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_right_lower_right": + { + "parentId": "angle_right", + "location": + { + "x": 262.5, + "y": 105.35748291015625, + "z": -66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_back_upper_left": + { + "parentId": "angle_back", + "location": + { + "x": 262.499755859375, + "y": -105.35744476318359, + "z": 66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_back_upper_right": + { + "parentId": "angle_back", + "location": + { + "x": 262.499755859375, + "y": 105.35744476318359, + "z": 66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_back_lower_left": + { + "parentId": "angle_back", + "location": + { + "x": 262.499755859375, + "y": -105.35744476318359, + "z": -66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_back_lower_right": + { + "parentId": "angle_back", + "location": + { + "x": 262.499755859375, + "y": 105.35744476318359, + "z": -66.785751342773438 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_ground_front_upper_left": + { + "parentId": "angle_ground", + "location": + { + "x": -1.52587890625e-05, + "y": -112.5, + "z": 168.74992370605469 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_ground_front_upper_right": + { + "parentId": "angle_ground", + "location": + { + "x": -1.52587890625e-05, + "y": 112.5, + "z": 168.74992370605469 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_ground_front_lower_left": + { + "parentId": "angle_ground", + "location": + { + "x": 1.52587890625e-05, + "y": -112.5, + "z": 93.749954223632812 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_ground_front_lower_right": + { + "parentId": "angle_ground", + "location": + { + "x": 1.52587890625e-05, + "y": 112.5, + "z": 93.749954223632812 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_ground_back_upper_left": + { + "parentId": "angle_ground", + "location": + { + "x": -1.52587890625e-05, + "y": -112.5, + "z": -93.749954223632812 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_ground_back_upper_right": + { + "parentId": "angle_ground", + "location": + { + "x": -1.52587890625e-05, + "y": 112.5, + "z": -93.749954223632812 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_ground_back_lower_left": + { + "parentId": "angle_ground", + "location": + { + "x": 1.52587890625e-05, + "y": -112.5, + "z": -168.74992370605469 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "display_ground_back_lower_right": + { + "parentId": "angle_ground", + "location": + { + "x": 1.52587890625e-05, + "y": 112.5, + "z": -168.74992370605469 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "angle_ground": + { + "parentId": "cave_center", + "location": + { + "x": 0, + "y": 0, + "z": -165 + }, + "rotation": + { + "pitch": -90, + "yaw": 0, + "roll": 0 + } + } + }, + "cameras": + { + "DefaultViewPoint": + { + "interpupillaryDistance": 6.4000000953674316, + "swapEyes": false, + "stereoOffset": "none", + "parentId": "", + "location": + { + "x": 0.000152587890625, + "y": -396.54248046875, + "z": 94.846038818359375 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "camera_dynamic_left": + { + "interpupillaryDistance": 6.4000000953674316, + "swapEyes": false, + "stereoOffset": "left", + "parentId": "shutter_glasses", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "camera_dynamic_right": + { + "interpupillaryDistance": 6.4000000953674316, + "swapEyes": false, + "stereoOffset": "right", + "parentId": "shutter_glasses", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "camera_dynamic_main": + { + "interpupillaryDistance": 6.4000000953674316, + "swapEyes": false, + "stereoOffset": "none", + "parentId": "shutter_glasses", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "camera_dynamic_stereo": + { + "interpupillaryDistance": 6.4000000953674316, + "swapEyes": false, + "stereoOffset": "none", + "parentId": "shutter_glasses", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + } + }, + "screens": + { + "screen_main": + { + "size": + { + "width": 43.333301544189453, + "height": 27.083297729492188 + }, + "parentId": "display_main", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_front_upper_left": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_front_upper_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_front_upper_right": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_front_upper_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_front_lower_left": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_front_lower_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_front_lower_right": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_front_lower_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_left_upper_left": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_left_upper_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_left_upper_right": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_left_upper_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_left_lower_left": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_left_lower_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_left_lower_right": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_left_lower_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_right_upper_left": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_right_upper_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_right_upper_right": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_right_upper_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_right_lower_left": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_right_lower_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_right_lower_right": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_right_lower_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_back_upper_left": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_back_upper_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_back_upper_right": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_back_upper_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_back_lower_left": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_back_lower_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_back_lower_right": + { + "size": + { + "width": 314.28500366210938, + "height": 196.42849731445312 + }, + "parentId": "display_back_lower_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_ground_front_upper_left": + { + "size": + { + "width": 300, + "height": 187.5 + }, + "parentId": "display_ground_front_upper_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_ground_front_upper_right": + { + "size": + { + "width": 300, + "height": 187.5 + }, + "parentId": "display_ground_front_upper_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_ground_front_lower_left": + { + "size": + { + "width": 300, + "height": 187.5 + }, + "parentId": "display_ground_front_lower_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_ground_front_lower_right": + { + "size": + { + "width": 300, + "height": 187.5 + }, + "parentId": "display_ground_front_lower_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_ground_back_upper_left": + { + "size": + { + "width": 300, + "height": 187.5 + }, + "parentId": "display_ground_back_upper_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_ground_back_upper_right": + { + "size": + { + "width": 300, + "height": 187.5 + }, + "parentId": "display_ground_back_upper_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_ground_back_lower_left": + { + "size": + { + "width": 300, + "height": 187.5 + }, + "parentId": "display_ground_back_lower_left", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + }, + "screen_ground_back_lower_right": + { + "size": + { + "width": 300, + "height": 187.5 + }, + "parentId": "display_ground_back_lower_right", + "location": + { + "x": 0, + "y": 0, + "z": 0 + }, + "rotation": + { + "pitch": 0, + "yaw": 0, + "roll": 0 + } + } + } + }, + "cluster": + { + "masterNode": + { + "id": "node_main", + "ports": + { + "ClusterSync": 41001, + "RenderSync": 41002, + "ClusterEventsJson": 41003, + "ClusterEventsBinary": 41004 + } + }, + "sync": + { + "renderSyncPolicy": + { + "type": "ethernet", + "parameters": + { + } + }, + "inputSyncPolicy": + { + "type": "ReplicateMaster", + "parameters": + { + } + } + }, + "network": + { + "ConnectRetriesAmount": "300", + "ConnectRetryDelay": "1000", + "GameStartBarrierTimeout": "600000", + "FrameStartBarrierTimeout": "600000", + "FrameEndBarrierTimeout": "600000", + "RenderSyncBarrierTimeout": "600000" + }, + "nodes": + { + "node_main": + { + "host": "10.0.1.29", + "sound": true, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1600, + "h": 1000 + }, + "postprocess": + { + }, + "viewports": + { + "vp_main": + { + "camera": "camera_dynamic_main", + "bufferRatio": 1, + "gPUIndex": -1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1600, + "h": 1000 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_main" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_ful": + { + "host": "10.0.1.1", + "sound": false, + "fullScreen": false, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_front_upper_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_front_upper_left" + } + } + }, + "vp_front_upper_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "Simple", + "parameters": + { + "screen": "screen_front_upper_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_fur_left_eye": + { + "host": "10.0.1.2", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_front_upper_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_front_upper_right" + } + } + }, + "vp_front_upper_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_front_upper_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_fll_left_eye": + { + "host": "10.0.1.3", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_front_lower_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_front_lower_left" + } + } + }, + "vp_front_lower_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_front_lower_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_flr_left_eye": + { + "host": "10.0.1.4", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_front_lower_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_front_lower_right" + } + } + }, + "vp_front_lower_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_front_lower_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_lul_left_eye": + { + "host": "10.0.1.5", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_left_upper_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_left_upper_left" + } + } + }, + "vp_left_upper_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_left_upper_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_lur_left_eye": + { + "host": "10.0.1.6", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_left_upper_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_left_upper_right" + } + } + }, + "vp_left_upper_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_left_upper_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_lll_left_eye": + { + "host": "10.0.1.7", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_left_lower_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_left_lower_left" + } + } + }, + "vp_left_lower_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_left_lower_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_llr_left_eye": + { + "host": "10.0.1.8", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_left_lower_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_left_lower_right" + } + } + }, + "vp_left_lower_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_left_lower_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_rul_left_eye": + { + "host": "10.0.1.9", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_right_upper_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_right_upper_left" + } + } + }, + "vp_right_upper_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_right_upper_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_rur": + { + "host": "10.0.1.10", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_right_upper_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_right_upper_right" + } + } + }, + "vp_right_upper_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_right_upper_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_rll_left_eye": + { + "host": "10.0.1.11", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_right_lower_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_right_lower_left" + } + } + }, + "vp_right_lower_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_right_lower_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_rlr_left_eye": + { + "host": "10.0.1.12", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_right_lower_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_right_lower_right" + } + } + }, + "vp_right_lower_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_right_lower_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_bul_left_eye": + { + "host": "10.0.1.13", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_back_upper_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_back_upper_left" + } + } + }, + "vp_back_upper_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_back_upper_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_bur_left_eye": + { + "host": "10.0.1.14", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_back_upper_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_back_upper_right" + } + } + }, + "vp_back_upper_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_back_upper_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_bll_left_eye": + { + "host": "10.0.1.15", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_back_lower_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_back_lower_left" + } + } + }, + "vp_back_lower_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_back_lower_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_blr_left_eye": + { + "host": "10.0.1.16", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_back_lower_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_back_lower_right" + } + } + }, + "vp_back_lower_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_back_lower_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gful_left_eye": + { + "host": "10.0.1.17", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_front_upper_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_front_upper_left" + } + } + }, + "vp_ground_front_upper_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_front_upper_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gfur_left_eye": + { + "host": "10.0.1.19", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_front_upper_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_front_upper_right" + } + } + }, + "vp_ground_front_upper_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_front_upper_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gfll_left_eye": + { + "host": "10.0.1.18", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_front_lower_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_front_lower_left" + } + } + }, + "vp_ground_front_lower_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_front_lower_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gflr_left_eye": + { + "host": "10.0.1.20", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_front_lower_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_front_lower_right" + } + } + }, + "vp_ground_front_lower_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_front_lower_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gbul_left_eye": + { + "host": "10.0.1.21", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_back_upper_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_back_upper_left" + } + } + }, + "vp_ground_back_upper_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_back_upper_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gbur_left_eye": + { + "host": "10.0.1.23", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_back_upper_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_back_upper_right" + } + } + }, + "vp_ground_back_upper_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_back_upper_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gbll_left_eye": + { + "host": "10.0.1.22", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_back_lower_left_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_back_lower_left" + } + } + }, + "vp_ground_back_lower_left_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_back_lower_left" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + }, + "node_gblr_left_eye": + { + "host": "10.0.1.24", + "sound": false, + "fullScreen": true, + "window": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "postprocess": + { + }, + "viewports": + { + "vp_ground_back_lower_right_LE": + { + "camera": "camera_dynamic_left", + "bufferRatio": 1, + "gPUIndex": 0, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_back_lower_right" + } + } + }, + "vp_ground_back_lower_right_RE": + { + "camera": "camera_dynamic_right", + "bufferRatio": 1, + "gPUIndex": 1, + "allowCrossGPUTransfer": false, + "isShared": false, + "region": + { + "x": 0, + "y": 0, + "w": 1920, + "h": 1200 + }, + "projectionPolicy": + { + "type": "simple", + "parameters": + { + "screen": "screen_ground_back_lower_right" + } + } + } + }, + "outputRemap": + { + "bEnable": false, + "dataSource": "mesh", + "staticMeshAsset": "", + "externalFile": "" + } + } + } + }, + "customParameters": + { + "Hardware_Platform": "AixCAVE" + }, + "diagnostics": + { + "simulateLag": false, + "minLagTime": 0, + "maxLagTime": 0.5 + } + } +} \ No newline at end of file diff --git a/Content/RWTHVRCluster/Config/aixcave_427_stereo.uasset b/Content/RWTHVRCluster/Config/aixcave_427_stereo.uasset new file mode 100644 index 0000000000000000000000000000000000000000..efe72c80f57453a40ea1826355ac2bcae2947192 Binary files /dev/null and b/Content/RWTHVRCluster/Config/aixcave_427_stereo.uasset differ diff --git a/Content/RWTHVRCluster/Maps/Example_Cave.umap b/Content/RWTHVRCluster/Maps/Example_Cave.umap new file mode 100644 index 0000000000000000000000000000000000000000..3b9d0dd7af7f596ebad3638a8623bd2fdefaf2d9 Binary files /dev/null and b/Content/RWTHVRCluster/Maps/Example_Cave.umap differ diff --git a/RWTHVRToolkit.uplugin b/RWTHVRToolkit.uplugin index 8c94abd9cf56285d1b426766502ad364015852ec..4203172d9f5ce7321aecf26a2e9ed2c9ad7be423 100644 --- a/RWTHVRToolkit.uplugin +++ b/RWTHVRToolkit.uplugin @@ -48,6 +48,10 @@ { "Name": "nDisplay", "Enabled": true - } + }, + { + "Name": "LiveLink", + "Enabled": true + } ] } \ No newline at end of file diff --git a/Source/RWTHVRToolkit/Private/Pawn/BasicVRInteractionComponent.cpp b/Source/RWTHVRToolkit/Private/Pawn/BasicVRInteractionComponent.cpp index b9e62ccb20e8a3da5749ef720637e1989b910381..49df1bd3574dc6277f9900b2bc10a4f45ae791a8 100644 --- a/Source/RWTHVRToolkit/Private/Pawn/BasicVRInteractionComponent.cpp +++ b/Source/RWTHVRToolkit/Private/Pawn/BasicVRInteractionComponent.cpp @@ -11,6 +11,7 @@ #include "Misc/Optional.h" #include "DrawDebugHelpers.h" #include "Components/WidgetComponent.h" +#include "UObject/ConstructorHelpers.h" DEFINE_LOG_CATEGORY(LogVRInteractionComponent); diff --git a/Source/RWTHVRToolkit/Private/Pawn/UniversalTrackedComponent.cpp b/Source/RWTHVRToolkit/Private/Pawn/UniversalTrackedComponent.cpp index cae5d5019ec27d29e8b3639276484f6286179135..78f05d8357b7d8724f51348ca0bad0831091b386 100644 --- a/Source/RWTHVRToolkit/Private/Pawn/UniversalTrackedComponent.cpp +++ b/Source/RWTHVRToolkit/Private/Pawn/UniversalTrackedComponent.cpp @@ -3,19 +3,20 @@ #include "Pawn/UniversalTrackedComponent.h" - #include "Camera/CameraComponent.h" #include "Utility/VirtualRealityUtilities.h" +#include "Roles/LiveLinkTransformTypes.h" +#include "ILiveLinkClient.h" + +DEFINE_LOG_CATEGORY(LogUniversalTrackedComponent); // Sets default values for this component's properties UUniversalTrackedComponent::UUniversalTrackedComponent() { - // Set this component to be initialized when the game starts, and to be ticked every frame. You can turn these features - // off to improve performance if you don't need them. PrimaryComponentTick.bCanEverTick = true; + PrimaryComponentTick.TickGroup = ETickingGroup::TG_PrePhysics; } - void UUniversalTrackedComponent::SetShowDeviceModel(const bool bShowControllerModel) { if (!UVirtualRealityUtilities::IsHeadMountedMode() || TrackedComponent == nullptr) return; @@ -30,14 +31,16 @@ void UUniversalTrackedComponent::BeginPlay() if (UVirtualRealityUtilities::IsHeadMountedMode()) { - if(ProxyType == ETrackedComponentType::TCT_HEAD) + if (ProxyType == ETrackedComponentType::TCT_HEAD) { TrackedComponent = GetOwner()->FindComponentByClass<UCameraComponent>(); - }else + } + else { /* Spawn Motion Controller Components in HMD Mode*/ UMotionControllerComponent* MotionController = Cast<UMotionControllerComponent>(GetOwner()->AddComponentByClass(UMotionControllerComponent::StaticClass(), false, FTransform::Identity, false)); + // Todo: If bAlwaysUseLiveLinkTracking is true, those should be sourced by LiveLink switch(ProxyType) { case ETrackedComponentType::TCT_TRACKER_1: @@ -47,6 +50,7 @@ void UUniversalTrackedComponent::BeginPlay() MotionController->SetTrackingMotionSource(FName("Special_2")); break; case ETrackedComponentType::TCT_RIGHT_HAND: + MotionController->SetTrackingMotionSource(FName("Right")); MotionController->SetTrackingMotionSource(FName("Right")); break; case ETrackedComponentType::TCT_LEFT_HAND: @@ -58,7 +62,13 @@ void UUniversalTrackedComponent::BeginPlay() TrackedComponent = MotionController; } - }else if(UVirtualRealityUtilities::IsDesktopMode()){ + if (TrackedComponent) + AttachToComponent(Cast<USceneComponent>(TrackedComponent), FAttachmentTransformRules::SnapToTargetIncludingScale); + + } + // Check for bAlwaysUseLiveLinkTracking here too in case we want to use LiveLink in Editor/Desktop mode. + else if (UVirtualRealityUtilities::IsDesktopMode() && !bAlwaysUseLiveLinkTracking) + { switch(ProxyType) { case ETrackedComponentType::TCT_RIGHT_HAND: @@ -71,40 +81,84 @@ void UUniversalTrackedComponent::BeginPlay() TrackedComponent = GetOwner()->GetRootComponent(); break; } + if (TrackedComponent) AttachToComponent(Cast<USceneComponent>(TrackedComponent), FAttachmentTransformRules::SnapToTargetIncludingScale); + + } + // If we're either in the cave or using LiveLink, set it up here. Might want to differentiate between the two cases later on, + // for now both should be equivalent. Maybe set up some additional stuff automatically like presets etc. + else if (UVirtualRealityUtilities::IsRoomMountedMode() || bAlwaysUseLiveLinkTracking) + { + // Instead of using the clumsy LiveLinkComponentController, we just directly check the LiveLink Data in Tick later on. + // Set up this Component to Tick, and check weather Subject and Role is set. + TrackedComponent = this; + bUseLiveLinkTracking = true; // override this in case someone forgot to set it. + if (SubjectRepresentation.Subject.IsNone() || SubjectRepresentation.Role == nullptr) + { + UE_LOG(LogUniversalTrackedComponent, Error, TEXT("UUniversalTrackedComponent::BeginPlay(): No LiveLink Subject or Role is set! Tracking will not work")); + } + SetComponentTickEnabled(true); + } +} + +void UUniversalTrackedComponent::PostLoad() +{ + Super::PostLoad(); + + // This is required in PostLoad (and theoretically in OnComponentCreated too) because just setting this in + // the constructor or PostInitializeProperties will load the CDO's property values. + // Just calling it in BeginPlay() won't let us see the LiveLink preview in the editor. + bTickInEditor = bAlwaysUseLiveLinkTracking; + PrimaryComponentTick.bStartWithTickEnabled = bAlwaysUseLiveLinkTracking; +} + +#if WITH_EDITOR +void UUniversalTrackedComponent::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) +{ + // Catch the change to bAlwaysUseLiveLinkTracking, and disable/enable tick respectively for in-editor tracking. + const FName PropertyName(PropertyChangedEvent.GetPropertyName()); + if(PropertyName == GET_MEMBER_NAME_CHECKED(UUniversalTrackedComponent, bAlwaysUseLiveLinkTracking)) + { + bTickInEditor = bAlwaysUseLiveLinkTracking; + SetComponentTickEnabled(bAlwaysUseLiveLinkTracking); } - - if(TrackedComponent) AttachToComponent(TrackedComponent, FAttachmentTransformRules::SnapToTargetIncludingScale); + Super::PostEditChangeProperty(PropertyChangedEvent); } +#endif + void UUniversalTrackedComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) { Super::TickComponent(DeltaTime, TickType, ThisTickFunction); - - if(TrackedComponent) return; /* Already attached */ - /* Test for presence every frame and add as soon as they are there */ - if (UVirtualRealityUtilities::IsRoomMountedMode()) - { - switch(ProxyType) - { - case ETrackedComponentType::TCT_RIGHT_HAND: - case ETrackedComponentType::TCT_LEFT_HAND: - TrackedComponent = GetComponentForSelectedAttachment(AttachementType); - break; - case ETrackedComponentType::TCT_HEAD: - TrackedComponent = UVirtualRealityUtilities::GetNamedClusterComponent(ENamedClusterComponent::NCC_SHUTTERGLASSES); - break; - case ETrackedComponentType::TCT_TRACKER_1: - case ETrackedComponentType::TCT_TRACKER_2: - TrackedComponent = GetOwner()->GetRootComponent(); - break; - } + // Check whether we need to update the component with new LiveLink data. This is either the case if + // nDisplay uses bUseLiveLinkTracking (Play Mode), or if bAlwaysUseLiveLinkTracking is true, then we tick both in Play Mode and Editor. + const bool bEvaluateLiveLink = bUseLiveLinkTracking || bAlwaysUseLiveLinkTracking; - if(TrackedComponent) AttachToComponent(TrackedComponent, FAttachmentTransformRules::SnapToTargetIncludingScale); + if(!bEvaluateLiveLink || SubjectRepresentation.Subject.IsNone() || SubjectRepresentation.Role == nullptr) + { + return; } + + // Get the LiveLink interface and evaluate the current existing frame data for the given Subject and Role. + ILiveLinkClient& LiveLinkClient = IModularFeatures::Get().GetModularFeature<ILiveLinkClient>(ILiveLinkClient::ModularFeatureName); + FLiveLinkSubjectFrameData SubjectData; + const bool bHasValidData = LiveLinkClient.EvaluateFrame_AnyThread(SubjectRepresentation.Subject, SubjectRepresentation.Role, SubjectData); + + if(!bHasValidData) + return; + + // Assume we are using a Transform Role to track the components! This is a slightly dangerous assumption, and could be further improved. + const FLiveLinkTransformStaticData* StaticData = SubjectData.StaticData.Cast<FLiveLinkTransformStaticData>(); + const FLiveLinkTransformFrameData* FrameData = SubjectData.FrameData.Cast<FLiveLinkTransformFrameData>(); + + if (StaticData && FrameData) + { + // Finally, apply the transform to this component according to the static data. + ApplyLiveLinkTransform(FrameData->Transform, *StaticData); + } } -UMotionControllerComponent* UUniversalTrackedComponent::GetMotionControllerComponentByMotionSource(EControllerHand MotionSource) +UMotionControllerComponent* UUniversalTrackedComponent::GetMotionControllerComponentByMotionSource(EControllerHand MotionSource) const { TArray<UActorComponent*> Components; GetOwner()->GetComponents(UMotionControllerComponent::StaticClass(),Components); @@ -123,19 +177,41 @@ UMotionControllerComponent* UUniversalTrackedComponent::GetMotionControllerCompo ); } -USceneComponent* UUniversalTrackedComponent::GetComponentForSelectedAttachment(EAttachementType AttachmentType) const +void UUniversalTrackedComponent::ApplyLiveLinkTransform(const FTransform& Transform, const FLiveLinkTransformStaticData& StaticData) { - switch (AttachmentType) + if (bUseLocation && StaticData.bIsLocationSupported) + { + if (bWorldTransform) + { + this->SetWorldLocation(Transform.GetLocation(), bSweep, nullptr, bTeleport ? ETeleportType::TeleportPhysics : ETeleportType::ResetPhysics); + } + else + { + this->SetRelativeLocation(Transform.GetLocation(), bSweep, nullptr, bTeleport ? ETeleportType::TeleportPhysics : ETeleportType::ResetPhysics); + } + } + + if (bUseRotation && StaticData.bIsRotationSupported) { - case EAttachementType::AT_NONE: return nullptr; - case EAttachementType::AT_HANDTARGET: - if(ProxyType == ETrackedComponentType::TCT_RIGHT_HAND) return UVirtualRealityUtilities::GetNamedClusterComponent(ENamedClusterComponent::NCC_CAVE_RHT); - if(ProxyType == ETrackedComponentType::TCT_LEFT_HAND) return UVirtualRealityUtilities::GetNamedClusterComponent(ENamedClusterComponent::NCC_CAVE_LHT); - break; - case EAttachementType::AT_FLYSTICK: - return UVirtualRealityUtilities::GetNamedClusterComponent(ENamedClusterComponent::NCC_FLYSTICK); - break; + if (bWorldTransform) + { + this->SetWorldRotation(Transform.GetRotation(), bSweep, nullptr, bTeleport ? ETeleportType::TeleportPhysics : ETeleportType::ResetPhysics); + } + else + { + this->SetRelativeRotation(Transform.GetRotation(), bSweep, nullptr, bTeleport ? ETeleportType::TeleportPhysics : ETeleportType::ResetPhysics); + } } - return nullptr; -} + if (bUseScale && StaticData.bIsScaleSupported) + { + if (bWorldTransform) + { + this->SetWorldScale3D(Transform.GetScale3D()); + } + else + { + this->SetRelativeScale3D(Transform.GetScale3D()); + } + } +} diff --git a/Source/RWTHVRToolkit/Private/Pawn/VirtualRealityPawn.cpp b/Source/RWTHVRToolkit/Private/Pawn/VirtualRealityPawn.cpp index 583154554c37cea3b6d0b2acdccb905cf506eeec..e38268da2b1135548b81f154b27578fee7d2dbee 100644 --- a/Source/RWTHVRToolkit/Private/Pawn/VirtualRealityPawn.cpp +++ b/Source/RWTHVRToolkit/Private/Pawn/VirtualRealityPawn.cpp @@ -1,10 +1,7 @@ // Fill out your copyright notice in the Description page of Project Settings. - #include "Pawn/VirtualRealityPawn.h" - - #include "GameFramework/InputSettings.h" #include "GameFramework/PlayerInput.h" #include "Pawn/UniversalTrackedComponent.h" @@ -21,7 +18,7 @@ AVirtualRealityPawn::AVirtualRealityPawn(const FObjectInitializer& ObjectInitial AutoPossessPlayer = EAutoReceiveInput::Player0; // Necessary for receiving motion controller events. - SetRootComponent(CreateDefaultSubobject<USceneComponent>(TEXT("Root"))); + SetRootComponent(CreateDefaultSubobject<USceneComponent>(TEXT("Origin"))); CameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera")); CameraComponent->SetupAttachment(RootComponent); @@ -31,9 +28,13 @@ AVirtualRealityPawn::AVirtualRealityPawn(const FObjectInitializer& ObjectInitial Head->ProxyType = ETrackedComponentType::TCT_HEAD; Head->SetupAttachment(RootComponent); + CapsuleRotationFix = CreateDefaultSubobject<USceneComponent>(TEXT("CapsuleRotationFix")); + CapsuleRotationFix->SetUsingAbsoluteRotation(true); + CapsuleRotationFix->SetupAttachment(Head); + PawnMovement = CreateDefaultSubobject<UVRPawnMovement>(TEXT("Pawn Movement")); PawnMovement->SetUpdatedComponent(RootComponent); - PawnMovement->SetHeadComponent(Head); + PawnMovement->SetHeadComponent(CapsuleRotationFix); RightHand = CreateDefaultSubobject<UUniversalTrackedComponent>(TEXT("Right Hand")); RightHand->ProxyType = ETrackedComponentType::TCT_RIGHT_HAND; diff --git a/Source/RWTHVRToolkit/Private/RWTHVRToolkit.cpp b/Source/RWTHVRToolkit/Private/RWTHVRToolkit.cpp index 10abfc9a1cb160e9ef3edb307019e5a9a28a9f33..5053d5245556c244d7d36e0a1930c9ba3b09f09d 100644 --- a/Source/RWTHVRToolkit/Private/RWTHVRToolkit.cpp +++ b/Source/RWTHVRToolkit/Private/RWTHVRToolkit.cpp @@ -1,16 +1,86 @@ #include "RWTHVRToolkit.h" +#include "ILiveLinkClient.h" +#include "LiveLinkClient.h" +#include "RWTHVRToolkitSettings.h" + +#if WITH_EDITOR + #include "ISettingsModule.h" + #include "ISettingsSection.h" +#endif + #define LOCTEXT_NAMESPACE "FRWTHVRToolkitModule" void FRWTHVRToolkitModule::StartupModule () { ConsoleActivation.Register(); + + FCoreDelegates::OnFEngineLoopInitComplete.AddRaw(this, &FRWTHVRToolkitModule::OnEngineLoopInitComplete); + +#if WITH_EDITOR + if (ISettingsModule* SettingsModule = FModuleManager::GetModulePtr<ISettingsModule>("Settings")) + { + ISettingsSectionPtr SettingsSection = SettingsModule->RegisterSettings( + "Project", "Plugins", "RWTH VR Toolkit", + LOCTEXT("RWTHVRToolkitSettingsName", "RWTH VR Toolkit"), + LOCTEXT("RWTHVRToolkitSettingsDescription", "Configure the RWTH VR Toolkit."), + GetMutableDefault<URWTHVRToolkitSettings>() + ); + if (SettingsSection.IsValid()) + { + SettingsSection->OnModified().BindRaw(this, &FRWTHVRToolkitModule::HandleSettingsSaved); + } + } +#endif } + void FRWTHVRToolkitModule::ShutdownModule() { ConsoleActivation.Unregister(); + +#if WITH_EDITOR + if (ISettingsModule* SettingsModule = FModuleManager::GetModulePtr<ISettingsModule>("Settings")) + { + SettingsModule->UnregisterSettings("Project", "Plugins", "RWTH VR Toolkit"); + } +#endif } +void FRWTHVRToolkitModule::OnEngineLoopInitComplete() +{ + ApplyDefaultPreset(); +} + +bool FRWTHVRToolkitModule::HandleSettingsSaved() +{ + ApplyDefaultPreset(); + return true; +} + +void FRWTHVRToolkitModule::ApplyDefaultPreset() +{ + ULiveLinkPreset* StartupPreset = GetDefault<URWTHVRToolkitSettings>()->DefaultLiveLinkPreset.LoadSynchronous(); + if (StartupPreset != nullptr) + { + SetLiveLinkPreset(StartupPreset); + } +} + +void FRWTHVRToolkitModule::SetLiveLinkPreset(ULiveLinkPreset* Preset) +{ + // We should check for a currently applied preset/sources now, and if it includes the ART one. + // If it does, and is active, do not apply it again. + + const FLiveLinkClient& LiveLinkClient = IModularFeatures::Get().GetModularFeature<FLiveLinkClient>(ILiveLinkClient::ModularFeatureName); + + if (LiveLinkPreset == nullptr && LiveLinkClient.GetSources().Num() == 0 ) + { + LiveLinkPreset = Preset; + LiveLinkPreset->ApplyToClient(); + } +} + + #undef LOCTEXT_NAMESPACE IMPLEMENT_MODULE(FRWTHVRToolkitModule, RWTHVRToolkit) \ No newline at end of file diff --git a/Source/RWTHVRToolkit/Private/UI/ExternalImage.cpp b/Source/RWTHVRToolkit/Private/UI/ExternalImage.cpp index 0c14a04a96a560bdd45699af6f9cde9849eda12c..e2645115283ae959c92f9a4c65314f2732bac54a 100644 --- a/Source/RWTHVRToolkit/Private/UI/ExternalImage.cpp +++ b/Source/RWTHVRToolkit/Private/UI/ExternalImage.cpp @@ -2,6 +2,7 @@ #include "Interfaces/IHttpResponse.h" #include "HttpModule.h" +#include "Misc/FileHelper.h" #include "Runtime/ImageWrapper/Public/IImageWrapperModule.h" UExternalImage::UExternalImage(){} diff --git a/Source/RWTHVRToolkit/Public/Pawn/UniversalTrackedComponent.h b/Source/RWTHVRToolkit/Public/Pawn/UniversalTrackedComponent.h index bd45437bc3d79571f36683a4c0d1ac1fe4deefde..b6ad2c6322533df72354b5b29b139d1be2dc25bc 100644 --- a/Source/RWTHVRToolkit/Public/Pawn/UniversalTrackedComponent.h +++ b/Source/RWTHVRToolkit/Public/Pawn/UniversalTrackedComponent.h @@ -3,10 +3,15 @@ #pragma once #include "CoreMinimal.h" +#include "LiveLinkRole.h" #include "Components/SceneComponent.h" #include "MotionControllerComponent.h" #include "UniversalTrackedComponent.generated.h" +DECLARE_LOG_CATEGORY_EXTERN(LogUniversalTrackedComponent, Log, All); + +struct FLiveLinkTransformStaticData; + UENUM(BlueprintType) enum class ETrackedComponentType : uint8 { @@ -40,18 +45,83 @@ public: // Sets default values for this component's properties UUniversalTrackedComponent(); - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Tracking") ETrackedComponentType ProxyType = ETrackedComponentType::TCT_HEAD; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Tracking|nDisplay") EAttachementType AttachementType = EAttachementType::AT_NONE; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Tracking|HMD", BlueprintSetter=SetShowDeviceModel) bool bShowDeviceModelInHMD = true; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Tracking") + ETrackedComponentType ProxyType = ETrackedComponentType::TCT_HEAD; + + /** Set whether LiveLink should always be enabled, even in the editor or desktop mode. Overrides bUseLiveLinkTracking.*/ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Tracking") + bool bAlwaysUseLiveLinkTracking; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Tracking|nDisplay") + EAttachementType AttachementType = EAttachementType::AT_NONE; + + /** Set whether nDisplay should use LiveLink tracking. Requires a valid Subject Representation!*/ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Tracking|nDisplay") + bool bUseLiveLinkTracking = true; + + /** Set the LiveLink Subject Representation to be used by this component. */ + UPROPERTY(BlueprintReadOnly, EditAnywhere, Category="Tracking|nDisplay|LiveLink") + FLiveLinkSubjectRepresentation SubjectRepresentation; + + /** Set the transform of the component in world space of in its local reference frame. */ + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Tracking|nDisplay|LiveLink") + bool bWorldTransform = false; + + /** Whether we should set the owning actor's location with the value coming from live link. */ + UPROPERTY(EditAnywhere, Category = "Tracking|nDisplay|LiveLink") + bool bUseLocation = true; + + /** Whether we should set the owning actor's rotation with the value coming from live link. */ + UPROPERTY(EditAnywhere, Category = "Tracking|nDisplay|LiveLink") + bool bUseRotation = true; + + /** Whether we should set the owning actor's scale with the value coming from live link. */ + UPROPERTY(EditAnywhere, Category = "Tracking|nDisplay|LiveLink") + bool bUseScale = true; + + /** + * Whether we sweep to the destination location, triggering overlaps along the way and stopping short of the target if blocked by something. + * Only the root component is swept and checked for blocking collision, child components move without sweeping. If collision is off, this has no effect. + */ + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Tracking|nDisplay|LiveLink") + bool bSweep = false; + + /** + * Whether we teleport the physics state (if physics collision is enabled for this object). + * If true, physics velocity for this object is unchanged (so ragdoll parts are not affected by change in location). + * If false, physics velocity is updated based on the change in position (affecting ragdoll parts). + * If CCD is on and not teleporting, this will affect objects along the entire sweep volume. + */ + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Tracking|nDisplay|LiveLink") + bool bTeleport = true; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Tracking|HMD", BlueprintSetter=SetShowDeviceModel) + bool bShowDeviceModelInHMD = true; UFUNCTION(BlueprintSetter) void SetShowDeviceModel(const bool bShowControllerModel); + //~ Begin SceneComponent Interface virtual void BeginPlay() override; + virtual void PostLoad() override; virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override; +#if WITH_EDITOR + virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override; +#endif + //~ End SceneComponent Interface + private: + + /** + * @brief Helper function that applies the LiveLink data to this component. Taken from the LiveLink Transform Controller. + * @param Transform Transform read from the LiveLink Client. + * @param StaticData Static data from the LiveLink Subject, defines what is and isn't supported. + * @return void + */ + void ApplyLiveLinkTransform(const FTransform& Transform, const FLiveLinkTransformStaticData& StaticData); + USceneComponent* TrackedComponent = nullptr; - UMotionControllerComponent* GetMotionControllerComponentByMotionSource(EControllerHand MotionSource); - USceneComponent* GetComponentForSelectedAttachment(EAttachementType AttachmentType) const; + UMotionControllerComponent* GetMotionControllerComponentByMotionSource(EControllerHand MotionSource) const; + }; diff --git a/Source/RWTHVRToolkit/Public/Pawn/VirtualRealityPawn.h b/Source/RWTHVRToolkit/Public/Pawn/VirtualRealityPawn.h index 9f027a03fe0cd0406687d7ac97adc0f7aaa58c7b..baa9f9939f5e932651c108f62d7205d7f3cada71 100644 --- a/Source/RWTHVRToolkit/Public/Pawn/VirtualRealityPawn.h +++ b/Source/RWTHVRToolkit/Public/Pawn/VirtualRealityPawn.h @@ -9,6 +9,7 @@ #include "VRPawnMovement.h" #include "VirtualRealityPawn.generated.h" +class ULiveLinkComponentController; /** * */ @@ -29,11 +30,20 @@ public: /* Movement */ UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Pawn|Movement") UVRPawnMovement* PawnMovement; + + /** Workaround dummy component to prevent the Capsule from rotating in the editor, if LiveLink tracking is being used. + * This happens due to the rotation of the Capsule being set only while in Play Mode (instead of using e.g. absolute rotation). + * Additionally, there is an implicit race condition in Tick, due to LiveLink adjusting the parent's rotation, while the capsule + * then gets rotated back in Tick to be vertical. Depending on the order, LiveLink overrides the VRPawnMovement's rotation settings. + * The dummy seems to fix this, because its absolute rotation just catches all parent rotations and prevents them from + * overriding any of the capsules'. + */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn|Movement") USceneComponent* CapsuleRotationFix; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn|Movement") float BaseTurnRate = 45.0f; /* CameraComponent */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn|Camera") UCameraComponent* CameraComponent; - + protected: virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override; diff --git a/Source/RWTHVRToolkit/Public/RWTHVRToolkit.h b/Source/RWTHVRToolkit/Public/RWTHVRToolkit.h index 56caf39bd46eafe702cbe60e8a986f8ba68f8fa6..8bd51d2c06e6adf7ba6fdfba1c9d2212816c97d3 100644 --- a/Source/RWTHVRToolkit/Public/RWTHVRToolkit.h +++ b/Source/RWTHVRToolkit/Public/RWTHVRToolkit.h @@ -1,15 +1,24 @@ #pragma once #include "CoreMinimal.h" -#include "Modules/ModuleManager.h" #include "Fixes/ActivateConsoleInShipping.h" +class ULiveLinkPreset; + class FRWTHVRToolkitModule : public IModuleInterface { public: virtual void StartupModule () override; virtual void ShutdownModule() override; + + void SetLiveLinkPreset(ULiveLinkPreset* Preset); private: - FActivateConsoleInShipping ConsoleActivation; + + void OnEngineLoopInitComplete(); + bool HandleSettingsSaved(); + void ApplyDefaultPreset(); + + FActivateConsoleInShipping ConsoleActivation; + ULiveLinkPreset* LiveLinkPreset = nullptr; }; diff --git a/Source/RWTHVRToolkit/Public/RWTHVRToolkitSettings.h b/Source/RWTHVRToolkit/Public/RWTHVRToolkitSettings.h new file mode 100644 index 0000000000000000000000000000000000000000..fa39851c0c28b67b8cf9b320f29a353996596489 --- /dev/null +++ b/Source/RWTHVRToolkit/Public/RWTHVRToolkitSettings.h @@ -0,0 +1,32 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreTypes.h" +#include "UObject/Object.h" +#include "UObject/ObjectMacros.h" + +#include "Engine/EngineTypes.h" +#include "Templates/SubclassOf.h" +#include "LiveLinkPreset.h" + +#include "RWTHVRToolkitSettings.generated.h" + + +/** + * Settings for LiveLink. + */ +UCLASS(config=Game, defaultconfig) +class RWTHVRTOOLKIT_API URWTHVRToolkitSettings : public UObject +{ + GENERATED_BODY() + +public: + URWTHVRToolkitSettings() = default; + +public: + + /** The default preset that should be applied */ + UPROPERTY(config, EditAnywhere, Category = "LiveLink") + TSoftObjectPtr<ULiveLinkPreset> DefaultLiveLinkPreset; +}; diff --git a/Source/RWTHVRToolkit/RWTHVRToolkit.Build.cs b/Source/RWTHVRToolkit/RWTHVRToolkit.Build.cs index 8326044abdc7d5befc32b973a65af29133cf3346..ea90c767218a927fd9dc4851cd48a26296fbfc40 100644 --- a/Source/RWTHVRToolkit/RWTHVRToolkit.Build.cs +++ b/Source/RWTHVRToolkit/RWTHVRToolkit.Build.cs @@ -26,12 +26,16 @@ public class RWTHVRToolkit : ModuleRules "Slate", "SlateCore", "DeveloperSettings", - "Http" + "Http", + "LiveLink", + "LiveLinkInterface" } ); PrivateDependencyModuleNames.AddRange( - new string[]{} + new string[]{ + "UnrealEd" + } ); DynamicallyLoadedModuleNames.AddRange(