Existent Unreal Plugin
v0.0.2
v0.0.2
  • 👋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
  • Learning Existent
    • 📘High-Level Overview
    • 🛠️Hardware Setup
    • 🖥️Getting Started
      • Installing Unreal Engine
      • Installing Existent Plugin
      • Setting Up a New Project
      • Creating your first Map
        • Duplicating the Starter Level
        • Creating and Configuring the Stage
      • Setting up Player Pawns & Animations
      • Running the Experience
    • 🎭Backstage Mode
    • 📼Session recording & playback
    • 🌉RealityBridge
  • GUIDES
    • 👨‍💼Customising Player Avatar
      • Mappings
        • Hand Bone Mappings
        • Body Bone Mappings
        • Tracker Mappings
      • Animation Blueprint
      • Assign assets to Player
    • 🛡️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
    • 🖐️Grip Authoring
      • Creating a pose and entering edit mode
      • Interface Overview
      • Controls
      • Pose Edits
      • Operations
  • Resources
    • 🔬Classes/Components
      • ExistentStage
      • ExistentSpace
      • ExistentVehicle
      • ExistentPlayer (Pawn)
      • ExistentPlayerAnimInstance
      • ExistentGameModeBase
      • ExistentTrackerComponent
      • ExistentGrabComponent
      • ExistentGripComponent
      • ExistentHandComponent
      • ExistentTrackingConfidenceComponent
      • ExistentAlignmentComponent
      • IExistentAlignmentSubject
      • ExistentUMGWindowComponent
    • 📃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
          • GetRefSkeletonBoneComponentTransform
          • GetRefSkeletonBoneLength
          • SetAnimInstanceClass
        • ExistentBodyBoneMappings
          • GetBodyBones
          • GetBoneName_ByBodyBone
          • GetExcludedExistentBodyBones
          • GetMeshForwardVector
          • GetMeshRightVector
          • GetMeshRotation
          • GetMeshYawRotation
          • 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
          • 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
          • GetWristOffset
          • GetWristRotation
          • IsEnabled
          • IsParentMoving
          • 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
          • GetCurrentSpace
          • GetSpaceTransform
          • IsAReplicatedClient
          • 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
        • ExistentTrackerComponent
          • GetCurrentSpace
          • GetId
          • GetTrackerRelativeTransform
          • GetTrackerWorldTransform
          • GetTrackingIDs
          • GetTrackingStatus
          • 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
          • ClearDelegate_Unbind_all_Events_from_On_Arrived_at_Destination
          • Drive
          • GetCurrentSpeed
          • GetMaxSpeed
          • OnArrivedAtDestination
          • ResetToSource
          • ReverseDirection
        • 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
  • Networking and Software Configuration
  • Additional Recommendations
  • Examples of Hardware Configurations
  1. Learning Existent

Hardware Setup

PreviousHigh-Level OverviewNextGetting Started

Last updated 10 months ago

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

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:

  • 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.

Tracking System Specifications

A supported tracking system is essential 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:

  • Optitrack (via LiveLink)

  • Vicon (via LiveLink)

  • Vive Ultimate Trackers

Networking and Software Configuration

The recommended headsets both stream wirelessly. To achieve this a good hardware and software setup must be implemented.

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

For an enhanced shared VR experience, it is recommended to configure the HMDs with a shared map. This setup promotes better spatial orientation and collaborative interaction within the virtual environment.

By adhering to these guidelines, developers can ensure a robust setup conducive to developing immersive VR applications and experiences. Ensure all hardware components and software configurations meet the specified requirements before proceeding with development activities.

Examples of Hardware Configurations

There’s an almost infinite combination 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 (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.

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

🛠️
Unreal Engine 5.3 Documentation | Epic Developer Community
Hardware and Software Specifications | Epic Developer Community
Vive Business Streaming
PICO Business Streaming