HelixVision

HelixVision

HelixVision and Motion Smoothing (Frame Animation Interpolation)
Happy Holidays everyone!

SteamVR and WMR have recently introduced something called "Motion Smoothing". It is an evolution of reprojection where pixel trajectories of previous frame are used to calculate future frame trajectories using motion vectors. It is much like the Smooth Video Project for film, or your TV's 60Hz/120Hz "soap opera effect" mode.

https://www.youtube.com/watch?v=ZvJuTKn3Bnc

What it does is it literally doubles your FPS - your GPU only needs to render half the frames (say on the CV1 or the Reverb G2, the GPU and CPU only need to render 45fps) rather than 90fps; the fake animation frames will double it up to 90fps.

This is starkly different from the old reprojection/asynchronous time warp mechanisms as those only repeated exact old frames simply reoriented to make head tracking more comfortable. This "Motion smoothing" actually generates full motion frames in between every real frame.

The advantage for HelixVision would be many fold - We know that VR takes a huge toll on our systems, and we are already stuck with the 3DV CPU bug - games are only getting more demanding. Doubling everyone's FPS (halving both CPU and GPU requirements for any game) at virtually no cost would be a brilliant feature.

The disadvantage is that the frames aren't perfect - it is not a perfect substitute for full frames, however the tech is what I find to be far more than acceptable, having been a backer of SVP since its beginnings.

I know that VorpX has this feature compatibility in SteamVR native headsets. WMR Reverb G2 and my old Oculus Rift CV1 didn't work with it though unfortunately.

Does HelixVision support Motion smoothing to any extent with any headsets?

I am intrigued because Bo3b has said on a couple of occasions that when he plays at 45fps in his VR system, things are silky smooth...

Kind regards :)
< >
Showing 1-14 of 14 comments
I'm an owner of Index with 7700K CPU, GTX1070 GPU what I experienced as minimum specs to play stereoscopic (on flat screen). Where as my hardware performs quite better in native VR. As of software that enables stereoscopic gaming, I think I must have tried them all by now, beginning with IZ3D.

So my impression so far about Valves motion smoothing is rather bad. At least in context with solutions that grab image content and port it to VR. Might be, that frame interpolation in native VR is actually superb, because I never noticed it there - which is the original intention of the tech.
However, I noticed immediately that HelixVision is under motion smoothing, because it shows the same common side effects of frame interpolation, as similar software solutions I tried before. There are very noticeably smear/ distortions whenever the game fps drops too much. Very annoying, even they happen just a split second.

Because of that, I have Motion Smoothing globally enabled, but disabled for these kind of proxy applications. Maybe my fps reaches crittical levels in terms of VR experience sometimes, but that way I get at least no visual distortions. Usually a very short hickup is the result with smoothing disabled.

So quick answer to your question - I can confirm that HelixVision supports Motion Smoothing when run under SteamVR. It is a build-in feature of the VR framework and as far as I know, the software does not need to do anything to make use of it.
I assume it is similar to the other HMD providers that HV can run with.
I've been using this with an Odyssey+ for quite a while now... WMR's reprojection does use frame interpolation, and it actually works very well as long as you give it a rock solid 45fps. The best results I've gotten are to combine Vsync along with a frame limiter to help with input lag. Forcing reprojection to always-on in the steam video settings for the app will then enable it.

A word of warning though, it'll break down fairly quickly if you can't feed the 45 frames in a precisely timed format. Once the timing starts to slip, the interpolation just can't produce good results. This usually means tuning settings down to make sure you're not saturating the GPU.

