polygraphene / ALVR

ALVR is an open source remote VR display for Gear VR and Oculus Go. With it, you can play SteamVR games in your standalone headset.
MIT License
1.82k stars 248 forks source link

Some input on VRChat are wrong #320

Closed MikemaFBS closed 2 years ago

MikemaFBS commented 5 years ago

Both sticks controls are wrong. If I move the stick, the avatar does gestures. If I press the stick and move it, I walk. They are inverted, it supposed to be on the contrary.

polygraphene commented 5 years ago

I know the contrary is introduced in Quest version of VRChat. Does Rift(with SteamVR) version have the same mapping?

It is possibly difficult to solve the problem by fixing ALVR. Can you re-mapping those behaviors in SteamVR settings?

MikemaFBS commented 5 years ago

I'm preety sure it doesn't work like that on rift. Also the A button just doesn't work. I think it's because the game detects Quest controllers as Vive, because the pointer in game is on the handle instead of the quest/rift/rift S trigger. The gestures works with the sticks instead of the rest of the buttons (like in this video https://youtu.be/DZIaAHJRQzI). basically the input is the same as VRChat Quest version. I'm almost sure that the problem (and maybe every input problem in other games, are because the game detects that you're using a Vive controller instead of a Rift one.

MikemaFBS commented 5 years ago

You can try to play VRChat QUest version and see how the controls are, I can confirm that the input are the same as Rift. Maybe if you see how is in Quest, you can figure out how it works on Rift and maybe that can help you to fix input problems. But again, I think the problem is that VRChat detects that you're playing with Vive controllers (beacuse that is what the shows when you want grab some objects)

DigitalStyx918 commented 5 years ago

I have attempted remapping to no avail in Steam. They work as expected in Quest VR. For whatever reason it will not allow the joysticks to work without being pressed. I tried mapping the joystick touch to joystick click and that won't work.

MikemaFBS commented 5 years ago

I know. I think it's because the game recognizes the controllers as Vive controllers instead of Touch for Rift, Rift S or Quest. And you can't jump either, A button just doesn't work. @DigitalStyx918 @polygraphene

DigitalStyx918 commented 5 years ago

It looks like, barring a change of course from Oculus, for this to be successful we need a custom mapping tool. It seems all the buttons function in some capacity through various apps except for maybe the touch sensors, but SteamVR doesn't offer enough options to make use of them.

It seems like some sort of openVR tool could be made to allow the Quest Touch to function as touch at least in respect to buttons, triggers, and sticks with an app to correct the mapping. Not ideal, but at least it keeps it somewhat practical for most users. I don't know the odds of me self-teaching myself the necessary skills to pull this off in a timely manner, but I'm disappointed to see no hint of a discussion of a solution for this, only an acknowledgment of the limitation. @MikemaFBS @polygraphene

MikemaFBS commented 5 years ago

I don't even know about a solution as well. I'm just testing and if I find a bug or something that can be improved, I just report it to github. Let's see how Polygraphene fixes this problem, and if he doesn't, he is making a wonderful work anyways. He can be proud of what he archieved until now.

DigitalStyx918 commented 5 years ago

A solution should be possible. Three apps that I know of now make Quest and SteamVR possible. All of them stop at the controllers not binding correctly. Now we just need someone who knows what they are doing with OpenVR to make a binding fix as the buttons and joysticks clearly work and are read there is no reason they can't be made to function as intended on a touch. I'm not sure about all the capacitive touch sensors but the joystick responds to touch. If you move it without touching the top of the stick it does not gesture. If you put your thumb on it it gestures. Click to gesture and touch to move would be a much better setup, and most games using touch expect to touch to move not click.

DigitalStyx918 commented 5 years ago

The controllers track in SteamVR and all the buttons seem to register which means a solution is possible outside of Oculus. Whether any Dev can do it with Unity and openVR I don't know, but Steam could certainly create a solution with SteamVR on their end. They could call it a Quest touch, Alternative Touch, generic touch or something and simply have it as an option for Dev's to report their controllers as and Quest users may then desire to take their Steam library to Index when they are ready for the next level. Especially with Index available with even more buttons and sensors available, that should leave plenty available input options for fully mapping a touch to. It might even create a scheme that would be beneficial in getting developers to incorporate the Index controllers in their games.

polygraphene commented 5 years ago

I tried to change HMD model name (Prop_ModelNumber_String). But no luck. I found the log file of VRChat in AppData\LocalLow\VRChat\vrchat I will check detail of how VRChat detect touch controller.

2019.05.31 15:43:45 Log        -  AmplitudeWrapper initialized
2019.05.31 15:43:45 Log        -  LimitedConcurrencyLevelTaskScheduler created, threads: 1
2019.05.31 15:43:45 Log        -  LimitedConcurrencyLevelTaskScheduler created, threads: 1
2019.05.31 15:43:45 Log        -  VRC Analytics Initialized
2019.05.31 15:43:45 Log        -  OpenVR initialized!
2019.05.31 15:43:46 Log        -  [VRCFlowManagerVRC] waiting for UI Manager
2019.05.31 15:43:46 Log        -  InitVRSDK: OpenVR success! loadedDeviceName: 'OpenVR'
2019.05.31 15:43:46 Log        -  Connected to Oculus Tracker:OculusRift-001
2019.05.31 15:43:46 Log        -  Steam tracking system name: 'Oculus Tracker'
2019.05.31 15:43:47 Warning    -  The referenced script on this Behaviour (Game Object 'LoadingIcon') is missing!
2019.05.31 15:43:47 Warning    -  The referenced script on this Behaviour (Game Object 'Checkboxes') is missing!
2019.05.31 15:43:47 Warning    -  The referenced script on this Behaviour (Game Object 'BlueprintDetailsPopup') is missing!
2019.05.31 15:43:47 Warning    -  The referenced script on this Behaviour (Game Object 'Checkboxes') is missing!
2019.05.31 15:43:47 Warning    -  The referenced script on this Behaviour (Game Object 'Checkboxes') is missing!
2019.05.31 15:43:47 Log        -  [VRCFlowManagerVRC] showing disconnect reason
2019.05.31 15:43:47 Warning    -  OvrLipSync Awake: Queried SampleRate: 48000 BufferSize: 1024
2019.05.31 15:43:48 Log        -  STEAM Tracking System: Oculus Tracker
2019.05.31 15:43:48 Log        -  VRCInputProcessorVive: using vive controllers = True
2019.05.31 15:43:48 Log        -  STEAM Tracking System: Oculus Tracker
2019.05.31 15:43:48 Log        -  VRCInputProcessorViveAdvanced: using vive controllers = True
2019.05.31 15:43:48 Log        -  VRCInputProcessorTouch: using touch controller = False
polygraphene commented 5 years ago

VRChat seems to check Prop_TrackingSystemName_String. And it seems to expect lower case of "oculus". Now I get Oculus Quest like input bindings.

DigitalStyx918 commented 5 years ago

Awesome Polygraphene. Hopefully you are knocking on the door of the fix, but I did have success getting some better controller binding to work. It should be shared, but I'm not seeing it show up as shared yet,

It is named: "Shared binding from DigitalStyxDIY for using Oculus Quest with SteamVR VRchat."

Also I was able to confirm that the capacitive senors fully report touch as well as buttons and triggers all work with the lone exception of the Quest. It is definitely fixable.

polygraphene commented 5 years ago

Try alpha5. https://github.com/polygraphene/ALVR/releases/tag/v2.4.0-alpha5

satyaloka93 commented 5 years ago

VRChat seems to check Prop_TrackingSystemName_String. And it seems to expect lower case of "oculus". Now I get Oculus Quest like input bindings.

Could this be the key to other games with incorrect mappings, specifically Fallout 4VR?

polygraphene commented 5 years ago

@satyaloka93 Maybe. I implemented that fix on alpha5. Try it.

MikemaFBS commented 5 years ago

@polygraphene I just tried alpha5. You have done a very nice work! It needs to be improved but at least now the game detects my Quest touch as rift CV1 controllers and works very very nice. There's still some issues with the input, but not very bothering:

-The pointer is located on the handle instead of the tip of the index finger trigger, it needs to be like you did in SteamVR Home. That makes the hand, if you grab the controller as normal, to be always twisted. I need to grab the controller like a stick (just like Vive controller) to make the hand look normal. but at least the game recognizes my controller as a Rift touch, wich is wonderful.

-Related with ALVR software: It would be great, if it's possible, to configure the resolution as Quest native resolution (2880 x 1600, 1440 x 1600 per eye).

-I need to check a possible gesture issue related with the input, but I need to compare first with a Rift CV1 with a friend.

Wonderful work, in spite of actual issues, now VRChat is perfectly playable.

MikemaFBS commented 5 years ago

@polygraphene Edit: I tried VRChat on Rift CV1 and I can confirm the imput works perfectly fine. The input is just like the adaptation of VRChat Quest version so no worries about that.

Now about the pointer in game, let me show you with some screenshots:

Pointer ALVR VRChat PC version

That's how it looks with Quest on PC version with ALVR.

Pointer VRChat Quest version 2 Pointer VRChat Quest version 1

And that is how the pointer it's supposed to look like. That's the VRChat Quest version. If you can fix that, the game will be perfectly playable, but now it's wonderful to play, you just need to improve some ALVR software related issues like de decoding quality and native Quest resolution.

DigitalStyx918 commented 5 years ago

@polygraphene The controllers look ok, but their pitch has been off as if the game thought they were vive wands. I have not tested Alpha 5 yet myself, but I corrected this problem with Open Vr Input Emulator by adjusting the headset relative pitch by + 30 degrees I think.

I do know its possible to have a Quest touch launch in SteamVR with the correct pitch without manually adjusting in OpenVR Input Settings, but I'm not sure how that was done.

I look forward to testing this. I fixed the binding for the thumbsticks before the update but got no where on actual touch support while attempting to mimic a Vive controller. However I did confirm, using the Steamvr menu and the controls display that everything on the Quest controller definitely reports to steam including touch. That menu actually serves as a controls test as well.

DigitalStyx918 commented 5 years ago

BTW: Good work. Vrchat is a very popular game and a game where the Quest port is not and cannot be on par with PC version of the game. It is also a game where a little extra latency is not going to be a problem. With the controllers fixed this game may become the biggest reason people install ALVR and similar apps.

The Quest version of Vrchat works surprisingly well. It is a nice mobile option, but it will never satisfy as a replacement in full for PC access to the game. This app allows people who purchased a Quest by mistake for VRchat to basically get what they had hoped for and allows others who bought a Quest to upgrade their PC to play the game instead of needing both a PC and a PCVR headset.

For many other games and uses this capability on Quest is more of a novelty as the majority of people who own SteamVR games have at some point had a PCVR headset, but this looks very promising as a viable, regular use, solution for VRchat.

MikemaFBS commented 5 years ago

@DigitalStyx918 you're right. I fixed that problem with OpenVR Input Emulator, thank you!

DigitalStyx918 commented 5 years ago

You're welcome. I can say I know touch can work perfectly with VRchat through Quest and SteamVR now, but I know this on condition of keeping a secret. Default bindings, touch, correct angles, and everything can work with touch seen as touch

I don't know how it was done. I just tested it.

On Sat, Jun 1, 2019, 5:18 PM MikemaFBS notifications@github.com wrote:

@DigitalStyx918 https://github.com/DigitalStyx918 you're right. I fixed that problem with OpenVR Input Emulator, thank you!

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/polygraphene/ALVR/issues/320?email_source=notifications&email_token=AMGPN44V4HDPYOEPUR55SX3PYLYTDA5CNFSM4HP47EH2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODWXJSBY#issuecomment-497981703, or mute the thread https://github.com/notifications/unsubscribe-auth/AMGPN47HTMI5CYZC725FBS3PYLYTDANCNFSM4HP47EHQ .

polygraphene commented 5 years ago

@MikemaFBS For resolution: Native display resolution is meaningless for ALVR. See: #32

I have no idea about how to fix the origin and angle of pointer. Is it caused by the difference of the shape between CV1 and Quest/S?

MikemaFBS commented 5 years ago

@polygraphene The angle pointer is like Vive controller instead of Rift or Quest/S. The pointer actually is located in the place where the Vive pointer should be. It can be fixed with OpenVRInputEmulator like @DigitalStyx918 said.

Btw for some reason sometimes OpenVRInputEmulator doesn't let me make changes and I have to restart the server until it works. By doing that I realized that if I Open and close ALVR server many times. the game became so laggy I can't play. Maybe is caused because some kind of process or service that stays open even if I close the server?

Don't really know, but the thing is that if I open and close ALVR server a few times, my GPU ends exploding, maybe the server doesn't really close as it should.

MikemaFBS commented 5 years ago

@polygraphene I just tried VRChat and input is wrong again, maybe is due to the VRChat update. Any help? If this is goin to happen everytime the game updates, maybe you should tell us what to do everytime this happens (if it requires the same fix, and if it's not very difficult. I'm not a programmer)

DigitalStyx918 commented 5 years ago

Due to the update. A binding by me should help you move and jump for now.

On Thu, Jun 6, 2019, 3:09 PM MikemaFBS notifications@github.com wrote:

@polygraphene https://github.com/polygraphene I just tried VRChat and input is wrong again, maybe is due to the VRChat update. Any help?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/polygraphene/ALVR/issues/320?email_source=notifications&email_token=AMGPN42L5KQGDWATXVIZGMLPZFVHBA5CNFSM4HP47EH2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODXEAMZQ#issuecomment-499648102, or mute the thread https://github.com/notifications/unsubscribe-auth/AMGPN47WUQWZ3PYPJ7V7JR3PZFVHBANCNFSM4HP47EHQ .

MikemaFBS commented 5 years ago

but what about the gestures?

DigitalStyx918 commented 5 years ago

They have to be fixed at the game level through ALVR or VRchat.

On Thu, Jun 6, 2019, 3:59 PM MikemaFBS notifications@github.com wrote:

but what about the gestures?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/polygraphene/ALVR/issues/320?email_source=notifications&email_token=AMGPN44BEDQHVZ4NQIZFBJDPZF3BXA5CNFSM4HP47EH2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODXEETCI#issuecomment-499665289, or mute the thread https://github.com/notifications/unsubscribe-auth/AMGPN46YORG3MXYLSA53LVLPZF3BXANCNFSM4HP47EHQ .

MikemaFBS commented 5 years ago

how? that's the question. I think it will need to be fixed on each VRChat update you know...

DigitalStyx918 commented 5 years ago

I hope not. This update was specifically adding support for Index Controllers. Maybe they just cleaned up their code because what fixed it before was apparently defining it as an Oculus in all lower case or something.....

On Thu, Jun 6, 2019, 5:00 PM MikemaFBS notifications@github.com wrote:

how? that's the question. I think it will need to be fixed on each VRChat update you know...

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/polygraphene/ALVR/issues/320?email_source=notifications&email_token=AMGPN45YSMF5NLBYPRW3HR3PZGCHRA5CNFSM4HP47EH2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODXEJFRA#issuecomment-499684036, or mute the thread https://github.com/notifications/unsubscribe-auth/AMGPN47T7DC5O2KUKZOSNILPZGCHRANCNFSM4HP47EHQ .

nskolaris commented 5 years ago

Any update on this issue? It worked fine before last VrChat update.

MikemaFBS commented 5 years ago

@nskolaris Indeed, It worked before that update. Let's see what Polygraphene can do about it.

nskolaris commented 5 years ago

@nskolaris Indeed, It worked before that update. Let's see what Polygraphene can do about it.

I got it somewhat working by running the Oculus Home version through ReVive. Only hand open and V gestures don't work, also it runs slightly worse than just steamvr.

polygraphene commented 5 years ago
2019.06.13 01:28:56 Log        -  STEAM Tracking System: oculus
2019.06.13 01:28:56 Log        -  STEAMVR HMD Model: Oculus Rift
2019.06.13 01:28:56 Log        -  VRCInputProcessorVive: can use vive controllers = True
2019.06.13 01:28:56 Log        -  STEAM Tracking System: oculus
2019.06.13 01:28:56 Log        -  STEAMVR HMD Model: Oculus Rift
2019.06.13 01:28:56 Log        -  VRCInputProcessorViveAdvanced: can use vive advanced controllers = True
2019.06.13 01:28:56 Log        -  STEAMVR Tracking System: oculus
2019.06.13 01:28:56 Log        -  STEAMVR HMD Model: Oculus Rift
2019.06.13 01:28:56 Log        -  VRCInputProcessorIndex: can use index controllers = True
2019.06.13 01:28:56 Log        -  STEAM Tracking System: oculus
2019.06.13 01:28:56 Log        -  STEAMVR HMD Model: Oculus Rift
2019.06.13 01:28:56 Log        -  VRCInputProcessorTouch: can use Oculus Touch controller = True

Controller detection method was largely changed on the update. I couldn't figure out how they distinguish controllers.

MikemaFBS commented 5 years ago

@polygraphene so there's no way to fix this issue?

polygraphene commented 5 years ago

@MikemaFBS I need information about how VRChat detect controllers.

If anyone has Oculus Rift or S, I want to see the output of vrcmd command when running SteamVR with Rift. You can run vrcmd by opening command prompt and then put "C:\Program Files (x86)\Steam\steamapps\common\SteamVR\bin\win64\vrcmd.exe".

nskolaris commented 5 years ago

@MikemaFBS I need information about how VRChat detect controllers.

If anyone has Oculus Rift or S, I want to see the output of vrcmd command when running SteamVR with Rift. You can run vrcmd by opening command prompt and then put "C:\Program Files (x86)\Steam\steamapps\common\SteamVR\bin\win64\vrcmd.exe".

C:\Users\47>"C:\Program Files (x86)\Steam\steamapps\common\SteamVR\bin\win64\vrcmd.exe"

Device 0 - oculus.WMHD315N300QZE - Oculus Rift CV1 by Oculus driver 1.38.0 - HMD - generic_hmd
        Hardware Revision: 14
                D3DAdapterIndex:   0
                 RecommendedRenderTargetSize: width=1328, height=1584
                 Left Projection: left=-0.955764, right=0.710781, top=-1.103618, bottom=0.880347
                Right Projection: left=-0.710781, right=0.955764, top=-1.103618, bottom=0.880347
                Lens Center: (0.000000, 0.000000), (0.000000, 0.000000)
                Tracking universe: 4

Device 1 - oculus.WMHD315N300QZE_Camera0 - Oculus Rift CV1 (Camera0) by Oculus - Tracking Reference - rift_camera
        Hardware Revision: 14
                FOV: 50, 35, 50, 35
                Range: 0.4 to 2.5 meters

Device 2 - oculus.WMHD315N300QZE_Camera1 - Oculus Rift CV1 (Camera1) by Oculus - Tracking Reference - rift_camera
        Hardware Revision: 14
                FOV: 50, 35, 50, 35
                Range: 0.4 to 2.5 meters

Device 3 - oculus.WMHD315N300QZE_Camera2 - Oculus Rift CV1 (Camera2) by Oculus - Tracking Reference - rift_camera
        Hardware Revision: 14
                FOV: 50, 35, 50, 35
                Range: 0.4 to 2.5 meters

Device 4 - oculus.WMHD315N300QZE_Controller_Left - Oculus Rift CV1 (Left Controller) by Oculus - Controller - oculus_cv1_controller_left
        Hardware Revision: 14
                No supported buttons
                Axis 0 is a k_eControllerAxis_Joystick
                Axis 1 is a k_eControllerAxis_Trigger
                Axis 2 is a k_eControllerAxis_Trigger

Device 5 - oculus.WMHD315N300QZE_Controller_Right - Oculus Rift CV1 (Right Controller) by Oculus - Controller - oculus_cv1_controller_right
        Hardware Revision: 14
                No supported buttons
                Axis 0 is a k_eControllerAxis_Joystick
                Axis 1 is a k_eControllerAxis_Trigger
                Axis 2 is a k_eControllerAxis_Trigger
Driver VirtualDesktop : 0 displays
Driver alvr_server : 0 displays
Driver gamepad : 0 displays
Driver htc : 0 displays
Driver indexcontroller : 0 displays
Driver indexhmd : 0 displays
Driver lighthouse : 0 displays
Driver oculus : 0 displays
Driver oculus_legacy : 0 displays
Driver null : 0 displays

Hope this helps!

polygraphene commented 5 years ago

Thank you! I tried to fake these values as your result, but no luck.

Can you help me a little more? log file of vrchat is in C:\Users\(username)\AppData\LocalLow\VRChat\vrchat. Please tell me if you can see following lines in the log and tell me whether the line VRCInputProcessorVive: can use vive controllers = shows True or False.

2019.06.13 01:28:56 Log        -  STEAMVR HMD Model: Oculus Rift
2019.06.13 01:28:56 Log        -  VRCInputProcessorVive: can use vive controllers = True
2019.06.13 01:28:56 Log        -  STEAM Tracking System: oculus
2019.06.13 01:28:56 Log        -  STEAMVR HMD Model: Oculus Rift
2019.06.13 01:28:56 Log        -  VRCInputProcessorViveAdvanced: can use vive advanced controllers = True
2019.06.13 01:28:56 Log        -  STEAMVR Tracking System: oculus
2019.06.13 01:28:56 Log        -  STEAMVR HMD Model: Oculus Rift
2019.06.13 01:28:56 Log        -  VRCInputProcessorIndex: can use index controllers = True
2019.06.13 01:28:56 Log        -  STEAM Tracking System: oculus
2019.06.13 01:28:56 Log        -  STEAMVR HMD Model: Oculus Rift
2019.06.13 01:28:56 Log        -  VRCInputProcessorTouch: can use Oculus Touch controller = True
nskolaris commented 5 years ago
2019.06.15 23:14:03 Log        -  Connected to oculus: XXXXX
2019.06.15 23:14:03 Log        -  Steam tracking system name: 'oculus'
2019.06.15 23:14:04 Log        -  [VRCFlowManagerVRC] showing disconnect reason
2019.06.15 23:14:05 Log        -  STEAM Tracking System: oculus
2019.06.15 23:14:05 Log        -  STEAMVR HMD Model: Oculus Rift CV1
2019.06.15 23:14:05 Log        -  VRCInputProcessorVive: can use vive controllers = True
2019.06.15 23:14:05 Log        -  STEAM Tracking System: oculus
2019.06.15 23:14:05 Log        -  STEAMVR HMD Model: Oculus Rift CV1
2019.06.15 23:14:05 Log        -  VRCInputProcessorViveAdvanced: can use vive advanced controllers = True
2019.06.15 23:14:05 Log        -  STEAMVR Tracking System: oculus
2019.06.15 23:14:05 Log        -  STEAMVR HMD Model: Oculus Rift CV1
2019.06.15 23:14:05 Log        -  VRCInputProcessorIndex: can use index controllers = True
2019.06.15 23:14:05 Log        -  STEAM Tracking System: oculus
2019.06.15 23:14:05 Log        -  STEAMVR HMD Model: Oculus Rift CV1
2019.06.15 23:14:05 Log        -  VRCInputProcessorTouch: can use Oculus Touch controller = True
polygraphene commented 5 years ago

Thank you! I finally found VRChat looks whether Prop_RegisteredDeviceType_String contains "oculus". Now I can move/rotate by touch instead of click. This patch will be included in next release.

Maybe hand gesture and facial expression are still broken.

nskolaris commented 5 years ago

Great! I hope hand gestures work since it's basically all that's missing now. Move/rotate can be fixed with steamvr bindings

jakefever191 commented 5 years ago

are hand gestures fixed yet or can they not be fixed

Kuuko-fokkusugaru commented 5 years ago

It has been 3 months and no news. It's there a way to do so it detects the Quest as Rift S directly? Maybe through the drivers that installs with ALVR? Then I guess we wouldn't need to worry anymore but I guess that may be easier to say than to do.

If at least we could customize the controls to set spacebar on the stick then we could at least jump in VRC :(