ACC VR - The Definitive VR Performance Guide [SteamVR]

ACC VR - The Definitive VR Performance Guide [SteamVR]

In this guide i will explain in detail how to get the most out of Assetto Corsa Competizione in terms of VR Performance

This guide is aimed at users with headsets that can run SteamVR natively, other headsets might want to use OpenXR instead of VRPerfToolkit, but for headsets that can run SteamVR natively, there is no reason to use OpenXR (Valve Index, Vive, Pimax etc)

If you have a headset that does not support SteamVR natively, you can still follow the guide and find useful information.


This guide is up to date with ACC 1.9.

There will probably be updates to this guide after some long-term testing, since i am not perfectly satisfied with the performance yet. However, this guide should be a good pointer or baseline for anyone looking to improve their performance in VR significantly.

Want to discuss this guide? Use Steam or Racedepartment.

Steam: https://steamcommunity.com/sharedfiles/filedetails/?id=2606988229
Racedepartment: https://www.racedepartment.com/threads/acc-vr-the-definitive-vr-performance-guide.209237/

Last Update: 2023-06-17

Sections

Introduction

This guide is aimed towards all users, but specifically those users that have high-end rigs but cannot get the performance that they desire from the current VR implementation.

This guide is currently up to date with v1.9.X

Before you start going down the hole in order to improve your VR performance, let's state some obvious stuff.
There is multiple ways to gain performance in VR, this guide is aimed at the way i think works the best, this will probably change with time.
Stuff will be added here and or changed as i learn more, both from VR users and from my own testing.

What i found was that the DLSS and FSR implementation in the game is great for screen/pancake gaming, however that was not the case for me in VR.
Objects overall tend to get blurrier in exchange for a higher frame-rate. Although this is great, it seems that there is no in-between (at-least for me) sweet-spot for resolution/frame-rate.

Therefore, i have decided to resort to the VR Performance Kit plugin along with a modified engine.ini file, again.

In my experience and with the tests i have done in 1.9, i find that there is overall a crisper picture and higher frame-rate as a result.

So, with that out of the way, lets move on to the guide.


What will this guide do for me?

In this guide you will learn how to set your SteamVR settings, Nvidia Control Panel settings, edit your Engine.ini file, disable on-screen rendering and set the in-game video settings.

This guide is based on Valve Index but will work with any SteamVR headset.


You will have to tweak some of the settings to be fitted for your specific headset though. For example, the G2 VR Headset has a higher resolution compared to the Index, (what i am using for a baseline) so you will need to have that in consideration while you configure your settings, so that it will be according to that of what you have.
Comment down below if you are stuck and need help with that.

This guide is intended for Valve Index, Vive and other SteamVR headsets, it's not tested for Oculus (VR Performance Kit is probably only supported with SteamVR)

This is not tested nor will ever be with Oculus headsets, however most of the settings should apply.


Please notify me if you have found good settings for your specific setup and headset.
Comment with what hardware you are using and what headset you have so we can add it to the guide.

Before you get started

So you want to improve your performance in ACC VR right?

If you have a setup currently, there are many things that you probably have configured already.
Before you start making changes with the help of this guide, make sure you backup everything.

Here is a list of what you need to backup (in order):

  • Your computer's bios/uefi, create a profile and save your current configuration if you plan to overclock your ram.
  • SteamVR Settings (Take a printscreen of these and save to a folder)
  • Nvidia/AMD GPU Settings (Take a printscreen of these and save to a folder)
  • ACC In-game configs (Located at: User\Documents\Assetto Corsa Competizione\Customs\VideoSettings)
  • Your Engine.Ini file (Located at: C:\Users\User\AppData\Local\AC2\Saved\Config\WindowsNoEditor)
  • Your GameUserSettings.Ini file (Located at: C:\Users\User\AppData\Local\AC2\Saved\Config\WindowsNoEditor)


Any other file/setting that you could think of, that is related to ACC VR, either save by printscreen or save the actual configuration file. There is no guarantee that this guide will work for you, so make it easier for yourself and back everything up, so you can roll back to your previous setup with eaze.


When you are confident with your backups, move on to the next section of the guide!

Check your hardware

Make sure you have your PC setup correctly, this could dramatically increase performance

