The HMD eye positions and rotations from XrView are sometimes a bit noisy compared to what engines like Unreal provide.
I assume those engines apply additional filtering to smooth the data.
Can anyone recommend a proven and ergonomic filtering method, along with tested parameters?
Thanks!
The poses used to render the views are not and should generally not be filtered on the application side. The runtime already performs any needed filtering and pose prediction before providing the poses.
If you are getting noisy poses, it’s likely that something is misconfigured in your application. In order to get the correct poses from the runtime, make sure that the xrLocateViews call uses the correct displayTime received from the xrWaitFrame call for the frame you are rendering. This also applies for any xrLocateSpace calls if you are getting the view poses in the HMD local space and compositing it for the tracking space relative pose.
Also make sure you are passing both the displayTime and the view poses you used to render the frame to xrEndFrame. This is required for the runtime to be able to reproject the frame correctly.
These are tricky things to get right, especially in pipelined applications where multiple frames are being processed simultaneously. It’s easy to get the parameters mixed up between frames, and send the wrong data.
Thank you for your response.
Unfortunately, everything is set up correctly on my side.
I tried several other OpenXR examples, and they all exhibit similar jitter.
It is especially noticeable on hard, wireframe-style edges.
My application is a 3D modeling app, so it contains a lot of raw, hard-edged geometry.
I’m testing on a Quest Pro.
These micro-jitters are almost unnoticeable, for example, in the Meta or SteamVR environments, where panel edges appear perfectly smooth.
There must be some additional or different type of filtering applied there.
It would be useful to have access to the unfiltered raw data from the HMD and controllers,
or at least have more filtering options available.
Thanks!
V.
OpenXR is designed to abstract away all the raw data, and I don’t know of any standalone platforms with alternate means of accessing it. SteamVR supports getting the raw poses though OpenVR, but that likely only works for the limited number of PCVR devices that supply the data in the first place.
If it’s not an issue with the application, it sounds like it could be an issue with the runtime or streaming solution. It might be worth testing different runtimes to see if there is any difference, as well as testing if native applications behave differently.
Another possibility is that it’s some other effect, like aliasing on the edges. It’s very noticeable in VR from the constant movement of the users head, especially with high contrast geometry. System UI panels are often both supersampled and rendered with MSAA to make sure they are smooth.
Yeah, MSAA helps a lot, and lowering the contrast does too. Now the micro-jitters are less distracting, although they’re still there.
I was originally testing on raw, un-antialiased, high-contrast test objects.
Compared to a couple of other VR apps, the smoothness is now more or less comparable.
I’ll test with more HMDs as soon as we get this app approved for further development. 
Thank you so much — you were very helpful.
You saved me a lot of time I would’ve spent trying to apply filters.
Thanks!
V.