Hair Sim and Half Refresh Rate

ClockwiseSilver

Well-known member
Featured Contributor
Messages
72
Reactions
1,185
Points
83
Not sure if this is a bug, something I'm doing wrong, or simply the way things work, but I wanted to post and see if anyone else is having a similar experience :)

I'm using a Valve Index with VaM. When using sim hair with the density and/or curve settings above 10 or so, my framerate drops to exactly half the Index's refresh rate. So when I'm running at 90hz, the framerate is 45fps, 120hz it's 60fps, etc. Obviously, I'm aware increasing the sim settings impacts framerates, but the fact that the framerate locks in at exactly half the refresh rate is curious (and these aren't particularly aggressive settings. This can happen with 1 iteration hair with density and curve settings of 14, for example). I'm not sure if segment count factors in, I've only been prodding at this for a little bit now.

For a while I assumed something was just up with my rig or my Windows install. Dropping to exactly half made me think Nvidia's adaptive refresh was kicking in, despite the control panel setting being "application controlled" (and not sure if that actually applies in VR anyway). However, I recently got a new computer; brand new hardware on a clean Windows install, and it's still happening. It's leading me to wonder if there is something about the compute shader (I'm making an assumption here), maybe hard coded buffer sizes and/or worker counts such that this behavior would be the same on any system (for reference, previous card was a 1080 Ti, new card is a 3080).

Has anyone else seen this? Maybe it's Index specific? Nvidia specific? Me specific? :p @meshedvr does this sound like it could be something on my end? (I haven't tried a clean VaM install yet, which I probably should).
 
It's VR specific and actually a feature. Oculus calls this Asynchronous Spacewarp (ASW), not sure what the Steam equivalent is called. When it is determined your machine can't hold stable 90 or 120Hz, it switches to this half refresh rate mode. The game runs at half rate, but your headset still gets 90/120 fps since there are cheap intermediate frames generated to account for your head movement. Stable 45 or 60 fps with interpolation is still better than unstable frame rate.

More details: https://www.oculus.com/blog/introducing-asw-2-point-0-better-accuracy-lower-latency/
 
It's VR specific and actually a feature. Oculus calls this Asynchronous Spacewarp (ASW), not sure what the Steam equivalent is called. When it is determined your machine can't hold stable 90 or 120Hz, it switches to this half refresh rate mode. The game runs at half rate, but your headset still gets 90/120 fps since there are cheap intermediate frames generated to account for your head movement. Stable 45 or 60 fps with interpolation is still better than unstable frame rate.

More details: https://www.oculus.com/blog/introducing-asw-2-point-0-better-accuracy-lower-latency/

Hi MacGruber! Reprojection (SteamVR’s equivalent to time warp, I think) fills in missing frames with some kind of interpolation/prediction pass to avoid dropping frames. I don’t think it actually reduces the refresh rate, the purpose is to maintain the refresh rate irrespective of the application output. And even then, the application output isn’t synced in the way it would be for desktop vsync. I could be getting something like 155fps on 90hz, not 90fps. So even if Reprojection were like adaptive vsync and dropped the refresh to 45 when VaM dipped below 90fps, VaM might be outputting 89fps or 52 FPS. That it goes from a high variable FPS to locked at half the refresh just seems strange. I do think you are right insofar as it might be something wonky between Unity, SteamVR and the compute shaders, but I don’t think it’s the intended function for any of the above. It’s also strange to me that raising hair density from say 12 to 13 sends my frame rate from 155 to 45, but moving from 13 to 30 doesn’t have any further negative impact. I’m wondering if anyone else with an index can load up a scene and monitor FPS while they fiddle with hair settings to see if this is reproducible or something on my end.
 
MacGruber is right, the issue you described is thr Reprojection that is dropping in. Just replace the word Refresh-Rate and Framerate and vice versa. The Framerate is reduced by half and filled up with synthetic pictures to maintain a minimum of 90Hz Refreshrate to avoid simulation sickness. I use this effect on my Valve Index in VaM most of the time. If you can't have stable 90Hz Refreshrate in VaM because of the known performance issues (especially the weired hair physics that is a real FPS killer), the Framerate will be dropped down to 45FPS. So I usually put the Refreshrate up to 120Hz or 144Hz and I will get 60 or 72 FPS if I am lucky.
Refresh-Rate and Framerate are closely related, but not the same. I did and still making this mistake very often myself.
 
Last edited:
MacGruber is right, the issue you described is thr Reprojection that is dropping in. Just replace the word Refresh-Rate and Framerate and vice versa. The Framerate is reduced by half and filled up with synthetic pictures to maintain a minimum of 90Hz Refreshrate to avoid simulation sickness. I use this effect on my Valve Index in VaM most of the time. If you can't have stable 90Hz Refreshrate in VaM because of the known performance issues (especially the weired hair physics that is a real FPS killer), the Framerate will be dropped down to 45FPS. So I usually put the Refreshrate up to 120Hz or 144Hz and I will get 60 or 72 FPS if I am lucky.
Refresh-Rate and Framerate are closely related, but not the same. I did and still making this mistake very often myself.

Thanks TToby :). And you are right, it does look like reprojection is halving the frame rate (though this is still a bit of a mystery to me as to why. My understanding of asynchronous reprojection is that this is not necessary. The wiki entry claims this was only necessary for the older "interleaved reprojection" method "Valve's early version called interleaved reprojection would make the application run at half framerate and reproject every other frame.[7] A later variant by Valve is SteamVR Motion Smoothing, which builds upon regular asynchronous reprojection in being able to reproject two frames instead of one.[4]’). I’m not really confusing framerate and refresh here, i was just working under the assumption that reprojection is just filling gaps, not capping frame rates (And clearly I’m wrong as that’s what’s happening.. well, half wrong. VaM is not the only thing I do in VR and other apps/games seem to run at arbitrary frame rates below the refresh without locking to exactly half, though maybe that is only because they are dropping briefly enough to make it appear so).

I’ll have to try running without reprojection to see what frame rates look like. I still contend there is something up in VaM if bumping hair density one position drops me by 70 or 80 FPS, but bumping it another 20 has little to no effect. I would also expect some sort of scaling with available compute resources, but having now run VaM on a few different video cards, it seems the limits are similar/the same even when more compute resources are available. To rephrase, even if this is reprojection working as intended, I don’t know that this is VaM working as intended.

Anyway, I may be alone in thinking this is an issue :)
 
For reference, I found this article helpful, and yeah, it looks like motion smoothing can also lock the framerate to half, so mea culpa :p


It looks like Oculus AWS 2.0 And Positional Timewarp are the technologies I was confusing with SteamVR reprojection, "so as soon as a frame drops a synthetic one is ready in time."

Now for me being a broken record... I still think something is up in VaM.
 
I gave up to keep on track with all the new technology, but as far as I know, there are more than one mechanisms working in the background to gain a smooth refresh rate. The Reprojection is the oldest and most basic method. Motion Smoothing came a while after some other things and I am no fan of it. On my PC (others have reported this issue, too), Motion Smothing is creating an ugly warping effect in VaM, that makes me almost seasick. In some other games it works great. In VaM I alway keep it switched off and doing that "half framerate thing".
And IMHO you are right. There is something wrong with the VaM physics. It is a very old hack, that was great back then, but today suboptimal and wasn't planned from the beginning. That is the reason, why Meshed is creating the all new VaM Version 2 from scratch.
 
Back
Top Bottom