Existent Unreal Plugin
v0.1.0
v0.1.0
  • πŸ‘‹Welcome
  • Overview
    • πŸ’‘What we do
    • ✨Features
    • πŸ“•Glossary
    • 🐞Bug Reports & Feature Requests
    • ❓FAQ
    • πŸ—’οΈRelease Notes
      • Existent v0.0.1 Release Notes
      • Existent v0.0.2 Release Notes
      • Existent v0.1.0 Release Notes
  • Learning Existent
    • πŸ› οΈHardware Setup
    • πŸ–₯️Getting Started
      • Installing Unreal Engine
      • Installing Existent Plugin
      • Setting Up a New Project
        • Setup Wizard
        • Manual Setup
      • Installing your License Key
      • Adding Tracked Objects
        • Using Vive Ultimate Trackers
        • Outside-in (Optitrack/Vicon) Setup
          • Aligning HMDs with outside-in systems
          • 3D Print an Alignment Tool
          • Creating Digital Twins/Props
    • 🎭Backstage Mode
    • πŸ“ΌSession recording & playback
    • πŸŒ‰RealityBridge
  • GUIDES
    • πŸ“¦Building and packaging a project
    • πŸ–οΈGrip Authoring
      • Creating a pose and entering edit mode
      • Interface Overview
      • Controls
      • Pose Edits
      • Operations
    • πŸŽ›οΈControl Panel
      • Trackers Tab
      • Level Tab
      • Alignment Tab
      • Server Tab
      • Recordings Tab
    • πŸ‘¨β€πŸ’ΌCustomising Player Avatar
      • Mappings
        • Hand Bone Mappings
        • Body Bone Mappings
        • Tracker Mappings
      • Animation Blueprint
      • Assign assets to Player
  • Resources
    • πŸ”¬Classes/Components
      • ExistentStage
      • ExistentSpace
      • ExistentVehicle
      • ExistentPlayer (Pawn)
      • ExistentPlayerAnimInstance
      • ExistentGameModeBase
      • ExistentTrackerComponent
      • ExistentGrabComponent
      • ExistentGripComponent
      • ExistentHandComponent
      • ExistentTrackingConfidenceComponent
    • πŸ“ƒExistent API
      • πŸ”¬BP Nodes
        • AsyncTask_RealityBridgeInitialised
          • AddDelegate_Bind_Event_to_Initialised
          • ClearDelegate_Unbind_all_Events_from_Initialised
          • Initialised
        • ExistentAlignmentComponent
          • BeginSampling
          • BeginSamplingNoDelay
          • HasValidOffset
        • ExistentAnimationLibrary
          • GetBoneLength
          • GetChildrenBones
          • GetMixamoBodyMappingsMatchConfig
          • GetMixamoHandMappingsMatchConfig
          • GetRefSkeletonBoneComponentTransform
          • GetRefSkeletonBoneLength
          • GetUE4BodyMappingsMatchConfig
          • GetUE4HandMappingsMatchConfig
          • GetUE5BodyMappingsMatchConfig
          • GetUE5HandMappingsMatchConfig
          • SetAnimInstanceClass
        • ExistentBodyBoneMappings
          • GetBodyBones
          • GetBoneName_ByBodyBone
          • GetExcludedExistentBodyBones
          • GetSpineBoneNames
        • ExistentBodyCalibration
          • AddArmsLength
          • AddCalibration
          • AddEyeHeight
          • AddFriendlyName
          • AddHandSize
          • AddLegLength
          • AddShoulderWidth
          • DeleteAllCalibrations
          • DeleteCalibration
          • GetArmsLength
          • GetCalibration
          • GetCalibrations
          • GetCalibration_ByFriendlyName
          • GetEyeHeight
          • GetFriendlyName
          • GetHandSize
          • GetLegLength
          • GetShoulderWidth
        • ExistentBoneMappingsBase
          • AreBoneMappingsValid
          • GetExcludedBoneNames
          • GetHandBones
          • GetInvalidBoneMappings
          • GetMappedBones
          • GetMeshRotation
          • IsHandBone
        • ExistentFootEventsInterface
          • OnFootDown
          • OnFootUp
        • ExistentGrabComponent
          • AddDelegate_Bind_Event_to_On_Grip_Attach
          • AddDelegate_Bind_Event_to_On_Grip_Detach
          • AddDelegate_Bind_Event_to_On_Grip_Transfer
          • ClearDelegate_Unbind_all_Events_from_On_Grip_Attach
          • ClearDelegate_Unbind_all_Events_from_On_Grip_Detach
          • ClearDelegate_Unbind_all_Events_from_On_Grip_Transfer
          • GetAttachmentStateString
          • OnGripAttach
          • OnGripDetach
          • OnGripTransfer
        • ExistentGripComponent
          • AddDelegate_Bind_Event_to_On_Player_Object_Drop
          • AddDelegate_Bind_Event_to_On_Player_Object_Pickup
          • ClearDelegate_Unbind_all_Events_from_On_Player_Object_Drop
          • ClearDelegate_Unbind_all_Events_from_On_Player_Object_Pickup
          • GetWristOffset
          • GetWristRotation
          • IsEnabled
          • IsParentMoving
          • OnPlayerObjectDrop
          • OnPlayerObjectPickup
          • ProjectComponentTransformOnCircleGripShape
          • ProjectComponentTransformOnCylinderGripShape
          • ProjectComponentTransformOnGripShape
          • SetEnabled
        • ExistentHandBoneMappings
          • GetBoneRotation
          • GetBoneRotation_ByBone
          • GetCapsuleTraceModifiers
          • GetExcludedExistentBones
          • GetGripBone
        • ExistentHandComponent
          • GetBoneComponentTransforms
          • GetBoneWorldTransforms
          • GetExistentPlayer
          • GetGrabComponent
          • GetTrackingStatus
          • GetTransformFromWristTracker
          • GetWristBoneWorldTransform
          • IsWristTrackerDataValid
          • SetBoneMappings
          • SetHandTrackingEnabled
          • SetTrackerMappings
          • SetWristTransform
        • ExistentHandDataFilterComponent
          • AddDelegate_Bind_Event_to_On_Calculated_Data
          • ClearDelegate_Unbind_all_Events_from_On_Calculated_Data
          • OnCalculatedData
        • ExistentHandLibrary
          • DrawHandBoneWorldTransforms
          • GetBoneIndex
          • GetBoneLocation
          • GetBoneLocations
          • GetBoneRadius
          • GetBoneRotation
          • GetBoneTransform
          • GetCloseHandTransforms
          • GetFingerFromBone
          • GetFingerParentBones
          • GetHandTrackingStatus
          • GetHandXRDeviceID
          • GetHMDName
          • GetOpenHandTransforms
          • GetParentBone
          • GetParentBoneSpaceCloseHandTransforms
          • GetParentBoneSpaceOpenHandTransforms
          • IsBoneSupported
          • IsHandTrackingEnabled
          • LogHandBoneWorldLocations
          • LogHandBoneWorldRotations
          • UpdateBoneInPose
        • ExistentLibrary
          • CapsuleTraceMultiForObjects
          • CapsuleTraceSingleForObjects
          • DrawSampleArray
          • ExistentBodyBoneToString
          • ExistentBoneToString
          • ExistentFingerToString
          • ExistentHandToString
          • GetControllerOrientationAndPosition
          • GetControllerTrackingStatus
          • GetMatchString
          • SavePlayerData
          • SetBackstageModeEnabled
          • StringToExistentBodyBone
          • StringToExistentBone
          • TransformSampleToWorld
        • ExistentMathLibrary
          • AverageOfFloatArray
          • GetAngleFromVectors
          • GetCompDirectionFromPosAxis
          • GetRotatorMax
          • GetWeightsFromAlpha
          • IsRotatorLessThan
          • LineBoxIntersection
          • MedianOfFloatArray
        • ExistentPawn
          • AddDelegate_Bind_Event_to_On_Current_Space_Changed
          • ClearDelegate_Unbind_all_Events_from_On_Current_Space_Changed
          • GetCurrentSpace
          • GetSpaceTransform
          • IsAReplicatedClient
          • OnCurrentSpaceChanged
          • SetCurrentSpace
        • ExistentPlayer
          • AddDelegate_Bind_Event_to_On_Object_Drop
          • AddDelegate_Bind_Event_to_On_Object_Pickup
          • ApplyCalibrationSettings
          • ClearDelegate_Unbind_all_Events_from_On_Object_Drop
          • ClearDelegate_Unbind_all_Events_from_On_Object_Pickup
          • GetEquippedProps
          • GetHeadTransform
          • IsHandCollider
          • OnObjectDrop
          • OnObjectPickup
          • SetBackstageModeEnabled
          • SetCheckHandsCollidingWithStageEnabled
        • ExistentPlayerAnimInstance
          • GetFootTrackerTransform
          • GetHandComponent
          • IsSimulating
          • SetLeftBoneWorldTransforms
          • SetRightBoneWorldTransforms
          • UpdateCalibrationSettings
        • ExistentPlayerController
          • SaveCurrentTrackerInfoToOverrideSet
        • ExistentSessionRecording
          • AddDelegate_Bind_Event_to_On_Playback
          • ClearDelegate_Unbind_all_Events_from_On_Playback
          • GetCurrentRecordingDurationSecs
          • GetPlaybackTimeFraction
          • OnPlayback
        • ExistentSpace
          • SetMobility
        • ExistentTrackerComponent
          • AddDelegate_Bind_Event_to_On_Current_Space_Changed
          • AddDelegate_Bind_Event_to_On_Tracking_Lost
          • AddDelegate_Bind_Event_to_On_Tracking_Resumed
          • ClearDelegate_Unbind_all_Events_from_On_Current_Space_Changed
          • ClearDelegate_Unbind_all_Events_from_On_Tracking_Lost
          • ClearDelegate_Unbind_all_Events_from_On_Tracking_Resumed
          • GetCurrentSpace
          • GetId
          • GetTrackerRelativeTransform
          • GetTrackerWorldTransform
          • GetTrackingIDs
          • GetTrackingStatus
          • OnCurrentSpaceChanged
          • OnTrackingLost
          • OnTrackingResumed
          • Server_SetId
          • SetCurrentSpace
        • ExistentTrackerMappings
          • ApplyTrackerOffsetToTrackerTransform
          • GetFootTrackerDelta
          • GetFootTrackerOffset
          • GetHandTrackerDelta
          • GetHandTrackerOffset
        • ExistentTrackingConfidenceComponent
          • GetConfidenceValue
          • GetConfidenceValueByType
          • GetDistanceConfidenceValue
          • GetFingersConfidenceValues
          • GetFingersOcclusionConfidenceValue
          • GetOcclusionConfidenceValue
          • GetStillHandConfidence
          • GetVelocityConfidenceValue
          • GetWristConfidenceValue
          • PrintAllConfidenceValues
          • PrintBonesOcclusionConfidence
          • PrintConfidence
          • PrintDistanceConfidence
          • PrintFingersConfidence
          • PrintFingersOcclusionConfidence
          • PrintStillHandConfidence
          • PrintVelocityConfidence
          • PrintWristConfidence
          • SetForcedConfidenceValue
        • ExistentUMGWindowComponent
          • CloseWindow
          • OpenAsWindow
          • OverrideManualDpiScalingWindowSize
          • SetManualDpiScaling
        • ExistentVehicle
          • AddDelegate_Bind_Event_to_On_Arrived_at_Destination
          • AddDelegate_Bind_Event_to_On_Drive
          • AddDelegate_Bind_Event_to_On_Reverse_Direction
          • ClearDelegate_Unbind_all_Events_from_On_Arrived_at_Destination
          • ClearDelegate_Unbind_all_Events_from_On_Drive
          • ClearDelegate_Unbind_all_Events_from_On_Reverse_Direction
          • Drive
          • GetCurrentSpeed
          • GetMaxSpeed
          • OnArrivedAtDestination
          • OnDrive
          • OnReverseDirection
          • ResetToSource
          • ReverseDirection
          • SetIsPaused
        • ExistentViveTrackingSystem
          • RecordOrigin
        • K2Node_IsRealityBridgeInitialised
          • UK2Node_IsRealityBridgeInitialised
        • K2Node_RealityBridgeReceiveEvent
          • UK2Node_RealityBridgeReceiveEvent
        • K2Node_RealityBridgeSendEvent
          • UK2Node_RealityBridgeSendEvent
        • K2Node_RealityBridgeUnbindEvent
          • UK2Node_RealityBridgeUnbindEvent
        • RealityBridge
          • AddDelegate_Bind_Event_to_On_Reality_Bridge_Initialised
          • ClearDelegate_Unbind_all_Events_from_On_Reality_Bridge_Initialised
          • GetInitialised
          • Initialise
          • OnRealityBridgeInitialised
        • RoundProgressBar
          • SetPercent
  • Tutorials & Examples
    • πŸ“šTutorials
