ValveSoftware / openvr

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

Feature suggestion: Single standard buttons for controllers #1710

Open r57zone opened 1 year ago

r57zone commented 1 year ago

Dear developers ( @jeremyselan @bjj @JoeLudwig @charleslvalve @natbro ) and etc, it looks like VR controllers have finally come to have a standard set of buttons: 3 buttons on the controller (A, B, Menu), stick, grip and trigger. As in controllers: Valve Deckard, Pico 4, Quest 2, HP reverb G2 and etc.

It would be great if this became the API standard - "universal controller v1" (with universal 3d model) and that developers could support it and get 100% compatibility in games with all new controllers by default, like it in XInput. I often see people having the issue of controllers not working in SteamVR with various helmets. Some manufacturers have to emulate outdated HTC Vive controllers (Pico 4 and etc headset made in China) in order to get 100% compatibility, but in this case there are inconveniences (pressing the touchpad on the stick). Emulating of Valve Index controllers give compatibility, but these controllers have a touchpad that some developers use. Also Quest 2 controllers don't work in some indie games. All this because there is no single "universal controller" that would give 100% compatibility for modern controllers with standard buttons (A, B, Menu, stick, grip and trigger).

Custom layouts are nice, but it's only for tech enthusiasts, not for most gamers, it's an additional barrier to a comfortable "Plug and play" game. For example, the Pico 4 helmet came out and its controllers do not work by default in all games, although it has a pack of all modern buttons (A, B, Menu, stick, grip and trigger).

The "Universal Controller v1" should provide basic controls for all new games, and manufacturers that need additional features can use some of the advanced API functionality. Gamers will be able to get 100% game compatibility with all VR controllers, just like by connecting any compatible XInput gamepad we can play any Xinput compatible games.

It would be great if this finally appeared with the release of Valve Deckard and there was a single universal support for modern controllers, without layouts and diving into the details - "Plug and play". This is very necessary to finally get rid of the compatibility problem for gamers and forget about it.

It would also be great to add FSR 1.0 to OpenVR by default (because VR is demanding and the resolution of headsets is constantly growing, it will also give new gamers the opportunity to come to VR) and FSR upscaling for video in SteamVR Video Player (in order to get a clear picture, clear edges in video on 4k, 5k vr helmets, when the content has either this or a lower resolution).

Thank you.

danwillm commented 1 year ago

I don't think this is better than the current systems. The entire point of the whole steamvr input system, and openxr action system is to disconnect physical hardware inputs to game actions to break away from games targeting a specific set of inputs. Devices I have developed and worked on are fundamentally different to what your idea for a "universal controller" is (vr gloves, buttonless vr devices, treadmills etc.) and would simply not be compatible with your proposal, but do work great with the current systems. Even though the standard set of inputs you mention are what probably >99% of the vr community use, it's still very unclear whether this is going to be the standard set of inputs in the future.

The disadvantage with the current inputs systems systems, though, is that you do need to generate binding files for every game and controller possibility. That's why you're seeing the Pico 4 not work on launch with certain titles. Over time, these binding files are generated by the developers and/or community, so it's not something that's completely broken forever. There have also been plenty of times when bindings suggested by the community have been better than what the developers ship as default with their application.

These are my thoughts.. what do you think?

r57zone commented 1 year ago

I understand that someone need these bindings and they will not disappear anywhere, I propose to add a new type of controllers "Universal controller v1" with a universal 3d model for all similar controllers of the same type: Valve Decard, Pico 4, Quest 2, HP Revert 2 and etc . It won't break or change the current API or bindings in any way, it will just add 100% compatibility for new games, for all new similar controllers, and solve the incompatibility issue.

For manufacturers who want to make unusual non-standard devices, the same bindings will remain.

Today's modern VR controllers are similar and there's no reason they shouldn't work out of the box. Instead of supporting dozens of the same controllers, I think it's worth making a common controller type for everyone so that in the future there will never be a situation where the game does not see the controllers.

