Pitool has Sub-Optimal Timing: Motion Smoothing (Originally Titled: Something changed with Pitool on version .271 and forward)

Ultimately what would be best would be for the 1/3 rate to be completely removed as it’s unusably bad anyway. It looks like absolutely crap. Just getting rid of it completely, or at least allowing it to be disabled, would be fantastic. A game locked at 90/45 with Smart Smoothing turned on runs really nicely. A game with random fluctuations between 90/45 and 90/30 is a nightmare.

The mod I developed and that we’re currently testing with @DJSlanr lets you do that for SteamVR games:

  • Disable 1/3 and force it to stay in 1/2
    OR
  • Creates a larger opportunity to stay in 1/2 before entering 1/3

It should also be possible to disable 1/3 and skip directly to no smart smoothing, though I haven’t added that (but it’s easy).

It’s a bit early to say whether the results are good forcing 1/2 when pi_service thinks it’s not appropriate.

7 Likes

Hi, any update on this mod?

Tis the holidays, I’m not working on it right now.

I also want people to manage expectations that it will probably not solve all the problems, but will try :slight_smile:

1 Like

@mbucchia you are the best, man

1 Like

Hey all,

This is still a little bit rough around the edges, but @DJSlanr has been getting good results with the tool.

Hence I’m sharing the first version here:

Right now, we have only created one preset to “skip” the 1/3 mode entirely, so that if you cannot maintain 1/2, you will fallback to no smart smoothing (which I believe is the top ask at this time).

Thanks!

8 Likes

thanks, you and your associates do some really great useful work, it’s really appreciated :+1:

Thank you, and here my associate is @DJSlanr, thanks to him for bringing his perspective and iterating with me.

Hopefully this version gives good results for others too! Looking forward to hearing some feedback!

3 Likes

Is this only for SteamVR? Does it work with OpenComposite?

