diff --git a/doc/classes/XRBodyTracker.xml b/doc/classes/XRBodyTracker.xml
index 06a48799531..42ff6114440 100644
--- a/doc/classes/XRBodyTracker.xml
+++ b/doc/classes/XRBodyTracker.xml
@@ -289,7 +289,40 @@
Right pinky finger tip joint.
-
+
+ Lower chest joint.
+
+
+ Left scapula joint.
+
+
+ Left wrist twist joint.
+
+
+ Right scapula joint.
+
+
+ Right wrist twist joint.
+
+
+ Left ankle twist joint.
+
+
+ Left ankle joint.
+
+
+ Left middle foot joint.
+
+
+ Right ankle twist joint.
+
+
+ Right ankle joint.
+
+
+ Right middle foot joint.
+
+
Represents the size of the [enum Joint] enum.
diff --git a/scene/3d/xr/xr_body_modifier_3d.cpp b/scene/3d/xr/xr_body_modifier_3d.cpp
index 80f00d8bdc4..75328154598 100644
--- a/scene/3d/xr/xr_body_modifier_3d.cpp
+++ b/scene/3d/xr/xr_body_modifier_3d.cpp
@@ -82,7 +82,7 @@ XRBodyModifier3D::BoneUpdate XRBodyModifier3D::get_bone_update() const {
}
void XRBodyModifier3D::_get_joint_data() {
- // Table of Godot Humanoid bone names.
+ // Table of Godot Humanoid bone names with some additions.
static const String bone_names[XRBodyTracker::JOINT_MAX] = {
"Root", // XRBodyTracker::JOINT_ROOT
@@ -168,6 +168,19 @@ void XRBodyModifier3D::_get_joint_data() {
"RightLittleIntermediate", // XRBodyTracker::JOINT_RIGHT_PINKY_FINGER_PHALANX_INTERMEDIATE
"RightLittleDistal", // XRBodyTracker::JOINT_RIGHT_PINKY_FINGER_PHALANX_DISTAL
"RightLittleTip", // XRBodyTracker::JOINT_RIGHT_PINKY_FINGER_TIP
+
+ // Extra Joints.
+ "LowerChest", // XRBodyTracker::JOINT_LOWER_CHEST
+ "LeftScapula", // XRBodyTracker::JOINT_LEFT_SCAPULA
+ "LeftWristTwist", // XRBodyTracker::JOINT_LEFT_WRIST_TWIST
+ "RightScapula", // XRBodyTracker::JOINT_RIGHT_SCAPULA
+ "RightWristTwist", // XRBodyTracker::JOINT_RIGHT_WRIST_TWIST
+ "LeftAnkleTwist", // XRBodyTracker::JOINT_LEFT_ANKLE_TWIST
+ "LeftAnkle", // XRBodyTracker::JOINT_LEFT_ANKLE
+ "LeftMiddleFoot", // XRBodyTracker::JOINT_LEFT_MIDDLE_FOOT
+ "RightAnkleTwist", // XRBodyTracker::JOINT_RIGHT_ANKLE_TWIST
+ "RightAnkle", // XRBodyTracker::JOINT_RIGHT_ANKLE
+ "RightMiddleFoot", // XRBodyTracker::JOINT_RIGHT_MIDDLE_FOOT
};
// reset JIC.
diff --git a/servers/xr/xr_body_tracker.cpp b/servers/xr/xr_body_tracker.cpp
index 9c82b809113..3f3b6b0670c 100644
--- a/servers/xr/xr_body_tracker.cpp
+++ b/servers/xr/xr_body_tracker.cpp
@@ -126,6 +126,17 @@ void XRBodyTracker::_bind_methods() {
BIND_ENUM_CONSTANT(JOINT_RIGHT_PINKY_FINGER_PHALANX_INTERMEDIATE);
BIND_ENUM_CONSTANT(JOINT_RIGHT_PINKY_FINGER_PHALANX_DISTAL);
BIND_ENUM_CONSTANT(JOINT_RIGHT_PINKY_FINGER_TIP);
+ BIND_ENUM_CONSTANT(JOINT_LOWER_CHEST);
+ BIND_ENUM_CONSTANT(JOINT_LEFT_SCAPULA);
+ BIND_ENUM_CONSTANT(JOINT_LEFT_WRIST_TWIST);
+ BIND_ENUM_CONSTANT(JOINT_RIGHT_SCAPULA);
+ BIND_ENUM_CONSTANT(JOINT_RIGHT_WRIST_TWIST);
+ BIND_ENUM_CONSTANT(JOINT_LEFT_ANKLE_TWIST);
+ BIND_ENUM_CONSTANT(JOINT_LEFT_ANKLE);
+ BIND_ENUM_CONSTANT(JOINT_LEFT_MIDDLE_FOOT);
+ BIND_ENUM_CONSTANT(JOINT_RIGHT_ANKLE_TWIST);
+ BIND_ENUM_CONSTANT(JOINT_RIGHT_ANKLE);
+ BIND_ENUM_CONSTANT(JOINT_RIGHT_MIDDLE_FOOT);
BIND_ENUM_CONSTANT(JOINT_MAX);
BIND_BITFIELD_FLAG(JOINT_FLAG_ORIENTATION_VALID);
diff --git a/servers/xr/xr_body_tracker.h b/servers/xr/xr_body_tracker.h
index dbf8b30a0a8..848509d8982 100644
--- a/servers/xr/xr_body_tracker.h
+++ b/servers/xr/xr_body_tracker.h
@@ -129,6 +129,19 @@ public:
JOINT_RIGHT_PINKY_FINGER_PHALANX_DISTAL,
JOINT_RIGHT_PINKY_FINGER_TIP,
+ // Extra joints that aren't part of the Godot humanoid skeleton, but are commonly used in some VR avatars.
+ JOINT_LOWER_CHEST,
+ JOINT_LEFT_SCAPULA,
+ JOINT_LEFT_WRIST_TWIST,
+ JOINT_RIGHT_SCAPULA,
+ JOINT_RIGHT_WRIST_TWIST,
+ JOINT_LEFT_ANKLE_TWIST,
+ JOINT_LEFT_ANKLE,
+ JOINT_LEFT_MIDDLE_FOOT,
+ JOINT_RIGHT_ANKLE_TWIST,
+ JOINT_RIGHT_ANKLE,
+ JOINT_RIGHT_MIDDLE_FOOT,
+
JOINT_MAX,
};