SlimeVR / SlimeVR-Server

Server app for SlimeVR ecosystem
https://slimevr.dev
Apache License 2.0
641 stars 169 forks source link

Server should send the HMD transform used at the time of FK solving to the steamvr driver #305

Open TheButlah opened 1 year ago

TheButlah commented 1 year ago

Discord thread: https://discord.com/channels/817184208525983775/1042662909043544085/1042662909043544085

Right now, there is a noticeable lag that can be observed from slimevr, especially when dancing with a chest tracker turned on.

Slime has some inherent latency, and this latency causes the chest tracker to lag behind the HMD tracker, causing the neck of the avatar to stretch and compress in a really noticeable way, as well as lean.

We should use the relative translation between the head transform sent by the server and the head position in world space at the time of reception to apply a translation to all of the tracker nodes, so that they smoothly follow the latest HMD data.

This will also eliminate the noticeable jumps in tracker position due to lowish refresh rate.

TheButlah commented 1 year ago

In order to accomplish this, I believe we need to change the protobuf protocol in the openvr bridge to have all trackers sent in one packet, rather than one packet per tracker. This will allow us to know which tracker transforms to update when we find this new relative head transform.