OpenXR Interaction Profiles

Search for a command to run...

No comments yet. Be the first to comment.
The HTTP of VR 27 Nov Written By Roderick Kennedy There’s been a lot of interest lately in the Metaverse and its potential. To get to that potential, we’re missing a vital piece of the puzzle, without which I think the whole project will never reall...
rem building v8 rem following https://medium.com/angular-in-depth/how-to-build-v8-on-windows-and-not-go-mad-6347c69aacd4 echo off set Path=%cd%\depot_tools;%Path% set DEPOT_TOOLS_WIN_TOOLCHAIN=0 set GYP_MSVS_VERSION=2022 rem curl -O https://storage...
Find your Visual Studio install directory. It is probably something like "C:\Program Files\Microsoft Visual Studio\2022\Community" Navigate to the subfolder "Common7\Packages\Debugger\Visualizers". As administrator, edit the file default.natstepfilte...
Following the work in my previous post, I happened across this Mastodon post about how good it would be to use lambdas, or function objects, as inputs in shaders. [ ](https://mastodon.gamedev.place/@meuns/111119173437770101) It occurred to me that i...

The Sfx shader language and shader variants 19 Sep Written By Roderick Kennedy For some reason there seems to be a lot of interest in custom and alternative game engine development now. Whatever the cause of this mysterious uptick, I thought I'd post...
Why the Metaverse Failed 11 Sep Written By Roderick Kennedy The research firm Gartner has a way of visualizing the development and adoption of new technologies. After an initial work and investment gold rush, there follows a "trough of disillusionmen...

I’ve tabulated the standard OpenXR interaction profiles from the Khronos OpenXR spec at https://www.khronos.org/registry/OpenXR/specs/1.0/html/xrspec.html#semantic-path-interaction-profiles.
A given Teleport server will have a control set it supports. This must be sent to any connecting client, to say “these are the controls I need for interaction to work”. The client must then match these controls to its hardware.
Unfortunately, there seems to be nothing in OpenXR that allows us to query the XR device for what paths it provides - you just have to suggest bindings and that will either succeed or fail.
And we need to handle the case where an essential control is missing, and the case where the suggested binding for two required inputs is the same.
This is the table:

https://docs.google.com/spreadsheets/d/1w4Me9_yG_TNho4Gmelrc9ILYtG1TELoxCXc622xUiVM/edit?usp=sharing
Most hardware should support at least the Khronos Simple Controller, plus its own profile if present. There is also the option of extension paths which include “_ext” in them. But again, no way to query them…
Only the HTC Vive Pro implements the “head” path, and only for a system button and sound controls. OpenXR does not treat the headset as a controller the way it does for the hands; you have to use xrLocateSpace to get the head pose.
So unless we’re using a gamepad, in most cases we’ll have a user path “/user/hand/left” and “/user/hand/right”, to which we’ll append the input path. For example “/user/hand/left/input/grip/pose” to get the position+orientation (the “pose” in XR jargon) of the left hand. And all of the hand controllers provide two poses per hand: the “grip” which is supposed to be the centre of the palm with the Z-axis pointing down from index finger to pinkie; and the “aim”, where the negative Z-axis points in the “aiming” direction of the controller. These two poses are locked together in all current controllers I know of, they move in sync and the offsets from “grip” to “aim” simply represent the slightly different geometries of the various handsets.