Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Kim <pk15950@gmail.com>2022-02-23 10:46:55 +0300
committerPeter Kim <pk15950@gmail.com>2022-02-23 10:46:55 +0300
commit43b98b1c5fcd36355c00d75a27dc8bdb23ad285f (patch)
treee6463677160a92dde7b3db80282273c1944b8efd
parentbe48defed859a8c858e64eeffa3823c768eadaa9 (diff)
VR: Add action bindings for Vive Trackers
Intended for use with motion capture objects. Currently only supported by the SteamVR runtime (1.21) and requires the "HTC Vive Tracker" extension to be enabled via the "Extensions" panel.
-rw-r--r--viewport_vr_preview/action_map.py11
-rw-r--r--viewport_vr_preview/configs/default.py11
-rw-r--r--viewport_vr_preview/defaults.py49
-rw-r--r--viewport_vr_preview/gui.py3
4 files changed, 74 insertions, 0 deletions
diff --git a/viewport_vr_preview/action_map.py b/viewport_vr_preview/action_map.py
index a9728ec4..ce87873c 100644
--- a/viewport_vr_preview/action_map.py
+++ b/viewport_vr_preview/action_map.py
@@ -100,6 +100,11 @@ def vr_create_actions(context: bpy.context):
if len(am.actionmap_items) < 1:
continue
+ # Check for action maps where all bindings require OpenXR extensions.
+ if am.name == defaults.VRDefaultActionmaps.TRACKER.value:
+ if not session_settings.enable_vive_tracker_extension: #scene.vr_actions_enable_vive_tracker:
+ continue
+
ok = session_state.action_set_create(context, am)
if not ok:
return
@@ -191,6 +196,11 @@ def register():
description="Enable bindings for the HTC Vive Focus 3 controllers. Note that this may not be supported by all OpenXR runtimes",
default=False,
)
+ # Stored in session settings to use in session creation as a workaround for SteamVR controller/tracker compatibility issues.
+ #bpy.types.Scene.vr_actions_enable_vive_tracker = bpy.props.BoolProperty(
+ # description="Enable bindings for the HTC Vive Trackers. Note that this may not be supported by all OpenXR runtimes",
+ # default=False,
+ #)
bpy.app.handlers.xr_session_start_pre.append(vr_create_actions)
@@ -201,5 +211,6 @@ def unregister():
del bpy.types.Scene.vr_actions_enable_reverb_g2
del bpy.types.Scene.vr_actions_enable_vive_cosmos
del bpy.types.Scene.vr_actions_enable_vive_focus
+ #del bpy.types.Scene.vr_actions_enable_vive_tracker
bpy.app.handlers.xr_session_start_pre.remove(vr_create_actions)
diff --git a/viewport_vr_preview/configs/default.py b/viewport_vr_preview/configs/default.py
index 2f103e59..1b5ff7fe 100644
--- a/viewport_vr_preview/configs/default.py
+++ b/viewport_vr_preview/configs/default.py
@@ -477,6 +477,17 @@ actionconfig_data = \
],
},
),
+ ("blender_default_tracker",
+ {"items":
+ [("tracker_pose", {"type": 'POSE', "user_paths": ['/user/vive_tracker_htcx/role/left_foot', '/user/vive_tracker_htcx/role/right_foot', '/user/vive_tracker_htcx/role/left_shoulder', '/user/vive_tracker_htcx/role/right_shoulder', '/user/vive_tracker_htcx/role/left_elbow', '/user/vive_tracker_htcx/role/right_elbow', '/user/vive_tracker_htcx/role/left_knee', '/user/vive_tracker_htcx/role/right_knee', '/user/vive_tracker_htcx/role/waist', '/user/vive_tracker_htcx/role/chest', '/user/vive_tracker_htcx/role/camera', '/user/vive_tracker_htcx/role/keyboard'], "pose_is_controller_grip": 'True', "pose_is_controller_aim": 'True'}, None,
+ {"bindings":
+ [("vive_tracker", {"profile": '/interaction_profiles/htc/vive_tracker_htcx', "component_paths": ['/input/grip/pose', '/input/grip/pose', '/input/grip/pose', '/input/grip/pose', '/input/grip/pose', '/input/grip/pose', '/input/grip/pose', '/input/grip/pose', '/input/grip/pose', '/input/grip/pose', '/input/grip/pose', '/input/grip/pose'], "pose_location": '(0.0, 0.0, 0.0)', "pose_rotation": '(0.0, 0.0, 0.0)'}),
+ ],
+ },
+ ),
+ ],
+ },
+ ),
]
diff --git a/viewport_vr_preview/defaults.py b/viewport_vr_preview/defaults.py
index 3f5c2feb..fb793554 100644
--- a/viewport_vr_preview/defaults.py
+++ b/viewport_vr_preview/defaults.py
@@ -18,12 +18,14 @@ import os.path
class VRDefaultActionmaps(Enum):
DEFAULT = "blender_default"
GAMEPAD = "blender_default_gamepad"
+ TRACKER = "blender_default_tracker"
# Default actions.
class VRDefaultActions(Enum):
CONTROLLER_GRIP = "controller_grip"
CONTROLLER_AIM = "controller_aim"
+ TRACKER_POSE = "tracker_pose"
TELEPORT = "teleport"
NAV_GRAB = "nav_grab"
FLY = "fly"
@@ -58,6 +60,7 @@ class VRDefaultActionbindings(Enum):
VIVE = "vive"
VIVE_COSMOS = "vive_cosmos"
VIVE_FOCUS = "vive_focus"
+ VIVE_TRACKER = "vive_tracker"
WMR = "wmr"
@@ -71,6 +74,7 @@ class VRDefaultActionprofiles(Enum):
VIVE = "/interaction_profiles/htc/vive_controller"
VIVE_COSMOS = "/interaction_profiles/htc/vive_cosmos_controller"
VIVE_FOCUS = "/interaction_profiles/htc/vive_focus3_controller"
+ VIVE_TRACKER = "/interaction_profiles/htc/vive_tracker_htcx"
WMR = "/interaction_profiles/microsoft/motion_controller"
@@ -1809,6 +1813,50 @@ def vr_defaults_create_default_gamepad(session_settings):
["/output/haptic_right_trigger"])
+def vr_defaults_create_default_tracker(session_settings):
+ am = vr_defaults_actionmap_add(session_settings,
+ VRDefaultActionmaps.TRACKER.value)
+ if not am:
+ return
+
+ ami = vr_defaults_pose_action_add(am,
+ VRDefaultActions.TRACKER_POSE.value,
+ [#"/user/vive_tracker_htcx/role/handheld_object", # SteamVR (1.21) fails to assign interaction profile.
+ "/user/vive_tracker_htcx/role/left_foot",
+ "/user/vive_tracker_htcx/role/right_foot",
+ "/user/vive_tracker_htcx/role/left_shoulder",
+ "/user/vive_tracker_htcx/role/right_shoulder",
+ "/user/vive_tracker_htcx/role/left_elbow",
+ "/user/vive_tracker_htcx/role/right_elbow",
+ "/user/vive_tracker_htcx/role/left_knee",
+ "/user/vive_tracker_htcx/role/right_knee",
+ "/user/vive_tracker_htcx/role/waist",
+ "/user/vive_tracker_htcx/role/chest",
+ "/user/vive_tracker_htcx/role/camera",
+ "/user/vive_tracker_htcx/role/keyboard"],
+ True,
+ True)
+ if ami:
+ vr_defaults_pose_actionbinding_add(ami,
+ VRDefaultActionbindings.VIVE_TRACKER.value,
+ VRDefaultActionprofiles.VIVE_TRACKER.value,
+ [#"/input/grip/pose",
+ "/input/grip/pose",
+ "/input/grip/pose",
+ "/input/grip/pose",
+ "/input/grip/pose",
+ "/input/grip/pose",
+ "/input/grip/pose",
+ "/input/grip/pose",
+ "/input/grip/pose",
+ "/input/grip/pose",
+ "/input/grip/pose",
+ "/input/grip/pose",
+ "/input/grip/pose"],
+ (0, 0, 0),
+ (0, 0, 0))
+
+
def vr_get_default_config_path():
filepath = os.path.join(os.path.dirname(os.path.abspath(__file__)), "configs")
return os.path.join(filepath, "default.py")
@@ -1832,6 +1880,7 @@ def vr_ensure_default_actionmaps(session_settings):
# Create and save default action maps.
vr_defaults_create_default(session_settings)
vr_defaults_create_default_gamepad(session_settings)
+ vr_defaults_create_default_tracker(session_settings)
action_map.vr_save_actionmaps(session_settings, filepath, sort=False)
diff --git a/viewport_vr_preview/gui.py b/viewport_vr_preview/gui.py
index 8b92f13d..d7b77a30 100644
--- a/viewport_vr_preview/gui.py
+++ b/viewport_vr_preview/gui.py
@@ -536,6 +536,7 @@ class VIEW3D_PT_vr_actions_extensions(VRActionsPanel, Panel):
def draw(self, context):
scene = context.scene
+ session_settings = context.window_manager.xr_session_settings
layout = self.layout
layout.use_property_split = True
@@ -545,6 +546,8 @@ class VIEW3D_PT_vr_actions_extensions(VRActionsPanel, Panel):
col.prop(scene, "vr_actions_enable_reverb_g2", text="HP Reverb G2")
col.prop(scene, "vr_actions_enable_vive_cosmos", text="HTC Vive Cosmos")
col.prop(scene, "vr_actions_enable_vive_focus", text="HTC Vive Focus")
+ col.prop(session_settings, "enable_vive_tracker_extension", text="HTC Vive Tracker")
+ #col.prop(scene, "vr_actions_enable_vive_tracker", text="HTC Vive Tracker")
col.prop(scene, "vr_actions_enable_huawei", text="Huawei")