"LockToHMD" causes HMD tracking to be world rather than parent relative

I was having the same issue with the late update translating the wrong direction when having the player start not rotated at 0,0,0. Though I don’t see UE-29579 in the 4.12.3 hotfix changelog (4.12.3 Hotfix Released - Announcements - Epic Developer Community Forums), when I merged the 4.12.3 code into my current engine branch, and it seemed to fix the issue. Now whenever I rotate the player start everything works correctly.

I haven’t tried to rotate the player in-game, but translating it (teleporting) doesn’t cause an issue.

Maybe this JIRA# was also a fix for this issue? UE-31787 : Positional Latency w/ Rotation

Here’s the code change inside of SteamVRHMD.cpp from GitHub:

     if (bImplicitHmdPosition)
       {
 +         const FQuat DeltaControlOrientation =  View.ViewRotation.Quaternion() * TrackingFrame.DeviceOrientation[vr::k_unTrackedDeviceIndex_Hmd].Inverse();
           const FVector DeltaPosition = TrackingFrame.DevicePosition[vr::k_unTrackedDeviceIndex_Hmd] - View.BaseHmdLocation;
 -         View.ViewLocation += DeltaPosition;
 +         View.ViewLocation += DeltaControlOrientation.RotateVector(DeltaPosition);
       }

Thanks,
Cameron