Powered by GitBook
On this page
  • PC Requirements
  • Supported Unreal Engine Versions
  • Supported Head-Mounted Display (HMD) Devices
  • Tracking System Specifications
  • Examples of Hardware Configurations
  • Networking and Software Configuration
  • Additional Recommendations
  1. Learning Existent

Hardware Setup

PreviousExistent v0.1.0 Release NotesNextGetting Started

Last updated 9 months ago

This section provides detailed guidelines for setting up the hardware environment required to develop with our Existent Unreal Engine plugin. Please ensure each setup component meets or exceeds the following requirements to ensure compatibility and optimal performance:

PC Requirements

Hardware

Minimum requirements

Processor

Intel Core i5-4590 / AMD FX 8350 equivalent or better

GPU

NVIDIA GTX 1070 / AMD Radeon RX 580 equivalent or better

Memory

8 GB RAM or more

Operating system

Windows 10 (64-bit) or later

If buying a recent GPU we recommend using NVIDIA over AMD as historically AMD has had driver issues in VR with new hardware.

When developing for VR it is important to remember that high frame rates make for a much better user experience. Targeting a high level of graphical fidelity will require a much more capable GPU than those listed above.

Supported Unreal Engine Versions

The development environment is designed to be compatible with Unreal Engine (UE) 5.3. Ensure that your development projects are set up to use that version.

