I've seen a few threads about how bad the game lags after the latest patch. Most of them contain complaints about the fact that the old common launch options don't work. The reason for this is the switch from Direct3D 11 to Direct3D 9. I thought I'd let everyone know the new working options and what they do. This should increase your FPS.
New launch options: -force-d3d11 -force-feature-level-9-3 -popupwindow
To use these options, go to steam, right click on rust, go to properties, then set launch options. Enter your launch options in that screen.
-force-d3d11: Forces the game to use Direct3D 11 for rendering.
-force-feature-level-9-3: Forces the game to use DirectX 11.0 feature level 9.3.
-popupwindow: Forces the game to open as a popup window (no frame).
In place of -force-feature-level-9-3, you can experiment with the following. You may see a slight FPS increase, but you may also see more graphical bugs with these options:
-force-feature-level-9-1
Force DirectX 11.0 feature level 9.1.
-force-feature-level-9-2
Force DirectX 11.0 feature level 9.2.
-force-feature-level-9-3
Force DirectX 11.0 feature level 9.3.
-force-feature-level-10-0
Force DirectX 11.0 feature level 10.0.
-force-feature-level-10-1
Force DirectX 11.0 feature level 10.1.
-force-feature-level-11-0
Force DirectX 11.0 feature level 11.0.
Some people experience graphical glitches, mainly with the sky, after using these options. Often times, changing your Anti Aliasing to 2X in the Graphics Options will reduce or eliminate this problem but will most likely result in your hands/tools being rendered upside-down. I believe the reason why this happens is explained here. Basically, this is due to using the feature level parameter to render with an older version of DirectX 11 where the RenderTexture is not properly flipped. Unfortunately, this can't be fixed without a patch to the game which is unlikely to happen.
Render Texture Coordinates
Vertical texture coordinate conventions differ between Direct3D and OpenGL:
In Direct3D, the coordinate is zero at the top, and increases downwards.
In OpenGL, the coordiante is zero at the bottom, and increases upwards.
Most of the time this does not really matter, except when rendering into a RenderTexture. In that case, Unity internally flips rendering upside down when rendering into a texture on Direct3D, so that the conventions match between the platforms.
One case where this does not happen, is when Image Effects and Anti-Aliasing is used. In this case, Unity renders to screen to get anti-aliasing, and then "resolves" rendering into a RenderTexture for further processing with an Image Effect. The resulting source texture for an image effect is not flipped upside down on Direct3D (unlike all other Render Textures).
If your Image Effect is a simple one (processes one texture at a time), this does not really matter, because Graphics.Blit takes care of that.
However, if you're processing more than one RenderTexture together in your Image Effect, most likely they will come out at different vertical orientations (only in Direct3D, and only when anti-aliasing is used). You need to manually "flip" the screen texture upside down in your vertex shader, like this:
// On D3D when AA is used, the main texture & scene depth texture
// will come out in different vertical orientations.
// So flip sampling of the texture when that is the case (main texture
// texel size will have negative Y).
#if SHADER_API_D3D9
if (_MainTex_TexelSize.y < 0)
uv.y = 1-uv.y;
#endif