So before writing this guide, i tried ACC on multiple setups and did benchmarks to get an overall understanding of the current performance situation.

I found out that ram clock speed made huge difference in VR.

When i was running my ram at 2100mhz, i got stuttering in-game, both in VR and on pancake display. Most of the issues occurred when turning the car into a corner or when there was a complex scene of multiple cars moving.

After that i tried 3200mhz and the difference was staggering, no more stuttering or lag when turning into corners and i could run a fairly high amount of AI cars in the grid without any issue at all.

Have in mind that the rig i tested this with, is fairly high-end. However, most users out there that are having issues with fps-consistency, have fairly good hardware.

READ THIS BEFORE GOING ANY FURTHER

YES, XMP (Intel) or DOCP (Amd) can be a way to get a bit more fps/speed out of your computer, especially when gaming. But in many cases the XMP/DOCP rated speed of your ram will not actually run stably with your motherboard and integrated memory controller on your cpu.

Now when that's out of the way, lets have a look at an example of how i would do it.

Summary:

Make a backup of your current bios/uefi profile before changing anything, so you can go back to your stable profile easily.
Make sure you are running your ram at the highest possible frequency without causing instability (Usually when you install ram, you need to manually set XMP to ON in bios/uefi, otherwise they run at default speed eg. 2100mhz or 2000mhz for example)
If the XMP 1 profile introduces instability to your system, try the XMP 2 profile.
This requires a fair amount of knowledge, please do not attempt this if you have no idea of what you are doing and what the possible implications could be.

So, how do you check your ram-speed?

First of all, find out what ram you got and what the rated speed of the specific ones you got are. If you bought the parts and built the computer yourself this shouldn't be to hard.
If you got a pre-built one, check the specifications of that.

When you know what speed your ram is rated at, you can check in Windows, what speed they are actually running at.

Expectations

With this config, i was able to push around 120 fps almost constantly in a 16 grid AI race, however, there are some dips in FPS every now and then, so don't expect this to be comparable with the VR performance of AC for example, however it is working WAY better then before. As a bonus, it works even better when practicing alone.

The hardware that i tested on:
CPU : i7 9700K @ 5.0GHz
GPU : RTX 3070
RAM : Vengeance LPX Black 32GB / 3200MHz

If you got better hardware then this, you can probably push even higher settings, if you have worse hardware then this, you probably need to lower some settings. It is very important that you understand what your hardware is capable of, if you got a different headset, different GPU or even a different CPU, you will get slightly different results compared to what i got.

However, try these settings as a baseline for your own configuration first and try to identify if there is any issues before you start to change settings.

Leave a comment and let me know how it works with your rig, be sure to leave your specs and explain what issue you are having.

SteamVR Settings

This section is dependent on what headset you got, i'm going to go with the settings for Valve Index as a baseline.

For Valve Index 120Hz is really smooth and nice (If your PC can hit those FPS) however lower this to 90 or even 80 if you are struggling with gaining FPS. For other headsets this is probably not a probably, set it to the highest refresh-rate available.

In this revised version of the guide, i have decided to set the resolution scaling in SteamVR instead of in-game due to performance reasons. For some reason, it works better for me. However, this might not be the case for you.

In that case, set the Render Resolution in SteamVR to 100% and tinker with the resolution scales in-game.

General Settings (Global):

  • Refresh rate: 120Hz (Valve Index specific, set to whatever your VR headset works with, try the highest first)
  • Motion Smoothing: Off
  • Render Resolution: Custom - Set this to 100%

Per Game Settings:

Per Game Settings - Part 2:

  • Motion Smoothing: Disabled

  • Custom Resolution Multiplier: 250% <--- This is what i am using, you should leave this at 100% if you are using a G2 headset for example, or increase it even more if you are using a original Vive, you need to understand this before making changes.
    This is also based on what GPU/CPU combo you have, set this accordingly.

  • Field Of View: 85% <--- This one can improve performance, tinker with it if you are struggling to gain FPS. I have it set to 85%, it introduces a cyclops feeling, i have no problem with that, but you might, so set this accordingly.

  • Override World Scale: Off

  • Use Legacy Reprojection Mode: Off

  • Throttling Behavior: Auto

