KhronosGroup / OpenXR-Docs

OpenXR Specification sources and related material
Other
143 stars 62 forks source link

Missing a "local floor" reference space. #103

Closed Slin closed 1 year ago

Slin commented 3 years ago

I am sorry for bringing this up again (I was already arguing about it on the Khronos slack server), but I still can't get over this... So if I don't manage to make a good enough case here I'll give up for now :) (On quest there is the XR_OCULUS_common_reference_spaces extension, which I suspect might have something like this, but there is no documentation on it anywhere and in my opinion this should not be oculus specific).

My game as well as many other VR games are mostly standing experiences. Players can of course walk around in their play space, but most are lazy and won't actually do more than reaching out for things with their hands. For this case the specification says the STAGE reference space is "useful": STAGE space is useful when an application needs to render standing-scale content (no bounds) or room-scale content (with bounds) that is relative to the physical floor. So that's what I am using now.

But then I take my Quest, go stand in my play space to play a game, am facing some random direction, may not be perfectly centered in my space so I press and hold the button (it's much more convenient than moving around until in the right spot) to reset the orientation and center in the oculus menu environment, the menu faces me and I start the game. But now the game uses the STAGE space and as a result the games menu screen is aligned to the STAGE spaces forward direction and center, which is completely different to what I had before and I am back to either having to trigger the game specific recenter or searching for the menu. It's just not a good experience. My current solution is to automatically trigger my custom recentering on game start, but then my girlfriend comes in the room talking to me and I lift up the headset while I just started the game (but it's still loading) and again the forward direction is all messed up once I put it on again.

Another example would be after playing for an hour or so standing, the game might not be very active most of the time, so I decide to sit down to keep playing (or I just start out sitting), but the chair is not anywhere close to the play space center, so again having a general way to reset my position would be super useful (Phasmophobia would be a good example for a game that I usually play sitting).

The "local" space would solve all of it, if only it's origin was in the floor.

I think I can get the missing floor height by locating the local space inside that stage space, but then it's an application specific thing that for example Unreal does not do at the moment.

Thanks for all you do for OpenXR! The specification is already great and the runtimes are also getting better :)

rpavlik-bot commented 3 years ago

An issue (number 1606) has been filed to correspond to this issue in the internal Khronos GitLab (Khronos members only: KHR:openxr/openxr#1606 ), to facilitate working group processes.

This GitHub issue will continue to be the main site of discussion.

casseveritt commented 3 years ago

I think the expectation here is that the app would locate local space relative to the stage, and then create a space relative to local space that is translated down by whatever the y distance is between local and stage spaces.

Typically, I'd expect user-centric content to be drawn relative to a space created from LOCAL space, because it is always the user's expression of their nominal head location. In order to manage the space that's on the "local floor", you'd need to watch for LOCAL space redefinition events and re-create your "local floor" space.

I agree that having a LOCAL_FLOOR reference space would make this process simpler for the app...

rpavlik commented 1 year ago

XR_EXT_local_floor is released in 1.0.27!