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
  • Step 1: Prepare the Alignment Tool
  • Step 2: Configure Constellation Markers
  • Step 3: Attach Alignment Tool to headset
  • Step 4: Aligning Head-Mounted Displays (HMDs) for Accurate Tracking
  1. Learning Existent
  2. Getting Started
  3. Adding Tracked Objects
  4. Outside-in (Optitrack/Vicon) Setup

3D Print an Alignment Tool

PreviousAligning HMDs with outside-in systemsNextCreating Digital Twins/Props

Last updated 10 months ago

Step 1: Prepare the Alignment Tool

1.1 If you are using a Vive Focus 3 you can download the Existent alignment tool 3D Model provided to you in STL format from this and use a 3D printer to print it.

If you don’t own a 3D printer you can use a 3rd party company such as that allows you to upload a 3d model and request for the 3d printed item to be delivered to you.

An alignment tool for PICO 4 Enterprise headsets is coming soon!

1.1.1 Print settings vary by printer. Please select the appropriate settings for the printer you will be using. We recommend that you 3D print the tool using 100% infill and supports as well as high precision settings. We also suggest using the following rotation:

1.2 Gather the following materials for assembly:

8mm diameter x 2mm thick N42 Neodymium Magnets - 1Kg Pull or similar pull specification

4

M4 Socket Cap Bolt/Screw + Connecting Nuts or Nyloc nuts or Shaft collars

4

Fully threaded M4 Threaded bars

1

Polymer Spacer nuts

4

15.9 mm (5/8") M4 Sphere Markers

5+

Super glue or adhesive suitable for bonding magnets

1

We recommend using at least five 15.9mm (5/8") M4 sphere markers for optimal results, as these have been thoroughly tested by our team. However, you are welcome to use sphere markers of different sizes, provided you carefully adjust their positions on the tool accordingly.

1.3 Attach the magnets into the designated holes on the alignment tool. Check if the magnets work properly and are the right way around by manually testing magnetism. After that, glue the magnets on the tool.

1.4 Attach one of the marker spheres to the pivot point as shown on the picture below using the double-ended threaded bar or any other tool you can use to make sure it stays 7.95mm above the end of the tool (half size of sphere).

1.5 Take the remaining marker spheres and attach them to the alignment tool. Use the designated holes on the tool for this purpose.

  1. For each sphere besides the pivot sphere, use socket cap bolts and spacers to connect it to the tool. This helps in creating a secure fit.

  2. For the pivot sphere use a fully threaded bar.

  3. Once satisfied with the placement, secure the markers to the alignment tool using attach nuts, nylocs, or shaft collars at the end of each threaded bar, ensuring each marker retains its designated position.

  4. Ensure that the arrangement of the marker spheres forms a precise and stable constellation.

  5. Ensure that the placement of markers won’t make them collide with the VR HMD when it is attached to it. Please see Step 3 below on how to attach and test. Also make sure that the sphere markers won’t be occluded by the headset when attached to it.

  6. When setting up the constellation markers, make sure that their placement does not interfere with the functionality of the alignment tool.

1.5.1 Verify that the cameras can detect and distinguish the markers effectively. For added versatility, consider attaching markers with varying lengths between them, aligning them along the x, y, and z axes to enhance tracking capabilities. Below you can see the constellation we used.

Step 2: Configure Constellation Markers

2.1 Open the motion capture software of your choice ('Motive' for Optitrack or 'Tracker' for Vicon) used for tracking within your project environment.

2.3 When the rigidbody is created, its pivot point is placed at its geometric centre by default, and its orientation axis will be aligned with the global coordinate axis. You need to modify the pivot point so that it is set to the position of the pivot marker sphere.

Step 3: Attach Alignment Tool to headset

3.1 Remove the Vive Focus 3 Face Mask and attach the alignment tool to it as shown on the pictures below. Ensure the top and bottom magnets are connected and hold in place if necessary. The magnets should make the tool snap in-place.Ensure once again that the sphere markers are not occluded by the headset(besides the pivot sphere)

Step 4: Aligning Head-Mounted Displays (HMDs) for Accurate Tracking

Read the instructions on this page: Aligning HMDs with outside-in systems

2.2 Start the process to rigid body. Ensure that the placement of markers does not interfere with the headset when attached. You can also use Motive’s tutorials and or Vicon’s tutorial . Make sure you use a standard name for your rigidbody (e.g. 'HMDReference') as we are going to use it later on via the Existent Plugin in Unreal Engine.

🖥️
create a constellation
here
here
here
Example Link
Socket Caps
Nyloc nuts
Shaft Collars
Threaded bars
Example Link
Example link
Example Link
link
Shapeways
Front view
Side view
Top view