Alright boys. I've been doing a hell of a lot of research, testing and tweaking. The bad news is that I have not been able to get to an experience that is entirely stutter free (not on 45FPS or 90 FPS and especially 90FPS). That being said, I managed to get to a 45FPS config with most settings on high or ultra. This is not achievable on a stock RF2 installation but I found a little bit of magic on GitHub that made it possible via AMD FSR or NVidia NIS
. So now in the spirit of sharing, here we go - sorry but this is going to be a beefy post.
Disclaimer: Note that your mileage may vary.
Just a recap on the hardware that I used to test and experiment (before my system got fried, now I'm waiting on my insurance company to approve my claim and hopefully I'll be in the thick of things soon).
* i9 9900K - All cores locked @5GHz.
* 64GB Corsair Vengeance DDR4 3200 RAM on stock profiles.
* GPU: MSI Gaming GeForce RTX2080Ti running manufacturer OC clocks.
* Steam installation folder on 2x SATA SSD running RAID.
* Windows 10, latest build (Whatever that is).
* Nvidia Driver version 511.23.
* HP Reverb OG
1. Go to GitHub and get this OpenVR_api.dll file.
Hotfix: hotkeys could not be deactivated in the config file due to a missing conditional check.
github.com
2. Browse the Bin64 folder. Make a backup of the original OpenVR_api.dll file. Then copy the downloaded OpenVR_api.dll file and its openvr_mod.cfg into Bin64. I have included my openvr_mod.cfg as a txt file with comments, so that you have an idea of my experience and you are welcome to just copy that over. *Remember to rename it to a .cfg file extension as RD seems to have an issue with the .cfg extension.
3. Open the openvr_mod.cfg file in a text editor and change the upscaling method and renderscale value. You will notice a number of sections with comments on how it works, but this is it in a nutshell.
Any value below 1.0, will render at that percentage of your super sampling value in SteamVR and then upscale it to whatever the SS value in SteamVR is configured as. Any value above 1.0 will render at the SteamVR SS value as a base and then upscale that to the percentage value your renderscale setting is set to in the .cfg file.
E.g. If the SS value is 100% and the renderscale value is 0.8, then it will render at 80% of the SS value and upscale to your SteamVR SS value. If renderscale is set to 1.2, this will render the game at 100% SS and upscale to what would be an equivalent of running 120% SS in SteamVR
. The difference though is that is requires less resources to do so and really looks quite good. Pick your poison and give this a go.
4. Edit the various .json files as indicated in my settings shown below. You may want to experiment a bit but those gave me a fairly solid experience @ 45FPS.
My settings:
SteamVR SS = 100%
Lock the reprojection settings to a framerate for RF2 of 45FPS in SteamVR. This needs to be done in addition to locking it in the player.json file otherwise there will be stuttering. I will explain this after the settings section.
--------------------- NVidia Control Panel -------------------------
Image Sharpening: 70% or 80% depending on super sample value used in openvr_API.cfg file. This will also depend on personal preference as those values may look too sharp for some. I think 50% is the default.
Anisotropic Filtering: Application controlled
Antialiasing FXAA: Off
Antialiasing Gamma Correction: On
Antialiasing Mode: Application controlled
Antialiasing Transparency: Off
Low Latency Mode: Ultra
Power Management Mode: Prefer Maximum Performance
Texture Filtering – Anisotropic Sample Optimization: On
Texture Filtering – Negative LOD Bias: Clamp
Texture Filtering – Quality
Texture Filtering – Trilinear Optimization: On
Threaded Optimization: Auto
Virtual Reality Pre – Rendered Frames: 3
--------------------- Player.json --------------------------------
"Record To Memory":true,
"Record To Memory#":"record replays to memory
"Rearview_Back_Clip":300
"Max Framerate":45
"Max Headlights":20
"Moving Rearview":0
"Load Opponent Cockpits":false
"Garage Detail":0.4
"Steady Framerate Thresh":0
* "Moving Rearview":0 is optional, as I just got sick and tired of the mirrors of the cars pointing in all directions and never being able to get it perfectly set up. I also found that having the mirrors individually adjustable has a performance overhead that was just not worth it for me.
--------------------- Controller.json ---------------------------
"Use thread":true
----------------------- In Game -----------------------------------
Post Effects: Ultra
Anisotropic filtering: 16x
Anti aliasing: x8
FXAA: off
Visible Vehicles: 8
Soft Particles: Low
Rain drops: Low
Circuit Detail: High
Player Detail: Full
Opponent Detail: Full
Special Effects: Ultra
Shadows: Medium
Shadow Blur: Off
Soft Particles: Low
Rain Drops: Low
Road Reflection: High
Environment Reflection: Medium
AI Vehicles: 10
------- Active apps running in background at any given time -------
* Crewchief
* Simucube
* FpsVR
* Simtools
* JoytoKey
* Simracing Studio
------------------------------- openvr_mod.cfg ------------------------------------
// Enable image upscaling through AMD's FSR or NVIDIA's NIS.
"enabled": true,
"renderScale": 1.25,
------------------------------------------------------------------------------------------
So this is what I found (Using FpsVR to check on GPU stats).
To the contrary to what I expected, for some reason, the RTX 2080Ti does not like to have much performance headroom. It seems to want to be stressed and cranked to create an experience that has less stutters. The framerate graph in FpsVR always seem to be very spikey.
I tested using the exact same scripted weather settings, starting with storm and overcast and ending in clear weather. I would set the session length to 1 hour with time progression at 60x.
Without the modded dll file and edited json file settings:
With reprojection locked at 45 FPS or disabled for 90FPS, the game experiences framerate spikes and drops as well as dropped frames, even at lower settings, causing stutters. With reprojection locked at 45FPS there are still instances where it spikes slightly above 45FPS which also causes stutters
.
Mitigating this, requires that post processing, AA settings, special effects anisotropic filtering etc. be dropped down significantly. One can also under sample the SteamVR SS value below 100% resulting in a blurry image. The result can be a fairly stable experience with less stutters but looks like a 90's DOS game. The issue is that there are still drops in framerate, just enough to cause stutters but not necessarily drop frames. Then there are dropped frames also that cause stuttering when multiple frames are dropped one after the other. These two situations work together to give us the butter smooth experience we have come to expect and love in RF2.
Testing with the modded dll file for a 90FPS experience.
I started by setting the renderscale starting value to 0.8 and then increasing it by 0.05 for each of the various runs ending at 0.95. I tested with lower to higher settings in game and SS set to 100%. GPU utilization was low with low frame times that helped with a 90FPS experience for renderscale values below 1.0. It was o.k. for hotlapping but as soon as I had other cars on track, stutters would happen. Also, post processing and special effect values above medium would result in more stuttering. Not so much dropped frames as the framerate dropping by just enough to stutter.
When using renderscale settings above 1.0 up to 1.3 I found that stutters would happen less but I still had issues with other cars on track.
Testing with the modded dll file for a 45FPS experience.
This is where it got interesting. I firstly tested by locking reprojection in SteamVR to 45FPS. I could push the in game settings higher with renderscale below 1.0, but there would still be framerate drops from 45 down to +-41 back to 45 and still some spikes to 46FPS, causing some stutters. When setting the renderscale to above 1.0 things started to change for the better and there was less stuttering. It would resolve the occasional spike above 45. The FPS graph in FpsVR was less erratic giving a smoother experience. Then I came across a post of the RF2 forums indicating that the engine FPS must be capped in the player.json file as well. When I set that to 45FPS, I found that the experience improved substantially
BUT the frametime shown in VpsVR climbed to 20-24ms and the graph was basically one big orange block. What I noticed then was that for the most part, the experience was butter smooth. I still had a stutter every now and then but they were much less frequent. The GPU performance headroom was really tight but for some reason it works well.
I can only surmise that when you push the settings to high and ultra and you use a renderscale value above 1.0 in openvr_mod.cfg, cap FPS at 45 along with high settings in game, there is not enough breathing room for framerate spikes and drops but some dropped frames. As long as the dropped frames are spread out, the experience remains smooth.
Note: There are still some stutters and some dropped frames.. The stutters are mostly caused when multiple frames are dropped in close succession and depends on where you are on track, day\night transitions, whether butterfly flaps its wings etc.
Resource utilization is very track specific. I started testing on Lemans, but also tested most of the S397 DLC tracks.
Here are my results with 60x time progression and weather from storm + overcast to sunny. I also used a renderscale setting of 1.25 which looks crisp and clear
.
Circuit d'Azure - Sucks
Performance very poor when rainy - basically unplayable, but sunny is quite good.
All detail settings had to be dropped to low and it was still not great.
Lemans - Very good
Circuit Detail: High
Shadows: Medium
Avg 2-3fps dropped per minute
GPU util - 68-80%
GPU Ram - 10.4GB
Reprojection Ratio 0,6 - 1,5%
Spa - Very good
Circuit Detail: High
Shadows: Medium
Avg +-2fps dropped per minute
GPU util - 68-80%
GPU Ram - 10.4GB
Reprojection Ratio 0,5% - 1,5%
Nurburgring 24h - Average
Stuttering cannot maintain 45fps with circuit detail on high.
Dropped circuit detail and shadows to low. Manages 45Fps mostly, still drops 45fps from time to time.
Circuit Detail: Low
Shadows: Low
Avg 2fps dropped per minute
GPU util - 68-92%
GPU Ram - 13.1GB
Reprojection Ratio 3.2% - 4.4%
Nurburgring GP - Average
Circuit Detail: Low
Shadows: Low
Avg 2-3 fps dropped per minute
GPU util - up to 86%%
GPU Ram - 10.6GB
Reprojection Ratio 1.7% -
Sebring - Very good
Circuit Detail: Medium
Shadows: Low
Avg 1 fps dropped per minute
GPU util - 79%
GPU Ram - 10.5GB
Reprojection Ratio 0.5-1.5%
So I hope this helps. Its not perfect I managed to get a fairly good experience on 45FPS for the most part.