The other tricky part is getting a 45Hz Vsync. For this I create a custom resolution at 45Hz with CRU (Custom Resolution Utility). This causes other problems though, as your actual monitor will now go dark (assuming it can't display 45Hz, or the actual resolution you created). Your new resolutions will show up in the VR desktops though (WMR, Steam, Virtual Desktop, Helix, etc). You just need to ensure you switch the resolution back to default before shutting down VR.

If you crash, you can get stuck though. I have an AutoHotkey script bound to an emergency key combination to trigger Multires to select the default resolution for my monitor.
Thank you both for your comments - very insightful.

@Torzi: I too use virtual desktop in WMR/SteamVR environments to change the resolution before launching a game. Your idea to automate the process via hotkey is quite ingenious - thanks. I see there are a number of tools available to allow hotkeys to change resolution and I shall be looking into using one of them.

Questions:

1. Is there a reason a VSync of 45Hz has to be forced? Would it not perhaps be sufficient to cap the fps to 45fps with something like nvinspector or RTSS for a particular game?

2. Does VSync have to be enabled at all for motion smoothing to work well? I was always under the impression that for VR, VSync ought to be always disabled, including for VorpX and HelixVision...

I ask because I have found that in my experience with CRU etc, if my monitor (800p projector at 120Hz max bandwidth = 142 Mhz) is outright unable to support the bandwidth of the fake resolution (say 3000x3000 @ 45Hz = 430 Mhz), then things will crash forcing a reboot, or the resolution will just not show up to be selected. The only workaround to enable such a resolution would be to use a low refresh such as 30000x3000 @ 12Hz.

I do note that in VorpX, Motion smoothing does not engage when set to auto, but when you force it enabled in SteamVR, it will limit FPS to 45 and display the motion artefacts. I have to say that I wouldn't really class it as "Working" - I am not impressed with it as it doesn't feel smoother - also, in FPS games, the crosshair artefacts the centre of the screen significantly, making it borderline unplayable - I too have wondered if this is a flaw with VorpX / HelixVision implementation vs. it working as intended in real VR games where there is no fixed crosshair.

Looking forward to more insights and being educated, if you chaps have the time :)



For #1, There was a really good discussion in the forums on blurbusters about this that I can't find at the moment. As I recall, the gist was that there's no better way to guarantee the pace of delivered frames than with vsync, so long as your hardware doesn't fail to create them in time. You're also ensuring that you get complete frames, rather than a mix of multiple frames like you get with vsync off. Those two factors: strictly paced complete frames, are what will make or break the interpolated frames.

And for #2, there does need to be synchronization somewhere, but I think it depends on whether or not the VR app is syncing directly to the headset... That's the best case I think. In that situation you wouldn't want to force the sync to your monitor when the headset's refresh is directly available. I'm not really sure how all of that works though. The VR headset isn't treated like a normal monitor in Windows.

It would be nice if a virtual monitor was generated that you could select within the game, then just have it link directly to the virtual screen within the app on the headset. Might be worth looking into. I've had problems though when more than one display is present, and the refresh rates don't match, which is why I just started modifying my main.

On a side note, there's a driver patch from the creator of CRU to ignore clock limits... let me see... From the CRU Post[www.monitortests.com], Check the section "Pay attention to pixel clock limits". There's a couple of patches there.
Jan 1, 2021 @ 10:23am 
For HelixVision use, you will most likely get the best results by keeping the game running at a rate that is an even multiple of your headset frequency. You can see and set the built in frame rate cap in the VR Display profile that is used when running in VR. It's found in Settings->DisplayProfiles->VRProfile.

It's flexible enough to set this up in any way that you want, but we recommend our defaults of running the game at 1/2 HMD frequency using the 3DFM/HelixVision frame rate limiter. And setting the in-game vsync to Off.

You don't want to sync to the monitor refresh rate, because that is completely unrelated and out of sync with the VR display, and the VR display is what you are actually looking at. So in-game vsync doesn't make sense, because the game does not know it's being seen in VR in 3D, it thinks it's running on a monitor in 2D, and cannot possibly make the right choice.

It's possible to run the game at 60 fps and still have a good experience. If the lag at 45 seems too much, this is worth experimenting with as well. In principle I would expect this to produce a beat frequency between the 60 for the game, and the 90 of the actual HMD display, but in practice it doesn't look or feel bad. I think this might be person dependent, just like some people cannot tolerate screen tearing.


When running at an even multiple of the VR display, you'll get consistent views on the big screen. It will maintain the consistent and relatively easy to hit 90 fps for the game, so that you see 45 fps in stereoscopic VR. Trying to hit the full 180 required is not practical for most games.

I don't know exactly how the motion smoothing effects work for SteamVR/Oculus/WMR, but we don't block or set any of those options, so you might find something that works for you. I would not expect this to be necessary from SteamVR, because the in-VR environment itself is running at a full 90/HMD frequency. Your head tracking and visual feel is full speed, unless your GPU is topping out. It's only the big game screen that runs at 45.