Epic has a page with their VR project recommendation here:

Epic also has a page specifying their recommended hardware and software setup for general Unreal development here:

Supported Head-Mounted Display (HMD) Devices

We currently support the following HMDs with PC VR Streaming:

  • Vive Focus 3

  • Pico 4 Enterprise

In both cases, this is because they have a robust LBE mode. This is important because the headset’s inside-out tracking needs to consistently report its position and orientation with respect to the room it is in.

You can use some of the features of Existent without an LBE mode.

Support for standalone is coming soon!

Tracking System Specifications

Although you don't need a tracking system to start using the Existent features, we do support a plethora of tracking systems that can be combined with an HMD for accurate player motion tracking and spatial awareness.

The system must include a minimum number of 2 trackers for each player.

We currently support the following tracking systems:

Examples of Hardware Configurations

There are many combinations of hardware configurations you can use via Existent but these are the most common along with some discussion of their features and primary use cases.

  • Vive Focus 3

  • 1 PC (using above specs)

This is an entry-level configuration which allows using finger tracking. You can skip the alignment process as you are not using a tracking system. The limitation is that you can't have tracked objects(props). Target use cases: Development, testing Existent features

  • Vive Focus 3 (LBE Mode) per player

  • Up to 5 Vive Ultimate Trackers per player (2 mounted on wrists, optionally 2 mounted on ankles, rest used on props)

  • 1 PC (using above specs) per player