Nvidia Control Panel Settings

Next up we will pay some attention to the Nvidia Control Panel.
These settings should be the same for AMD with minor details being different.

Use these settings as a baseline for your own config, i recommend starting off with these settings.

Lets start off with only changing settings specific to the game, we don't want to touch the global settings and possibly ruin the settings for any other potential games that you are playing on the same PC.


- Pick Program Settings
- Select Assetto Corsa Competizione in the drop-down menu

Configuration:

  • Anisotropic Filtering: Application-Controlled
  • Antialiasing - FXAA: Off
  • Antialiasing - Gamma Corretion: On
  • Antialiasing - Mode: Application-Controlled
  • Antialiasing - Transparency: 8x (Supersample)
  • Background Application Max Frame Rate: Off
  • CUDA - GPUs: All

  • Low Latency Mode: On <---- Set this to OFF if you experience FPS loss.
  • Max Frame Rate: Off
  • Monitor Technology: Fixed Refresh
  • Multi-Frame Sampled AA(MFAA): Off
  • OpenGL Rendering GPU: Auto-Select
  • Power Management Mode: Prefer Maximum Performance
  • Preferred Refresh Rate: Highest Avaliable
  • Texture Filtering - Anisotropic Sample Optimization: Off
  • Texture Filtering - Negative LOD Bias: Clamp
  • Texture Filtering - Quality: High Quality

  • Texture Filtering - Trilinear Optimization: On
  • Threaded Optimization: Auto
  • Triple Buffering: Off
  • Vertical Sync: Off
  • Virtual Reality Pre-Rendered Frames: 1 - This can create higher latency rendering. Lower this to 0 if 1 doesn't work for you. If you have a high end GPU and CPU, try to set this setting a bit higher.

Stop the game from showing on the screen (Optional)

ACC Doesn't have an option to disable screen rendering in-game.
So you have to edit another file to disable the normal window while in VR.

Go to C:\Users\User\Documents\Assetto Corsa Competizione\Config and open the file called vrSettings.json

Change
"spectatorScreenMode": 5,
to
"spectatorScreenMode": 0,

This will not necessarily increase your performance, just a convenient setting if you want to disable the game from also showing up on the screen.

Engine.ini (Optional, not needed)

What is Engine.ini?

Engine.ini is a file that allows you to edit the default values for Unreal Engine Console Commands.
Since we don't have direct access to the console, this is the only way we can access those parameters.

The config below is what I'm using and found that it works the best in VR.
Let me know if you know any better settings, either for you, with your hardware or with your specific headset.

Editing your engine.ini file or using a custom file may create unwanted issues, and beyond unintended graphical appearance it may also result in software or hardware crashes.

ALSO: Beware that these settings are only made with VR optimization in mind (Although shadows could be lowered for more performance), these settings will render the photo-mode depth of field turned off, so if you wanna use the photo-mode, you have to remove the parameters in the Engine.ini file.

Example:

r.Streaming.FullyLoadUsedTextures 1

This is an alternative to disabling textures all together, streaming the textures at full resolution could give you a better visual experience if you have the overhead available. 

Editing the file

We need to edit Engine.ini, this file can be found at: \user\AppData\Local\AC2\Saved\Config\WindowsNoEditor

I'm not gonna go into detail to any of these settings, but if you feel like it, try to tinker with them in order to find the best settings for your rig.
If you want to find out for yourself what these rendering related parameters do, you can do so here.

FIRST and foremost, create a backup of your current "Engine.ini" file, for example you can rename it to "bak.Engine.ini".

Then, you can copy the backup file and rename it to "Engine.ini" and paste the following config there, replacing the old config.

