ValveSoftware / openvr

OpenVR SDK
http://steamvr.com
BSD 3-Clause "New" or "Revised" License
6.08k stars 1.28k forks source link

Enhancement: Allow pitch and roll rotations of playspace #681

Open wheeler-man opened 6 years ago

wheeler-man commented 6 years ago

Earlier versions of OpenVR permitted one to apply pitch and roll rotations to the playspace. Now it is only possible to rotate the playspace about the up-vector (heading rotation)

I am requesting that this constraint be lifted. Here is an example of a scenario in which this would be beneficial: A user is disabled and is only able to use VR while in a supine position. Thus they are unable to participate in the vast majority of VR games. But if one could pitch up the entire playspace by 90 degrees (so "up" in real life becomes the virtual "forward") then individuals with such a disability could still use VR.

Occasionally such a request will show up on /r/vive. For example, here is a bedbound individual that wants to use VR to escape from his chronic pain but is unable to due to this constraint: https://www.reddit.com/r/Vive/comments/7hh2ud/virtual_reality_while_bedbound/

echuber2 commented 6 years ago

I believe it's entirely possible for you to do this yourself in your engine. You need an extra matrix in your pipeline to allow for the room orientation. It's not very different from when the engine allows you to teleport.

wheeler-man commented 6 years ago

@echuber2 Hi, I understand that it may be possible to do this in engine but I guess I should be more clear. What I'm looking for is a global setting that can be applied to all VR applications. For example in OpenVR Advanced Settings one can rotate the playspace about the up-vector and this will affect all VR applications https://github.com/matzman666/OpenVR-AdvancedSettings/blob/6da9e724c0fcfb0801d5e6160bcd7e205050aa89/src/overlaycontroller.cpp#L505

In the past it was possible to also pitch and roll the playspace. A constraint was later added that prevents this.

TheWhiteAmbit commented 6 years ago

Please don't make this part of the SDK. It does not belong there and will just blur the line between things belonging in an engine and the SDK. I absolutely don't want another application to be able to pitch and roll the playspace for my application.

echuber2 commented 6 years ago

I take it that as an accessibility feature, you'd want something like this to be configurable from the SteamVR settings panel to override applications you don't have source control over? Is it something that would be better served by custom hardware or drivers?

Zarphus commented 1 year ago

Please don't make this part of the SDK. It does not belong there and will just blur the line between things belonging in an engine and the SDK. I absolutely don't want another application to be able to pitch and roll the playspace for my application.

some people have disabilities, and your opinion doesnt change their needs. this needs to be adjustable globally for people unable to be upright, to interact with VR environments, games, menus, and overlays as if they were.

BOLL7708 commented 1 year ago

Considering we got the world scale setting that can go from 10-1000% and that we can edit the play space properties at runtime I don't see rotating the same space as being a big departure. That said, the world scale is a per app setting, so it needs to be reapplied for every single application, this as I believe it was made to adjust room-scale games to player heights.

I think one of the difficulties adding space rotation comes with how to interface it, when the space rotates it would have to be around a certain point, which I guess would be the headset, but when that is out of alignment there needs to be a way to adjust it.

I guess having a button that recenters the space on the headset, with the headset representing the center vertical axis of the space, at a set height and facing forwards, would do it. The only additional settings would be a checkbox to enable it, and a default height over the ground to adjust to. Then the standard recenter button that already exists in the dashboard could apply those settings.

Personally I would also want API access where I could set exact values so I can apply and reset it again 😅