I am not really familiar with Unity, but from the short time I spent debugging some lighting issues in BeatSaber also related to PP mode, I can say that Unity alone does support non-parallel views quite fine. It means the objects (geometry) are correctly rendered and so on.
What happened on BeatSaber (I was eventually able to pin down) was that the game used a custom shader for some lighting effects which was “optimized” for single-pass stereo rendering, in other words, it was hardcoded for parallel views and completely ignored the (non-parallel) view geometry, advertised by the headset and consequently by Unity to the app.
Now, thinking about it, and how BeatGames actually (not) treated this problem, I am starting to think that there might be some optional libraries (or components) for Unity, maybe not even part of the package, but some public repo, from where the devs can get some cool effects, but those devs actually do not fully understand all the implications. I am not sure anymore BeatGames know how to fix their issues.
I can give only a generic advice (as I cannot really say this issues is of the same nature as the one in BeatSaber), but this could never the less help a bit, especially if he is clueless.
In order to work with non-parallel views, the app has to handle correctly the view geometry advertised by the headset (and then by OpenVR) via IVRSystem::GetEyeToHeadTransform
.
In Unity, this matrix is however not directly exposed, as Unity uses its own Camera.GetStereoProjectionMatrix
Camera.GetStereoViewMatrix
, which is basically the inversion of the former.
Since Unity alone works fine, he should review all the additional effects he added (especially if they were 3rd party effects, and such) and confirm that those effects correctly handle non-parallel geometry reported by Camera.GetStereoProjectionMatrix
Camera.GetStereoViewMatrix
. If he uses some single pass stereo shaders they would probably be a good candidates (could be for lighting or the overlay for HUD, etc.).