[Core.System]
Paths=../../../Engine/Content
Paths=%GAMEDIR%Content
Paths=../../../AC2/Plugins/FMODStudio/Content
Paths=../../../Engine/Plugins/Runtime/Steam/SteamVR/Content
Paths=../../../Engine/Plugins/Runtime/Oculus/OculusVR/Content
Paths=../../../AC2/Plugins/DLSS/Content
Paths=../../../AC2/Plugins/ACShaders/Content
Paths=../../../Engine/Plugins/2D/Paper2D/Content
Paths=../../../Engine/Plugins/Developer/AnimationSharing/Content
Paths=../../../Engine/Plugins/Editor/GeometryMode/Content
Paths=../../../Engine/Plugins/Editor/SpeedTreeImporter/Content
Paths=../../../Engine/Plugins/Enterprise/DatasmithContent/Content
Paths=../../../Engine/Plugins/Experimental/ChaosClothEditor/Content
Paths=../../../Engine/Plugins/Experimental/GeometryProcessing/Content
Paths=../../../Engine/Plugins/Experimental/GeometryCollectionPlugin/Content
Paths=../../../Engine/Plugins/Experimental/ChaosSolverPlugin/Content
Paths=../../../Engine/Plugins/Experimental/ChaosNiagara/Content
Paths=../../../Engine/Plugins/FX/Niagara/Content
Paths=../../../Engine/Plugins/Experimental/MotoSynth/Content
Paths=../../../Engine/Plugins/MagicLeap/MagicLeapPassableWorld/Content
Paths=../../../Engine/Plugins/MagicLeap/MagicLeap/Content
Paths=../../../Engine/Plugins/Media/MediaCompositing/Content
Paths=../../../Engine/Plugins/Runtime/Synthesis/Content
Paths=../../../Engine/Plugins/Runtime/AudioSynesthesia/Content

[ConsoleVariables]
r.Streaming.FullyLoadUsedTextures=1
r.PostProcessAAQuality=4
r.TemporalAACurrentFrameWeight=0.1
r.TemporalAASamples=8
r.TemporalAASharpness=1.0
r.Tonemapper.Sharpen=4
r.VolumetricFog=0
r.RenderTargetPoolMin=350
r.BloomQuality=1
r.AOquality=0
r.LensFlareQuality=0
r.SceneColorFormat=3
r.SceneColorFringeQuality=0
r.AmbientOcclusionLevels=1
r.AmbientOcclusionRadiusScale=1.7
r.TranslucencyLightingVolumeDim=24
r.ShadowQuality=4
R.DFshadowquality=1
r.Shadow.MaxResolution=512
r.DepthOfFieldQuality=0
r.MipMapLODBias=-0.8
r.HZBOcclusion=0
r.SSR.quality=0
r.SSR.MaxRoughness=0.1
r.RHICmdBypass=0
r.Shadow.CSM.MaxCascades=2
r.LightShaftDownSampleFactor=4
r.TiledDeferredShading.MinimumCount=10
FX.AllowGPUSorting=0
vr.InstancedStereo=1
vr.RoundRobinOcclusion=1
r.MaxAnisotropy=8

[/script/engine.renderersettings]
a.URO.ForceAnimRate=2
a.URO.ForceInterpolation=1
r.OptimizeForUAVPerformance=1
r.Streaming.Boost=0
r.Streaming.DefragDynamicBounds=1
r.Streaming.FramesForFullUpdate=1
r.Streaming.FullyLoadUsedTextures=1
r.Streaming.HLODStrategy=2
r.Streaming.LimitPoolSizeToVRAM=1
r.Streaming.PoolSize=0
r.UseShaderCaching=1
r.UseShaderPredraw=1
r.bForceCPUAccessToGPUSkinVerts=True

VR Performance Toolkit

PS: This is the new method.

You have to remove OpenVR_FSR2.0 if you have it installed, before you install this.

To do that, remove this file from the following folder:
Remove "openvr_api.dll" in
\Steam\steamapps\common\Assetto Corsa Competizione\Engine\Binaries\ThirdParty\OpenVR\OpenVRv1_5_17\Win64 and verify the game on Steam.


Alright, lets get on with the new stuff!

This is the new method to gain extra performance in ACC. This mod will work with Direct3D 11 graphics APIs, is supported by OpenVR and Oculus.

I found that it is better then OpenVR_FSR as it adds additional functionality, such as Foveated Rendering and Variable Rate Shading (The latter is only avaliable for Nvidia RTX or GTX 16xx cards)
You cannot use the in-game DLSS and FSR settings when you are running with this modified version.

You can find the toolkit here: https://github.com/fholger/vrperfkit

Download the latest version, at the time of writing it's V0.3
https://github.com/fholger/vrperfkit/releases/download/v0.3/vrperfkit_v0.3.zip