Based on this discussion of motion smoothing, if you can somehow apply that to the game, and convince it to generate 180 fps with interpolated half-frames for the 2D view, those would in principle show up in VR in 3D as well. But to be clear, this has to do with the game itself, not Katanga or VR or SteamVR.
Ah ok, so Katanga is synced directly through the headset/SteamVR (Just catching up!, been away for a bit). This is how I thought all these apps should work, but I never really understood how the game's frames were synced to the headset rather than the monitor in this case. I was more just commenting on my experience with WMR's reprojection in general above.

This already works for HelixVisiom on WMR. Just jumped into a clean backup of Witcher 3, so I guess I'm playing that again. It hasn't ever performed this well... you've really done a great job here! To enable it, Just leave the Frame Limit at half the refresh rate, go into the in-game SteamVR menu for Katanga under video settings, and change motion smoothing to always-on. That's really all there is to it. If it's a stuttering mess, tune down the game till you get a solid 45FPS, and/or lower Super Sampling %.

With my monitor frequency shenanigans, I create a headless display at half the headset's frequency (exact), then I use Virtual Desktop or VRToolbox for the headset interface, with SuperDepth3D (or 3DMigoto back in the days) for SBS/OU generation. It was a challenge to get the desktop capture frequencies for those apps synced to the headset, and I doubt most people would even bother. I've been pretty satisfied with the results, but it is a tedious process, and I'm always looking for alternatives. It would be friggin fantastic if HelixVision could run Reshade/SuperDepth3D!

This does give a bit of freedom and control in choosing how the game provides the frames for the VR app though, and to limit GPU use by the game (different vsync & frame-limiting methods mostly). It also limits those two desktop apps since they both only trigger a capture on a complete frame, so they're mostly sitting idle until they're needed, and the game sets the cadence for them.

For WMR's reprojection, they're using DX12 and nvidia's capture and motion estimation libraries (on nvidia cards) to generate the extra frames. When it's forced always-on, the VR app is forced to half-refresh updates (which is forced anyway by limiting the game), then these are synced to the headset through SteamVR.

The VR driver itself (WMR for SteamVR in this case) then generates the interpolated frames that go in between for the entire VR buffer set by Super Sample %. So increasing that will also increase the overhead for interpolation. Increasing the game's resolution and any additional room features also add more overhead (like the stars and snow.. nice touch!), since the extra detail gets included in the calculations.

This actually works very well, and has really evolved. I just updated Win10 to 20H2, and it really makes a huge difference coming from 1809. They're currently beta testing a method to generate two frames for each frame produced by the game, but we'll see how that goes.

Is the display frequency in the HelixVision VR Display Profile tied to anything at the moment? I tried setting it to different values, but it didn't seem to have any effect. Then again, I'm not sure what I would expect it to do... I'm still stuck on this idea of a virtual monitor that's tied to the headset's refresh rate (or a multiple of) that you could select within the game. Then you could apply both in-game or driver tweaks directly to it.
Oh Torzi, thank you, great info. Just the pieces of information I needed to give another try to WMR motion smoothing. All makes sense now. I have an Odyssey+ too, and I love it, btw, have you tried PotPlayer -> SVP 4 Pro -> Virtual Desktop for 90fps movies smoothing?
Try it with I Am Mother (2019) film. ;)
Thanks Torzi and Bo3b, some fantastic info here. VR Supersampling generally has negligible effect on HelixVision/VorpX performance but adds so much to detail that I always have it at SteamVR 100-130% (3.6k x 3.6k for g2) - I was surprised to read that added motion smoothing will have a negative performance effect when combined - and from your explanation, it makes sense why.

"They're currently beta testing a method to generate two frames for each frame produced by the game" - Can you elaborate? I haven't found anything by googling - do you mean single pass stereo where the geometry pass only needs one eye thereby cutting down the workload in some instances?

I love the in-depth discussions here and on the MTBS 3DV forums - it is rare to be able to engage into the details.

