From 5a8db91b5e705eeb827c72088ed8f4bf9b84b5d8 Mon Sep 17 00:00:00 2001 From: Bastiaan Olij Date: Mon, 5 Aug 2024 15:50:57 +1000 Subject: [PATCH] Updated project based on Godot changes in PR 95153 --- .../assets/gltf/LeftHandHumanoid.gltf.import | 3 --- .../assets/gltf/RightHandHumanoid.gltf.import | 3 --- xr/openxr_hand_tracking_demo/hand_info.gd | 27 ++++++++++++------- xr/openxr_hand_tracking_demo/main.tscn | 19 ++++++++++--- xr/openxr_hand_tracking_demo/project.godot | 3 +++ 5 files changed, 36 insertions(+), 19 deletions(-) diff --git a/xr/openxr_hand_tracking_demo/assets/gltf/LeftHandHumanoid.gltf.import b/xr/openxr_hand_tracking_demo/assets/gltf/LeftHandHumanoid.gltf.import index 371ff30732..1fdc5a8b9f 100644 --- a/xr/openxr_hand_tracking_demo/assets/gltf/LeftHandHumanoid.gltf.import +++ b/xr/openxr_hand_tracking_demo/assets/gltf/LeftHandHumanoid.gltf.import @@ -32,8 +32,5 @@ animation/remove_immutable_tracks=true animation/import_rest_as_RESET=false import_script/path="" _subresources={} -fbx/importer=0 -fbx/allow_geometry_helper_nodes=false -fbx/embedded_image_handling=1 gltf/naming_version=1 gltf/embedded_image_handling=1 diff --git a/xr/openxr_hand_tracking_demo/assets/gltf/RightHandHumanoid.gltf.import b/xr/openxr_hand_tracking_demo/assets/gltf/RightHandHumanoid.gltf.import index 4156b55cab..c94ec1bb21 100644 --- a/xr/openxr_hand_tracking_demo/assets/gltf/RightHandHumanoid.gltf.import +++ b/xr/openxr_hand_tracking_demo/assets/gltf/RightHandHumanoid.gltf.import @@ -32,8 +32,5 @@ animation/remove_immutable_tracks=true animation/import_rest_as_RESET=false import_script/path="" _subresources={} -fbx/importer=0 -fbx/allow_geometry_helper_nodes=false -fbx/embedded_image_handling=1 gltf/naming_version=1 gltf/embedded_image_handling=1 diff --git a/xr/openxr_hand_tracking_demo/hand_info.gd b/xr/openxr_hand_tracking_demo/hand_info.gd index 03d3b5b004..53a498075c 100644 --- a/xr/openxr_hand_tracking_demo/hand_info.gd +++ b/xr/openxr_hand_tracking_demo/hand_info.gd @@ -2,6 +2,7 @@ extends Node3D @export_enum("Left", "Right") var hand : int = 0 +@export var fallback_mesh : Node3D # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta): @@ -36,17 +37,23 @@ func _process(delta): if hand_tracker: text += "\nHand tracker found\n" - if hand_tracker.has_tracking_data: - if hand_tracker.hand_tracking_source == XRHandTracker.HAND_TRACKING_SOURCE_UNKNOWN: - text += "- Source: unknown\n" - elif hand_tracker.hand_tracking_source == XRHandTracker.HAND_TRACKING_SOURCE_UNOBSTRUCTED: - text += "- Source: optical hand tracking\n" - elif hand_tracker.hand_tracking_source == XRHandTracker.HAND_TRACKING_SOURCE_CONTROLLER: - text += "- Source: inferred from controller\n" - else: - text += "- Source: %d\n" % [ hand_tracker.hand_tracking_source ] + # Report data source specified + if hand_tracker.hand_tracking_source == XRHandTracker.HAND_TRACKING_SOURCE_UNKNOWN: + text += "- Source: unknown\n" + elif hand_tracker.hand_tracking_source == XRHandTracker.HAND_TRACKING_SOURCE_UNOBSTRUCTED: + text += "- Source: optical hand tracking\n" + elif hand_tracker.hand_tracking_source == XRHandTracker.HAND_TRACKING_SOURCE_CONTROLLER: + text += "- Source: inferred from controller\n" + elif hand_tracker.hand_tracking_source == XRHandTracker.HAND_TRACKING_SOURCE_NOT_TRACKED: + text += "- Source: no source\n" else: - text += "- No tracking data\n" + text += "- Source: %d\n" % [ hand_tracker.hand_tracking_source ] + + # If we're not tracking, show our fallback mesh on our controller tracking. + # If we're also not controller tracking, we can't show anything. + # Note: this is only a sphere in this example. + if fallback_mesh: + fallback_mesh.visible = !hand_tracker.has_tracking_data else: text += "\nNo hand tracker found!\n" diff --git a/xr/openxr_hand_tracking_demo/main.tscn b/xr/openxr_hand_tracking_demo/main.tscn index d060375c19..fbdfce8621 100644 --- a/xr/openxr_hand_tracking_demo/main.tscn +++ b/xr/openxr_hand_tracking_demo/main.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=14 format=3 uid="uid://br3bss6kac8pa"] +[gd_scene load_steps=15 format=3 uid="uid://br3bss6kac8pa"] [ext_resource type="PackedScene" uid="uid://d22k0sp2hinew" path="res://assets/gltf/LeftHandHumanoid.gltf" id="2_3hxem"] [ext_resource type="Script" path="res://start_vr.gd" id="2_5rtkn"] @@ -32,6 +32,10 @@ size = Vector2(1000, 1000) subdivide_width = 10 subdivide_depth = 10 +[sub_resource type="SphereMesh" id="SphereMesh_d5x0p"] +radius = 0.01 +height = 0.02 + [node name="Main" type="Node3D"] [node name="StartVR" type="Node3D" parent="."] @@ -73,12 +77,14 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.13752, 0.941084, 0) [node name="Box03" parent="Table" instance=ExtResource("7_6sqt7")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0746718, 1.06282, 0) -[node name="LeftHandInfo" parent="Table" instance=ExtResource("5_wlhtu")] +[node name="LeftHandInfo" parent="Table" node_paths=PackedStringArray("fallback_mesh") instance=ExtResource("5_wlhtu")] transform = Transform3D(0.939693, -0.085635, 0.331126, 0, 0.968147, 0.25038, -0.34202, -0.23528, 0.909761, -0.713026, 0.8718, -0.309953) +fallback_mesh = NodePath("../../XROrigin3D/LeftHandController/FullbackMesh") -[node name="RightHandInfo" parent="Table" instance=ExtResource("5_wlhtu")] +[node name="RightHandInfo" parent="Table" node_paths=PackedStringArray("fallback_mesh") instance=ExtResource("5_wlhtu")] transform = Transform3D(0.939693, 0.085635, -0.331126, 0, 0.968147, 0.25038, 0.34202, -0.23528, 0.909761, 0.278022, 0.8718, -0.381943) hand = 1 +fallback_mesh = NodePath("../../XROrigin3D/RightHandController/FullbackMesh") [node name="XROrigin3D" type="XROrigin3D" parent="."] @@ -91,6 +97,9 @@ tracker = &"left_hand" pose = &"pose" show_when_tracked = true +[node name="FullbackMesh" type="MeshInstance3D" parent="XROrigin3D/LeftHandController"] +mesh = SubResource("SphereMesh_d5x0p") + [node name="PickupHandler" parent="XROrigin3D/LeftHandController" instance=ExtResource("3_sg1io")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.05, 0, 0) pickup_action = "pickup" @@ -101,6 +110,10 @@ tracker = &"right_hand" pose = &"pose" show_when_tracked = true +[node name="FullbackMesh" type="MeshInstance3D" parent="XROrigin3D/RightHandController"] +mesh = SubResource("SphereMesh_d5x0p") +skeleton = NodePath("../../LeftHandController") + [node name="PickupHandler" parent="XROrigin3D/RightHandController" instance=ExtResource("3_sg1io")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.05, 0, 0) pickup_action = "pickup" diff --git a/xr/openxr_hand_tracking_demo/project.godot b/xr/openxr_hand_tracking_demo/project.godot index 1a18af261f..761041b272 100644 --- a/xr/openxr_hand_tracking_demo/project.godot +++ b/xr/openxr_hand_tracking_demo/project.godot @@ -35,5 +35,8 @@ openxr/enabled=true openxr/reference_space=2 openxr/foveation_level=2 openxr/foveation_dynamic=true +openxr/extensions/hand_tracking=true +openxr/extensions/hand_tracking_unobstructed_data_source=true +openxr/extensions/hand_tracking_controller_data_source=true openxr/extensions/hand_interaction_profile=true shaders/enabled=true