Installation Instructions

The installation of this mod is fairly straight forward.

Go to the following folder, unpack dxgi.dll and vrperfkit.yml in the same folder as AC2-Win64-Shipping

You should find the AC2-Win64-Shipping in the following folder:
C:\Program Files (x86)\Steam\steamapps\common\Assetto Corsa Competizione\AC2\Binaries\Win64

Now we need to tinker with the settings to get the most out of it.
The following example is what i used to achieve a balance between smooth fps and sharpness.

PS: This here is the full config i use with my specs, it works great with my GPU, CPU and VR headset.
That does not mean it will work perfectly for you, you need to learn the meaning of these parameters and tinker on your own if you are having issues, this should be a good starting point for most users though.

# Upscaling: render the game at a lower resolution (thus saving performance),
# then upscale the image to the target resolution to regain some of the lost
# visual fidelity.
upscaling:
  # enable (true) or disable (false) upscaling
  enabled: true
  # method to use for upscaling. Available options (all of them work on all GPUs):
  # - fsr (AMD FidelityFX Super Resolution)
  # - nis (NVIDIA Image Scaling)
  # - cas (AMD FidelityFX Contrast Adaptive Sharpening)
  method: fsr
  # control how much the render resolution is lowered. The renderScale factor is
  # applied to both width and height. So if renderScale is set to 0.5 and you
  # have a resolution of 2000x2000 configured in SteamVR, the resulting render
  # resolution is 1000x1000.
  # NOTE: this is different from how render scale works in SteamVR! A SteamVR
  # render scale of 0.5 would be equivalent to renderScale 0.707 in this mod!
  renderScale: 0.85
  # configure how much the image is sharpened during upscaling.
  # This parameter works differently for each of the upscaling methods, so you
  # will have to tweak it after you have chosen your preferred upscaling method.
  sharpness: 1.0
  # Performance optimization: only apply the (more expensive) upscaling method
  # to an inner area of the rendered image and use cheaper bilinear sampling on
  # the rest of the image. The radius parameter determines how large the area
  # with the more expensive upscaling is. Upscaling happens within a circle
  # centered at the projection centre of the eyes. You can use debugMode (below)
  # to visualize the size of the circle.
  # Note: to disable this optimization entirely, choose an arbitrary high value
  # (e.g. 100) for the radius.
  radius: 0.6
  # when enables, applies a MIP bias to texture sampling in the game. This will
  # make the game treat texture lookups as if it were rendering at the higher
  # target resolution, which can improve image quality a little bit. However,
  # it can also cause render artifacts in rare circumstances. So if you experience
  # issues, you may want to turn this off.
  applyMipBias: true

# Fixed foveated rendering: continue rendering the center of the image at full
# resolution, but drop the resolution when going to the edges of the image.
# There are four rings whose radii you can configure below. The inner ring/circle
# is the area that's rendered at full resolution and reaches from the center to innerRadius.
# The second ring reaches from innerRadius to midRadius and is rendered at half resolution.
# The third ring reaches from midRadius to outerRadius and is rendered at 1/4th resolution.
# The final fourth ring reaches from outerRadius to the edges of the image and is rendered
# at 1/16th resolution.
# Fixed foveated rendering is achieved with Variable Rate Shading. This technique is only
# available on NVIDIA RTX and GTX 16xx cards.
fixedFoveated:
  # enable (true) or disable (false) fixed foveated rendering
  enabled: true
  # configure the end of the inner circle, which is the area that will be rendered at full resolution
  innerRadius: 0.6
  # configure the end of the second ring, which will be rendered at half resolution
  midRadius: 0.8
  # configure the end of the third ring, which will be rendered at 1/4th resolution
  outerRadius: 1.0
  # the remainder of the image will be rendered at 1/16th resolution

  # when reducing resolution, prefer to keep horizontal (true) or vertical (false) resolution?
  favorHorizontal: true

  # when applying fixed foveated rendering, vrperfkit will do its best to guess when the game
  # is rendering which eye to apply a proper foveation mask.
  # However, for some games the default guess may be wrong. In such instances, you can uncomment
  # and use the following option to change the order of rendering.
  # Use letters L (left), R (right) or S (skip) to mark the order in which the game renders to the
  # left or right eye, or skip a render target entirely.
  #overrideSingleEyeOrder: LRLRLR