I have a large backlog of VR games I have been accumulating for the g2, but look forward to playing HelixVision games again soon after...
I'll give that PotPlayer a try. I've been using the MadVR plugin with MPC-HC (which has nothing to do with VR =), but I'm always looking for new programs to try.

About the 2-frame reprojection... a beta tester for microsoft's Flight Sim VR let it slip in a live stream... someone caught it and posted it on reddit.

I don't think there's any real stereo/depth geometry involved other than maybe trying to pick out the edges of a collection of pixels that seem to be moving together. I think it's all done in 2D for each eye buffer independently, but it would make sense to look for repeating patterns in both buffers. It's meant to be fast and simple, and way less intense than modeling and rendering in 3D... It's all just a trick exclusively for your eyes to fill the gap to the next rendered frame :)

It works the same as it does on TV's. 1 frame gives the position of a detected 'object'. A 2nd frame a fixed time interval backward will give the approximate velocity of that object in the first frame (change in position/time). A 3rd frame back will tell it's acceleration in the first (change in velocity/time)... those are your motion vectors. I'm sure there's a bit more to how they're actually doing it, but that's the basic idea.

All you're trying to do is guess where that 'object' will be just 1 frame ahead in 2D space, but this is why the time interval is so important. If it starts to fluctuate you get bad approximations, which you see visually as a stutter.