This is an entry-level configuration which offers a significant amount of flexibility including full body tracking and reasonable finger tracking as well as a limited number of props. Vive’s LBE mode applied to all HMDs and trackers means that all the hardware shares the same origin by default so you can skip the alignment process. The limitation is that 5 trackers per play means that the number of props in your application is limited, especially if you want to support full body. Target use cases: Arcade-style gaming experiences, ultra-portable training experiences, expo floor.

  • Vive Focus 3s (LBE Mode)

  • Optitrack Active Pucks (mounted on wrists and ankles)

  • Props using passive or active trackers

  • Performers wearing 30+ point mocap suits

  • 1 PC (using above specs) per player

This configuration allows for an enormous amount of flexibility and a very large stage area with near-unlimited props and real time tracked performers. Target use-cases: High fidelity training, hyper-reality experiences, live performance, warehouse-scale archviz.

Networking and Software Configuration

To achieve wireless streaming from your PC to the recommended headsets, a good hardware and software setup is required.

When it comes to wireless access points we have found that bandwidth is generally not an issue. Instead, we are looking to reduce latency whenever possible. One non-obvious source of this latency is having headsets share antennas. What we mean by this is that each headset is equipped with 2 wireless antennas. For optimum performance, these 2 antennas must have exclusive access to 2 antennas on the access point. So an access point with 4 antennas can support 2 headsets simultaneously. Having headsets share antennas can cause noticeable hitching, even when the other headset is not being actively used.

An example network:

Additional Recommendations

(via )

(via )

Streaming software must be installed on the desired PCs (, ) to enable the wireless connection of the HMDs to SteamVR.

For an enhanced shared VR experience (multiplayer), it is recommended to configure the HMDs with a shared map. This way, all headsets can share the same and are guaranteed to agree on all tracker coordaintes. Please refer to your headset manufacturer's documentation for setting up a shared LBE mode map.

πŸ› οΈ
Unreal Engine 5.3 Documentation | Epic Developer Community
Hardware and Software Specifications | Epic Developer Community
Optitrack
LiveLink
Vicon
LiveLink
Vive Ultimate Trackers
Vive Business Streaming
PICO Business Streaming
alignment configuration