# Enabling debugMode will visualize the radius to which upscaling is applied (see above).
# It will also output additional log messages and regularly report how much GPU frame time
# the post-processing costs.
debugMode: false

# Hotkeys allow you to modify certain settings of the mod on the fly, which is useful
# for direct comparsions inside the headset. Note that any changes you make via hotkeys
# are not currently persisted in the config file and will reset to the values in the
# config file when you next launch the game.
hotkeys:
  # enable or disable hotkeys; if they cause conflicts with ingame hotkeys, you can either
  # configure them to different keys or just turn them off
  enabled: false
  # toggles debugMode
  toggleDebugMode: ["ctrl", "f1"]
  # cycle through the available upscaling methods
  cycleUpscalingMethod: ["ctrl", "f2"]
  # increase the upscaling circle's radius (see above) by 0.05
  increaseUpscalingRadius: ["ctrl", "f3"]
  # decrease the upscaling circle's radius (see above) by 0.05
  decreaseUpscalingRadius: ["ctrl", "f4"]
  # increase the upscaling sharpness (see above) by 0.05
  increaseUpscalingSharpness: ["ctrl", "f5"]
  # decrease the upscaling sharpness (see above) by 0.05
  decreaseUpscalingSharpness: ["ctrl", "f6"]
  # toggle the application of MIP bias (see above)
  toggleUpscalingApplyMipBias: ["ctrl", "f7"]
  # take a screen grab of the final (post-processed, upscaled) image.
  # The screen grab is stored as a dds file next to the DLL.
  captureOutput: ["ctrl", "f8"]
  # toggle fixed foveated rendering
  toggleFixedFoveated: ["alt", "f1"]
  # toggle if you want to prefer horizontal or vertical resolution
  toggleFFRFavorHorizontal: ["alt", "f2"]


Here you can play with some settings to suite your needs.

"method" - You can try all three options here, all of them work on any GPU. The options are fsr, nis, cas.

"renderScale" - Set the renderscale, a lower number will render the game at a lower resolution and upscale to the native resolution set in SteamVR. Try different values here to fit your headset. I suggest to increase this a tiny bit if you

"fixedFoveated" - Determine the rendering scale of the center, inner, mid and outer rings. You can use my settings above as a baseline, this will drastically increase your VR performance if mastered correctly.

OpenVR_FSR V2.0 (Legacy, do not use)

PS: Do not use this method anymore, VRPerfKit is the new method of achieving even better performance. I have left it here for some use-cases where VRPerfKit is not a viable option (Basically none)

I found that this is still better then the in-game options for DLSS and FSR for VR.
It's pretty obvious, but you cannot use the in-game DLSS and FSR settings when you are running with this modified version.

This modified version of openvr_api.dll works with ACC, this is what made the game playable for me (Together will the correct configurations overall)

You can find the modified dll here.

Download the latest version, at the time of writing this, it's V2.1.1
https://github.com/fholger/openvr_fsr/releases/download/fsr_v2.1.1/openvr_fsr_v2.1.1.zip

Installation instructions

Backup your old "openvr_api.dll" so you can go back to the original one, just in case.
Rename it to "bak.openvr_api.dll" or zip it into an archive.

Replace "openvr_api.dll" in \Steam\steamapps\common\Assetto Corsa Competizione\Engine\Binaries\ThirdParty\OpenVR\OpenVRv1_5_17\Win64 with the one provided from fholger's github.
Make sure you include openvr_mod.cfg in the same folder as the modified openvr_api.dll.

You can tinker with the settings a bit, but i would suggest not to at first, if needed later on you can check out openvr_mod.cfg, it looks like this.