It has gotten considerably better though in only the past couple of years. It wouldn't surprise me if they've been throwing some machine learning stuff at it, and Nvidia has been all on-board with providing optimized libraries (I wish they felt the same about legacy 3D, they finally have the hardware for it @!#?@!).

I remember playing Mass Effect 3 with 3DMigoto at 30FPS with WMR's reprojection to 60FPS when they first released it. It was rough with tons of artifacts, but it worked. Yesterday I tried Witcher 3 @30FPS with the latest revision, and it's really something completely different! Sure, I'd recommend going to 45FPS for the sake of input delay, but in both cases, I was able to push up the settings and resolution where it otherwise wouldn't be possible, and still have something playable.
Bo3b can you please confirm that the setting in "Display profiles" of HV (Frame limit) is taking exclusive control over the "Max Frame Rate" in nVidia control panel's "Manage 3d settings">"Program Settings"? Are these related or am I understanding this wrong? Or is this simply reading the refresh rate of the HMD in the registry or somewhere? It would save me some time when I have to DDU. Cause I set the max frame rate of most games to 45fps now. Most of the time the results are night and day.

Decided to try PinballFX3 again. Last time there were some serious errors and crashes. But I currently find it smooth sailing. I saw there was some terrible stuttering when I initially tried it. Then I set the 45fps cap that fixed the problem. But that ball can travel many pixels in split seconds. So it exceptionally made the experience worse in the end. When i capped the frames to 90 it felt like that ball touched every single pixel from A to B.

Starting to appreciate Motion Smoothing more and more every single time it comes to the rescue. First time i saw it in action was with Shadow of the TR. Truly jaw destruction than dropping. Was so amazed.

@Amiga, i actually stumbled over SVP 4 Pro before. I was looking for software that could do frame interpolation to existing recordings. Because my problem is that I cant play at 120 fps and record those 120 fps at the same time. Especially when it is at high quality and even 1080p. The recording always has stuttering and it is terrible to look at. Since Shadow Play only records at 30 or 60 fps I was thinking If I could get hold of software that could do frame interpolation after something was recorded in 30fps*2 or 45fps*2 that would be an enormous score.

I eagerly want to record a proper video for Just Cause 3. Cant emphasise what a great experience this is in VR. You can literally wingsuit all over that country and it is the most epic experience in VR. I have a really great feeling about this!!! But I want to do this right from the start. The experience needs to be as close to a solid 60fps as possible. This might only be possible for 30fps recordings with Frame interpolation. If any of you guys have tested something that works please share your experience. It sounds like Adobe does this. But I cant spend all that money on something I dont know works for sure. I'm not big on white elephants. For marketing Helix Vision this will become crucial. So I'm willing to invest if it would be worth it. I really believe in this product and can see it burst with potential in the coming future. But it requires the best exposure.
Jan 19, 2021 @ 3:14am 
Originally posted by KoelMeester:
Bo3b can you please confirm that the setting in "Display profiles" of HV (Frame limit) is taking exclusive control over the "Max Frame Rate" in nVidia control panel's "Manage 3d settings">"Program Settings"? Are these related or am I understanding this wrong? Or is this simply reading the refresh rate of the HMD in the registry or somewhere? It would save me some time when I have to DDU. Cause I set the max frame rate of most games to 45fps now. Most of the time the results are night and day.
We don't take exclusive control, but we do set the NVidia Max Frame Rate when the game is running. We set it back to whatever it was before after the game exits. This only works on newer drivers like 452.06. On 425.31 this doesn't exist, and we use the RivaTuner frame rate cap for the same purpose.

If the VR Display Profile is the one active, it will always use whatever you specify there. Doesn't have to be related to your HMD, but we will always calculate the exact half if you use that setting.

You might experiment with 60 fps cap as well. I can't really explain it, but it works very well in a lot of games. I'd expect an out of sync, beat frequency between game and HMD, but in practice I don't see anything negative.
Thanks bo3b. This surely makes things more user friendly. Will experiment a bit more. Thanks for the tip on the 60FPS cap! The first time I noticed this was in TR2013. Couldnt understand what caused the game to be so smooth. I just assumed it was the latest drivers. In SOTTR 50fps cap also worked. But I wanted a higher resolution in SBS at the expense of a few frames. 45fps seems to have triggered the balance I wanted.

Cant understand why this wasn't hyped like DLSS? Because of the nature of VR it truly requires as high a resolution as practical with as much and stable frames possible. In many cases 1080p is adequate. But 1440p appears to be the sweet spot without a need for AA or SS. I'm still on the fence about which is better. Higher resolution or SS..? But in Just Cause 3 with 1440p + Motion Smoothing you can use FXAA on top of that which certainly compliments the experience. Only textures needs to be set at High instead of Ultra. Not a serious degrade and a stable performance quality balance.

There are so many bells and whistles in this experience. Don't think the majority grasp this. Motion Smoothing is definitely a vital ingredient that people cant be ignorant about. Its become an antidote in the VR experience. It certainly rounds of many rough edges.
Anecdotally, I booted up GTA5 at 45fps with motion smoothing - I was blown away at being able to play "90fps" 3D at 2000x1500. This motion smoothing tech is astounding, and kudos to bo3b/pauldusler for the development.

The latest release of SteamVR has enabled more motion frame interpolation so it ought to allow one to "Allow motion smoothing to apply up to six frames of extrapolation (was three). Note: These settings are only available to headsets which use SteamVR’s compositor (e.g. Index, Vive).

I don't know if it applies to the G2 (what is G2 compositor? WMR software?), but it will certainly apply to Vive/Index...
Not a 100% sure how this works or what trigger it but this motion smoothing is now working with video playback in Virtual Desktop. I was trying to get SVP 4 Pro trail to work with Potplayer. But it didn't want to cooperate. So after reading this: https://www.svp-team.com/forum/viewtopic.php?id=3240 I came to realise I had to use 32bit. But an integral part of the combination is the codec ffdshow. After I installed this it appeared to have triggered motion smoothing in VR video playback too!!? Even when I watch Youtube videos I can notice the smooth playback...
Truly blown away.

I usually would rather have used my projector to watch movies but it seems the HMD might become a very viable option now with 2.4 SS in VD.

I instantly became a big fan of Sword Art Online recently. An Anime that is about gamers in Japan who became part of a MMO virtual world through HMDs that is very similar to the Oasis in nature. Have not seen such a good series in a very long time. It certainly feels a lot more immersive in the HMD. Because of the nature of Anime the motion smoothing isn't very accurate but not completely broken.

Also came across software that could do frame interpolation on video recordings. FlowFrames: https://github.com/n00mkrad/flowframes

But a 10gb 3840x1080p video with 60fps/30min requires about 600gb of free space to extract every single frame individually into a png to fill interpolated frames between them with AI. Have not been very successful even with a 15min@30fps recording. But the reviews and results I saw on youtube certainly had me sold. Looked better than the samples of Adobe. But it still needs to mature a bit. Its not water tight yet and a bit buggy.
< >
Showing 1-14 of 14 comments
Per page: 1530 50