What is good about XInput, all compatible controllers work out of the box, no need to any bindings, all have the same buttons and all have 100% compatibility, it's time for VR controllers, as all manufacturers have come to the same controller form factors.

For gamers, 100% compatibility by default is very important so as not to spoil the gaming experience with technical subtleties, all modern controllers have the same set of buttons, it no longer makes sense to have separate IDs for similar controllers.

With the advent of Valve Decard and "Universal Controller" developers will be able to write support for two types of devices "Universal Controller" for modern controllers and HTC Vive controllers (for controllers of the past generation, including WMR) and get 100% support from 100% of devices, there will be no situation that something will not work for someone.

danwillm commented 1 year ago

Oh, so this is something you're proposing to sit on top of the input systems? There's not really anything stopping you from creating this mini-standard in openvr and trying to get adoption with this... OpenXR has the ability to suggest action bindings for specific inputs, which I guess is kind of similar, but doesn't define this "standard controller" type thing. I still find it difficult to imagine that all new controllers will share the same inputs as we have now, and how much benefit this would actually provide in the future where these controller inputs might change.

Do you think it's also safe to assume that the controllers you mention will want to share the same bindings? I can imagine that even if controllers share the same set of inputs, they might have very different form factors which would make certain actions more suitable to be used on differing inputs on these controllers.

I don't think the adoption of this standard set of inputs is as widespread as you might think, there's still the index controllers, vive wands, funky wmr controllers, etee, rift controllers, pimax swords etc. which all don't share a common set of inputs. We don't even know yet what deckard or other future devices are even going to look like, so it's probably not a good idea to also assume that they're going to share this set of inputs, and to start creating a standard for it.

r57zone commented 1 year ago

Yep, I propose to add another ID to OpenVR - "Universal controller v1" and invite indie developers, small studios and anyone who needs simple support for VR controllers, with 100% compatibility, to use it. Also announce it somewhere for the developers to hear about it.

It will be possible to support non-standard controllers in the same way, this will not affect in any way, however, all modern controllers (Valve Decard, Pico 4, Quest 2, Rift S, HP reverb 2, Pico 3, DPVR E4 and others) by default by changing the ID in the driver to "Universal controller v1" will get basic support in all new games, for older games "Universal controller" can pretend to be a Vive controller. In this case, the stick will be used as a stick, and not as a touchpad emulation. The lack of basic operation on single controllers can be compared to the fact that in flat games there were no default keys for the game and you would have to enter "WASD", "F" in each game, configure the mouse and so on, before playing, it was would be strange and would scare away some gamers.

All of the above controllers have almost the same size, the same button layout, I don’t think that general bindings will be inconvenient for anyone. What will be inconvenient is that when connecting Pico 4, Quest 2 DPVR E4 and other controllers, some games simply refuse to work with them and people do not play these games, some games work through touchpad emulation and users load the stick with constant pressing. Bindings are needed, but they are used by a minority. It could be reported that it is now possible to use a single controller to support 100% of controllers and Valve Decard would use this ID - "Universal controller" so it would gradually become mainstream.

r57zone commented 1 year ago

Here is my example, absolutely modern Pico 4 controllers and Pavlov VR game, the grip button refuses to work correctly. Of course, the reason may be in Pavlov VR or the Pico driver, but in the same XInput standard, such a problem simply does not exist. Modern controllers such as Pico 4, Valve Decard, Oculus Quest 2, Quest Pro, HP reverb G2 and others have the same set of buttons and a common id, a common binding can finally solve this problem for new supported games. Additional features maybe implemented through support for specific controllers with direct id, but since most VR projects are Indy, this will probably not be very relevant. https://user-images.githubusercontent.com/9499881/229807696-7b8e20b6-ec4e-4926-b0db-3ee299c583f8.mp4 Also I wanted to look at the controllers bindings and try to change something, but they generally refuse to start.

r57zone commented 1 year ago

If anyone else supports these layouts, please try remapping the dpad press in FREEDIVER: Triton Down (2019). The bindings layouts are a tech horror from the 2000s, the Vive controllers were bad but they still ruin games like FREEDIVER: Triton Down.