{
  "fsr": {
    // enable image upscaling through AMD's FSR or NVIDIA's NIS
    "enabled": true,
    
    // if enabled, uses NVIDIA's Image Scaling instead of the default
    // AMD FidelityFX SuperResolution. Both algorithms work similarly, but produce
    // somewhat different results. You may want to experiment switching between the
    // two to determine which one you like better for a particular game.
    "useNIS": false,

    // Per-dimension render scale. If <1, will lower the game's render resolution
    // accordingly and afterwards upscale to the "native" resolution set in SteamVR.
    // If >1, the game will render at its "native" resolution, and afterwards the
    // image is upscaled to a higher resolution as per the given value.
    // If =1, effectively disables upsampling, but you'll still get the sharpening stage.
    // AMD presets:
    //   Ultra Quality => 0.77
    //   Quality       => 0.67
    //   Balanced      => 0.59
    //   Performance   => 0.50
    "renderScale": 0.77,

    // tune sharpness, values range from 0 to 1
    "sharpness": 1.0,
    
    // Only apply FSR/NIS to the given radius around the center of the image.
    // Anything outside this radius is upscaled by simple bilinear filtering,
    // which is cheaper and thus saves a bit of performance. Due to the design
    // of current HMD lenses, you can experiment with fairly small radii and may
    // still not see a noticeable difference.
    // Sensible values probably lie somewhere between [0.2, 1.0]. However, note
    // that, since the image is not spheric, even a value of 1.0 technically still
    // skips some pixels in the corner of the image, so if you want to completely
    // disable this optimization, you can choose a value of 2.
    // IMPORTANT: if you face issues like the view appearing offset or mismatched
    // between the eyes, turn this optimization off by setting the value to 2.0
    "radius": 0.5,

    // if enabled, applies a negative LOD bias to texture MIP levels
    // should theoretically improve texture detail in the upscaled image
    // IMPORTANT: if you experience issues with rendering like disappearing
    // textures or strange patterns in the rendering, try turning this off
    // by setting the value to false.
    "applyMIPBias": true,
    
    // If enabled, will visualize the radius to which FSR/NIS is applied.
    // Will also periodically log the GPU cost for applying FSR/NIS in the
    // current configuration.
    "debugMode": false
  }
}


Here you can play with some settings to suite your needs.


"useNIS" - Set this to True if you want to try Nvidia's Image Scaling instead of AMD's FSR that is the default. I find this less crisp compared to AMD's FSR, but it might render a different result for you depending on your headset.

"renderScale" - Set the render-scale, a lower number will render the game at a lower resolution and upscale to the native resolution set in SteamVR. Try different values here to fit your headset. I suggest to increase this a tiny bit if you want a sharper picture.

"sharpness" - If set this to 1.0 as it worked best for me, however try lowering this and compare the results. Start with this at 1 though.

"radius" - This one is important, this will set how big of an area should be "sharp", default is 0.5. If you want a larger sweet-spot, increase this. If you want a smaller sweet-spot, lower this.
Lower means better performance, higher means worse performance. 0.5 is a good starting point.

In-game Graphics Settings

In this section we will cover the in-game graphics settings for ACC

These settings will highly depend on what computer you have, use these settings as a baseline and make your own small tweaks.

Tip: ACC has a great feature that allows you to save multiple graphics settings and load them back when needed.

Start off with saving your current settings, give it a name and save it.

Then we go to \Documents\Assetto Corsa Competizione\Customs\VideoSettings and copy the preset we just saved.
Rename it to "VR Guide Main" and remove everything in the file. Now you can copy these settings into the file and use this preset as a base for your new settings.

{
	"resolutionQuality": 70,
	"viewDistanceQuality": 1,
	"antiAliasingQuality": 3,
	"shadowQuality": 1,
	"postProcessQuality": 1,
	"textureQuality": 2,
	"effectsQuality": 0,
	"foliageQuality": 0,
	"mirrorQualityLevel": 2,
	"mirrorFramerateCap": 60,
	"maxCarsVisible": 12,
	"isAATemporal": true,
	"aACustom": 0,
	"pixelDensity": 1,
	"mirrorDistance": 11000,
	"advancedSharpenFilter": false,
	"materialsQuality": 0,
	"temporalUpsampling": true,
	"volumetricFog": 0,
	"bloomLevel": 0.30000001192092896,
	"bloomQuality": 2,
	"mirrorsResolution": 1,
	"foliageLodQuality": 1,
	"carLODSet": 100,
	"hLODEnabled": false,
	"shadowDistanceQuality": 1,
	"frameLimit": 120,
	"isMBlurEnabled": 0,
	"colorSaturation": 1.1000000238418579,
	"sharpen": 3,
	"cameraDirtLevel": 1,
	"whiteBalance": 12000,
	"imageExposureGain": 0.5899999737739563,
	"imageContrast": 0.41999998688697815,
	"hmdWorldToMeters": 100,
	"fpsCapUI": true,
	"useLegacyTonemapper": true,
	"hDRColorGamut": 2,
	"hDRUILevel": 1,
	"contactShadows": 1,
	"dLSSEnable": false,
	"dLSSQuality": 1,
	"dLSSSharpness": 0,
	"tAAGen5": false,
	"aMDFSREnable": false,
	"aMDFSRQuality": 3,
	"aMDFSRSharpness": 1
}