I’ll be giving this a try soonish (hopefully this weekend). I’m not sure though, that disabling smart-smoothing if it drops below 1/2 rate is what is desired. The way it used to work is it would keep producing the frames at a rate of 1 generated frame for every real frame, not switch on and off. Smart Smoothing would only turn off if you could actually hit your refresh rate. In 1/2 rate scenarios; Lets say you dropped to 40fps for a few seconds; Smart Smoothing would generate 40 fake frames, one for each real frame, giving you 80 frames, and would then give you 45+45 again as soon as it could do so. Disabling and enabling Smart Smoothing altogether if you ever drop below 90hz/45fps sounds really jarring? (I realize that’s not a common scenario, as I expect most of us try to tune our game performance so we never, ever, drop below whatever the appropriate floor is (typically 45 in 90/45 mode. Regardless, it’s certainly possible that momentary spikes could cause a title to drop below 45fps, which, if I’m reading things correctly, will disable smoothing completely for a bit.)

That was your previous comment:

What the current code does isn’t disabling smart smoothing (like unchecking the box), but it pretends that the frame rate is below 1/3 (so it makes smart smoothing not possible at all). Smart smoothing remains on standby and ready to kick back in once performance allows.

There is a filter that prevents that from happening (ignores spikes). Right now it is set to a value of 9, which means you can have up to 4 spikes every 9 samples (minority of false samples / majority vote of good samples) and ignore transition to 1/3 (or no smart smoothing at all). This value is tunable, however the higher you make it, the longer it takes to recover into 1/2 when available.

There is also a way to force the behavior you are describing here, and after testing it, when what you describe happens (the in-between 1/2 and 1/3, where we keep generating fake frames even though 1/2 isn’t achievable), things looks like absolute crap. I did not bother including that mode as a preset, because it’s just bad. And it totally makes sense because your example of making 80 frames for a 90 Hz headset will end up looking juddery anyway.

Let’s have you try the current thing as-is, and if not convinced or not working well for you, I can explain how to create the configuration that does what you described (it’s only 2-3 settings to modify).

This is only for SteamVR, and OpenComposite doesn’t really have to do with this. You could be using OpenComposite with your OpenXR runtime set as SteamVR.

Maybe you meant PimaxXR? In which case the answer is: not yet. But if results are good, the same thing can be done in PimaxXR.

2 Likes

@mbucchia Ah, I see the confusion regarding my previous discussion of the 1/3 rate. And yes, it did look like complete crap. I think the only advantage would be in cases where it’s just activated for a very short period of time, like less than 1/2 a second. I should have time this weekend to play with it.

No I meant Open Composite. I run games without using SteamVR.

Yes but you don’t run them with OpenComposite either. OpenComposite is an intermediate layer that talks to something, it doesn’t work on its own.

Most likely you do mean PimaxXR, and therefore I did answer the question:

More details for general understanding of OpenComposite:

https://mbucchia.github.io/OpenXR-Toolkit/opencomposite.html

@mbucchia It looks like this definitely helps the situation at least somewhat. I can run MOSS II in large FOV at 45/90 now and it almost never drops to 30, and when it does it’s not all distorted and awful like what happens when 1/3 framerate generates fake frames (of course, it does still feel super choppy when it drops to 30, but better than supper choppy plus super distorted). Without this it would drop to 30 incredibly frequently. At least, that’s the way it feels. I suppose I would have to record session timings and compare them across identical scenes to be sure.
It still doesn’t work as well as the entire Smart Smoothing ecosystem did before Pimax introduced the 1/3 smoothing rate. It all worked OK then, and it’s really difficult to understand why it’s still in the software as I don’t think anyone’s chimed in yet to say they actually like it.
Would be great if this would eventually work Oculus titles as well, as I can think of at least one tile (Lone Echo 2, I’m looking at YOU here…) that would benefit greatly.

Interesting thing I discovered recently about Pimax timing - which you may have already noted; it appears to only monitors GPU frametimes, not CPU. I noticed this when playing
Fallout 4 VR with Ugrids=7, which causes high CPU usage in certain scenarios, not much higher GPU usage. At Ugrids=7 I can run Fallout 4 VR at 90/45 with smart smoothing and so far it has NEVER dropped to 30 with my new 4090, as it is CPU, not GPU issues now causing it to drop. (With less powerful GPUs this was not the case.

To be clear, it should never really drop to 30, it should instead snap off 45 and go to whatever actual frame rate, like 42 FPS, or 38 FPS, or sure maybe 30 FPS if your frame times are 33ms. Is that not what you are seeing?

Not gonna happen unfortunately, the way timing works in those is much different. Also, it’s 2023, nobody should care a bit about obsolete tech like Oculus mode.

That’s what I noticed indeed. The frame time value used to determine the rate is GPU, and what the Tuner does it only alter that value. That sounds like a pretty bad experience, you basically don’t really get correct smart smoothing rate if CPU bound.

I haven’t found a good way to solve that, in PimaxXR when I tried to make it consider the CPU frame time, things were very bad (always spuriously going down to 1/3).

1 Like

@mbucchia Is there a more up-to-date method for playing Oculus titles? Lone Echo and Lone Echo 2 are among my favorite titles. TBH I have not researched if there is another way to play those, as my time for gaming is already relatively limited, making me reluctant to continually spend large portions of it figuring out alternative methods. I simply launch my Oculus titles through PiTool and they work reasonably well. I do seem to recall some of them are now supported via PimaxXR?
I’ll push some more titles beyond their current settings and again see how they perform. I’ve only tested in Moss 2 at this point, but you are correct, I did see frame rates between 45 and 30, but it did seem to lock to 30 as an absolute minimum. Both Moss and Moss 2 are Unreal Engine titles, and thus incredibly resolution-dependent when it comes to performance; with even small adjustments to SteamVR’s rendering resolution I can easily push them to perform poorly.

1 Like

Idk about Lone Echo, I don’t have these games. Looks like Lone Echo II was released in 2021, and if the dev only supports OVR (Oculus mode), then they are mocking us all, don’t deserve our money :confused:

2 Likes

Its a good question. Open composite lets us play steamVR games with open XR, but to my knowledge there’s no method to do the same with oculus titles. VRPerfkit however claimed it should work with Oculus titles, but I couldnt get any to work regrettably. In any case, i agree some of the best were Oculus like Lone Echo. For whatever reason I got 10% better performance in Oculus games with pitool .263. After that, the gpu would get limited at like 80-90%.