quest3-bt.mp4
An experiment for implementing Babylon.js WebXR Body Tracking Feature.
- Meta Quest v65.0.0.546.596219110
- Quest Browser 33.2.0.74.167.602488549
- Babylon.js 7.3.1
# install dependencies
pnpm install
# start dev server
pnpm dev
# build projects
pnpm build
Important
You need to enable WebXR Experiments flag on Quest Browser (for body-tracking). To do this, access chrome://flags and serach "webxr" in serch bar.
const xr = await scene.createDefaultXRExperienceAsync({
uiOptions: {
sessionMode: "immersive-ar",
referenceSpaceType: "bounded-floor",
},
});
const { featuresManager, sessionManager } = xr.baseExperience;
// init body-tracking feature
const bodyTracking = featuresManager.enableFeature(
WebXRBodyTracking.Name,
"latest",
{
mirrorZ: true, // swap z-direction
baseXRSpace: sessionManager.referenceSpace, // base XRSPace
}
) as WebXRBodyTracking;
// acquire body joints data from event
bodyTracking.onBodyTrackedObservable.add((joints) => {
// acquire body joints count
const jointCount = joints.size;
// usage of acquire specific joint pose
const headJoint = joints.get("head");
if (headJoint) {
headJoint.position;
headJoint.rotation;
}
// you can iterate joints by for-statement
for (const [jointName, { position, rotation }] of joints) {
}
// or...
joints.forEach(({ position, rotation }, jointName) => {});
});
// you can also use Frame capture loop
sessionManager.onXRFrameObservable.add(() => {
if (bodyTracking.size === 0) return;
const joints = bodyTracking.joints;
});
@drumath2237