If you don't want to do it this way, here is some screenshots for you.

In-game Settings

This is the same config as the config file above
Let's do this right from the beginning, step by step.

Step 1:
Begin with clicking "Manage Custom Video Presets"

Step 2:
Create your presets, usually i would recommend having one for your normal PC screen and one for VR.
In this case, if you already have one for VR, save that and name it, so you can go back to that in case you don't like the new one that we are about to configure.

PS: When switching from Desktop to VR, you need to set VR Pixel Density again, if you change anything the VR Pixel Density will be reseted.


Step 3:
Now that we have saved our old configs, we can go about and make our new config.
Let's start at the top

A:



Resolution: Doesn't matter, the game will only render in VR anyways.
V-Sync: Disabled
Framerate Limit: Set this a little bit higher then your VR headset refresh-rate, if you got a beefy computer, try to up this a little bit for a smoother feeling.
Menu Framerate Limiter: Enabled
Triple Screen: Disabled
HDR: Disabled


B:



Resolution Scale: 70% (This is set to 70% because we are letting SteamVR upscale the resolution of the headset displays instead of the game, i found this to be better at the moment, if this changes, i will revise this)

View Distance: Mid (Set this to low on lower end PC's)
Shadows: Mid
Shadows Distance: Mid
Contact Shadows: Enable
Antialiasing: Epic
Antialiasing Type: Temporal (Try KTAA if you are out of options)
TAA Gen5: Disabled
DLSS: Disabled
FSR: Disabled


C:



Effects: Low
Post-Processing: Mid <---- Set this to low if you want more FPS.
Foliage: Low
Texture: High
Mirror Quality: Mid
Mirror View Distance: 110 Meters (Useful for online racing, set this to lower if you want less performance impact)
Mirror Framerate Limit: 60 or 90 FPS (Set this to 60 for a performance increase)
Mirror Resolution: Mid
Opponents Visibility: 12 (Useful for online racing, set this higher/lower if you need to see more or if you need more performance)


D:



VR Pixel Density: 100%
Virtual To Real Scale: 100% <--- Increase this to make the world scale smaller, makes it easier to spot the apex and can have a performance impact, but not certain.


E:


Materials Quality: Mid
Temporal Upsampling: Enabled
Bloom Quality: Low
Volumetric Fog: Disabled (This is a VR killer in terms of performance, always have this turned off)

Foliage Lod Quality: Mid
Car Lod Quality: 100%
HLOD: Disabled
Advanced Sharpen Filter: Disabled



F:




This section is up to personal preference, except for the "Sharpness" option.
Motion Blur: Disabled
Saturation: 110 (Set this to 100 if you dont want more color)
White Balance: Warm (Set this to neutral if you want, this is up to personal preference)
Sharpness: 200%
Camera Dirt Effect: 1.5
Image Contrast: 0.55
Exposure Gain: 0.40
Tone Mapping: Aces (Set this to whatever suites you best)

Video of improved performance


Summary

Now you should have all the tools needed in order to improve your performance in ACC, however, lower spec PC's might still struggle, even with these tweaks.

Let me know in the comments on Steam or Racedepartment if you have any questions about the guide or if you need help with your VR settings.

If you liked the guide and would like to thank me
Follow me on Youtube
Comment on Steam
Discuss it on Discord Forums

Guide on steam: https://steamcommunity.com/sharedfiles/filedetails/?id=2606988229

Guide on Racedepartment: https://www.racedepartment.com/threads/acc-vr-the-definitive-vr-performance-guide.209237/