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
  • Why a grip edit mode?
  • What is the grip edit mode?
  • Known Limitations
  1. GUIDES

Grip Authoring

Learn about existent grip authoring tools

PreviousBuilding and packaging a projectNextCreating a pose and entering edit mode

Last updated 10 months ago

Before getting started it’s advisable to familiarise yourself with the following concepts: and .

The grip edit mode offers tools to support the authoring of grip poses used by the ExistentGripComponent and the overall grab system.

Why a grip edit mode?

When creating a tracked object, custom grips are essential to make handling the object feel natural. While the ExistentGripComponent and the ExistentHandSolver can let you generate dynamic poses you will get the best results by providing authored poses.

An authored pose in this context is an animation sequence that has at least one frame of data. There are several means to create an animation sequence to use as a grip pose, however, all the available solutions introduce friction. The grip edit mode aims at improving authoring the grip poses workflow.

What is the grip edit mode?

In essence, the grip edit mode is a blueprint editor custom mode that lets you create and edit grip poses directly while working on a tracked object.

Using this mode you can manipulate the hand bones of a grip preview mesh and generate a custom pose. Aside from manipulating the bones you can also adjust the grip component itself to better align the grip pose with the tracked object. Finally the grip edit mode allows to save the edits made on the grip preview mesh to an animation sequence.

Known Limitations

Because the grip edit mode is a custom editor mode embedded inside the blueprint editor there are some known limitations compared to a full custom asset editor.

  • The grip edit mode is built using the component visualizer framework in Unreal Engine. While a lot can be achieved with this framework, there are limitations around capturing inputs. Using a component visualizer, inputs can only be captured in the viewport. This means that while editing a grip if you click away from the viewport on a blueprint editor button/component/variable the grip component will be deselected and the grip edit mode will exit. This issue is remedied by caching all your current changes as you are editing a grip which means that if you exit grip edit mode by mistake you can enter it again and resume from where you left off.

  • Similar to the above point, since the grip edit mode has limitations around capturing inputs you may notice that keyboard shortcuts will not work when you firstly enter grip edit mode. This occurs because the component visualizer has not received focused yet. Once you click on the first bone control and the component visualizer has received input all the keyboard shortcuts will start to work.

πŸ–οΈ
ExistentGrabComponent
ExistentGripComponent