Batman™: Arkham Knight

Batman™: Arkham Knight

992 ratings
HOW TO GET BEST PERFORMANCE [OPTIMIZATION MUST READ!!!!!]
By BIG SHAQ 👑 and 1 collaborators
Unlock 60FPS - Optimize to get smooth gameplay and better performance.
Skip meaninless intro (Start up logo) each time you want to play.
(check comments here http://steamcommunity.com/app/208650/discussions/0/594821545178755667/#p19)
2
2
2
2
   
Award
Favorite
Favorited
Unfavorite
HOW TO GET BEST PERFORMANCE [OPTIMIZATION]
WARNING: THIS GUIDE IS FOR THOSE WHO WANT TO BE HELPED AND WANT TO PLAY WITH A DECENT PERFORMANCE. THIS GUIDE MAY WORK ON YOU OR MAY NOT. EVERYTHING YOU DO IS AT YOUR RESPONSABILITY. IF IT DIDN'T WORK FOR YOU PLEASE KEEP YOUR MAD FEELINGS AND ANGER FOR YOURSELF AND DON'T EXPRESS IT ON THIS THREAD OR BLAMING ME FOR SOMETHING. IF IT WORKED THAN I AM VERY HAPPY FOR YOU. FOR EVERYTHING YOU DO FIRST MAKE A BACKUP.

IMPORTANT: After downloading the driver make sure the Physx is set to GPU not CPU or Auto. You can change it in Nvidia control panel 3D settings > Configure surround, Physx

So first of all, if you still have a lock on 30FPS do this change:
Remember to do backup of the file before you change anything.

I am using a GTX970 gpu and with those settings my game runs smoothly at 60fps without any lags and with nice graphics quality.

SKIP INTRO
Get rid of that mean intro saying you who made the game and start playing already without waiting.

Right click and select properties for the game, click launch options and add -nologo. Will boot straight into the main menu afterwards

- Increase FPS to 60+:
Go to [...]\steamapps\common\Batman Arkham Knight\BMGame\Config and look for BmSystemSettings.ini (open with notepad)

Change MaxFPS=30.000000 to MaxFPS=120.000000 (save)

- Get better performance:
Go to [...]\steamapps\common\Batman Arkham Knight\BMGame\Config and look for BmSystemSettings.ini (open with notepad)

1. Change bAllowD3D9MSAA=False to bAllowD3D9MSAA=True (This allows you to use MSAA with D3D9)

2. [reserved]

3. Change TextureResolution=1 to TextureResolution=2 (This allows you to change the texture resolution from Normal to High but somehow it keep changing back to normal I don't know why because in my case while looking at the options in-game the texture resolution is set on Normal and there is no other options (no high, no ultra, just nothing). But you can try.

4. Ingame decrease shadows to low or normal. No need to put it high, just in case to get more frames/s (who cares about shadows anyway ;/)

5. Motion blur solution
MotionBlur=False
MotionBlurPause=False
MotionBlurSkinning=1
Set MaxFilterBlurSampleCount=1

6. Turn off Bloom: Bloom=False

7. Turn off Reflections: Reflections=False
AllowImageReflections=False
AllowImageReflectionShadowing=False

8. Change AllowOpenGL=False to AllowOpenGL=True (This allows you to use OpenGL for better performance)

9. [Reserved]

10. Film grain removal:
Distortion=False
FilteredDistortion=False
(Not sure if works but you can try. Personaly I didn't see any difference when I tested it with true or false)

Originally posted by The_Winkler:
I can't find BMSystemSettings.ini in my config folder.
Run the game first so that it will load the file by default. After downloading it you have to run the game first.

SLI config
Originally posted by Zorbak1:
SLI not currently working for me, and i have the new drivers installed.
Look for bEnableCrossfire=False and change it to True. Maybe that will help.

Originally posted by MistaKilla:
Ok for people who are running SLI Setup, Make sure you allow D3D10 = true as op said. I went into nv inspector and found that sli settings for the game do exist but they run on D3D10 so if you enable that you will see that both of your cards being used. I am running 670sli and doing this has helped a lot. Able to even run at 1440p with all gameworks stuff off and texture at normal and quality at high. It is the blur that results in frame drops.

Save everything and ready to go.

IMPORTANT: SET THE FILE TO READ-ONLY AS THE GAME RESET THE SETTINGS EVERYTIME.


Post here feedback if it worked for you or not.

Feedbacks:

Originally posted by Rin D. Pryde:
Ok, my two cents.

In my case it looks like motion blur is bugged - game runs ok, but the second you move the camera and motion blur kicks in the fps drops dramatically. And there is no way to turn the blur off right now - even if you disable it in the BmSystemSettings file - the game just won't start (crashes after intros).

But you can try the following in the Batman Arkham Knight\BMGame\Config\BmSystemSettings.ini:

Change Bloom and AllowRadialBlur to "False", MotionBlurSkinning to 0, and MobilePostProcessBlurAmount to 0.0 - it helped me a lot, though still hardly enjoyable fps.

PS. Don't forget do copy config files to restore them if something goes wrong =)

Originally posted by Sygma:
not sure the d3d10 help, it made things worse on some ends.

Btw the textures are forced at anisotropy x4 in the ini, change it to x16 and in the nvidia profile, textures high quality. It kinda look very good after that

Originally posted by iUberGeek:
Another tip for those playing on a laptop with Nvidia Optimus switchable graphics: Switch to windowed or borderless display modes using GeForce Experience in order to avoid severe flickering and stuttering.


Originally posted by HolyGrail:
Just came from redit. Also make sure your PhysX settings are set to GPU and not CPU or Auto
Nvidia control panel 3D settings > Configure surround, Physx

Originally posted by HolyGrail:
Wow, going from full screen to windowed really helped. Everyone should also give that a go.

Originally posted by Sevket:
And dont forget setting "prerenderedtextures" to "1" from nvidia settings

Originally posted by DDIGITALDNR:

Moving the game to a SSD helps with texture loading issues.


GAMPLAY PREVIEW:


COMBAT GAMEPLAY + BATMOBILE


BEAUTIFY THE GAME [MOD]

http://steamcommunity.com/sharedfiles/filedetails/?id=468744403
FOV - CHANGE FIELD OF VIEW
Navigate to

...\your Steam folder\SteamApps\common\Batman Arkham Knight\BMGame\Config


  1. open this file in your favorite text editor (i.e. Notepad)
    making a backup copy of it before editing is advisable

    BmInput.ini


  2. Locate this section

    [Engine.PlayerInput]

  3. copy all text strings starting with Bindings


  4. Locate this section

    [BmGame.RPlayerInput]

  5. paste the text strings starting with Bindings at the end of this section


  6. add the following lines at the bottom of what you've just pasted

    Bindings=(Name="NumPadOne",Command="FOV 80") Bindings=(Name="NumPadTwo",Command="FOV 85") Bindings=(Name="NumPadThree",Command="FOV 90") Bindings=(Name="NumPadFour",Command="FOV 95") Bindings=(Name="NumPadFive",Command="FOV 100") Bindings=(Name="NumPadSix",Command="FOV 105") Bindings=(Name="NumPadSeven",Command="FOV 110") Bindings=(Name="NumPadEight",Command="FOV 115") Bindings=(Name="NumPadNine",Command="FOV 120")

  7. save the file and exit the text editor

Source: Field of View
Tweaks to improve texture quality part 1[by Kaldaien]
The following is a rough draft of what will be added to a proper tweak guide

I'd like to get some comments on how effectively it works before I go through all that trouble. I focused primarily on the technical info so you can make adjustments yourself as need be, rather than trying to pass this off as a one-size-fits-all sort of quick fix. I left the original tweak, which has been shown effective on a lot of computers in place in case these new changes only work on my machines. But I think this is all around a better choice. I've attempted to balance fast texture load times with throttling to avoid hitching, unfortunately the highest texture LODs will visibly pop-in, but I think that's a fair price to pay for playable framerates while flying around or driving in the Batmobile.

Texture and Performance Tweaks
So, you uncapped the framerate and probably noticed things got a little weird? Yeah, so did Iron Galaxy and that's why they limited the PC version to 30 FPS (crazy bunch of cooks if you ask me).

The fundamental problem is actually the sheer volume of texture data in this game, and the game's design decision to "never show loading screens." Slower hard drives such as those found in consoles or many PCs will feed the engine texture data at a reasonably managable rate, but new fangled SSDs can overwhelm the engine with textures and cause hitching and crashing if something's not slowed down.

The solution that was rushed out the door, was rather brash, and it limits the frame rate to 30 FPS. This works most of the time, but texture loading can still beat the hell out of the game engine once you hop into the batmobile and start driving around at high speed.

---

I've spent a good 10+ hours debugging the problem with my limited toolset and I believe I have a solution that's altogether better than the 30 FPS cap. Shockingly, the actual developers of this game, with their full blown toolset should have arrived at this same solution if not something altogether better, but I guess their priorities were elsewhere. A lot of people have had their hands on the PC version of this game, from several parties at NVIDIA who integrated the GameWorks stuff, to Rocksteady and of course Iron Galaxy. It boggles the mind that not one of them ever considered capping the framerate to 30 FPS a strange thing to do in a AAA game that's bundled with NVIDIA's flagship GPUs as a selling point!

We've established that the problem is too much texture data... that's not an uncommon problem in modern games. The real kicker here is what happens when VRAM fills up and the engine's supposed to prioritize which textures to remove from VRAM and needs to do so very quickly because you're zipping through the city at 50 mph. The default engine configuration is not doing this adequately, in most cases you will get hitching while it takes multiple frames to sort out VRAM full issues, in the worst case you'll flat out crash (and _this_ is what prompted the 30 FPS cap, not so much the hitching). The takeway here is that to make this game as smooth as possible, you want as much RAM and VRAM as possible. Consoles are better built to handle a game that works the way this one does since VRAM is not separate from system RAM, but on the PC you're going to need a lot more RAM on both sides of the equation (CPU and GPU) to avoid the wrath of texture memory swapping.

---

My solution to frequent hitching is to keep fewer mipmap levels resident, evict smaller chunks of memory more frequently, commit smaller batches of texture updates per-frame and keep a longer hystersis to reduce heavy load/unload patterns.

BmEngine.ini:

[TextureStreaming]
MinTextureResidentMipCount=7
PoolSize=768
MemoryMargin=128
MemoryLoss=0
HysteresisLimit=24
DropMipLevelsLimit=20
StopIncreasingLimit=12
StopStreamingLimit=8
MinEvictSize=1
MinFudgeFactor=1
FudgeFactorIncreaseRateOfChange=0.5
FudgeFactorDecreaseRateOfChange=-0.7
MinRequestedMipsToConsider=10
MinTimeToGuaranteeMinMipCount=4
MaxTimeToGuaranteeMinMipCount=9
UseTextureFileCache=False
LoadMapTimeLimit=0
LightmapStreamingFactor=0.04
ShadowmapStreamingFactor=0.04
MaxLightmapRadius=2000.0
AllowStreamingLightmaps=False
TextureFileCacheBulkDataAlignment=1
UsePriorityStreaming=True
bAllowSwitchingStreamingSystem=True
UseDynamicStreaming=True
bEnableAsyncDefrag=False
bEnableAsyncReallocation=False
MaxDefragRelocations=256
MaxDefragDownShift=128
BoostPlayerTextures=5.0
TemporalAAMemoryReserve=4.0
ReflectionTexturePoolSize=72

Incidentally, the game appears to have a built-in countermeasure that will throttle texture loads rather stupidly if the game crashes enough times. It alters the engine settings to compute mipmaps rather than load them from disk, which slows down texture loads on slower processors but has questionable effectiveness on higher-end CPUs. This solution drives me nuts, and you're going to want to set your BmSystemSettings.ini to read-only after you setup graphics options you like in order to prevent it from happening (because it will bring texture load performance to a grinding halt on slower CPUs).

This solution will create a lot of constant I/O load, so you probably don't want to try this on a non-SSD. (I've yet to test these tweaks on a mechanical hard drive.)

-----

With the hitching issue out of the way, I'd like to address another issue I've seen a lot of people discussing - triple buffering and pre-rendered frames.

These things sound nice on paper, and will smooth out framerate variability at the cost of input latency. During most gameplay added input latency's not a problem (combat is largely rythm based and you just need to intuitively feel the flow of action), but the Batmobile and swinging around with the batclaw can be miserable experiences if you use triple buffering and pre-rendered frames. Triple buffering in Direct3D works differently than other places, it's basically a 3 frame render queue - all 3 frames have to be rendered and then all 3 frames have to be presented (when VSYNC is on, this means you add an extra frame of latency before any update shows up on screen). OpenGL doesn't actually define triple buffering and when you force it on in the driver, some drivers do something altogether smarter where they drop that 3rd frame when it makes sense to do so. I don't trust triple buffering in any API though, there's not enough control over how it works at the application level, and I strongly suggest you avoid it in this game.

There's a little known solution that will get you the benefits of both of these things with a lot less added input latency. Without discussing how Window Vista+'s desktop window manager works in depth, let me just say that its effective behavior in windowed mode is to drop early/late frames to eliminate tearing without triple buffered VSYNC.

It's worth mentioning that if you don't enable VSYNC in windowed mode you'll avoid tearing but you'll be allowed to render at an unlimited framerate and that will really screw up smooth motion perception on most display devices as framerate starts to fluctuate especially for the brief periods where you're drawing above your refresh rate and those frames are inevitably dropped. That's why the Unreal Engine has options to artificially cap and smooth framerate, and this is when you want those things.

BmSystemSettings.ini:
[SystemSettings]
...
OneFrameThreadLag=True
UseVsync=False
MaxFPS=60
UpscaleScreenPercentage=True
Fullscreen=False
...
ResX=<Your Desktop X Resolution>
ResY=<Your Desktop Y Resolution>
...
WindowDisplayMode=1 ; Fullscreen borderless window

End of part 1
Tweaks to improve texture quality part 2 [by Kaldaien]
BmEngine.ini:

[Engine.Engine]
...
bSmoothFrameRate=TRUE
MinSmoothedFrameRate=58
MaxSmoothedFrameRate=62

[Engine.Client]
...
; This is actually your refresh rate, set it to match your desktop's refresh rate and ignore what its name seems to imply
MinDesiredFrameRate=60.0

These are the NVIDIA driver settings I use to take best advantage of this:

Maximum pre-rendered frames: 1
Power management mode: Prefer maximum performance
SLI rendering mode: Single-GPU

Threaded optimization: On
Vertical Sync: OFF

By the way, if you have an SLI system don't use it (dedicate 1 GPU to PhysX instead). Even when both GPUs are rendering (current NV drivers have no support for 3 or 4-way SLI in this game), you get no tangible benefits from this, only increased frame latency.


----


Maximum anisotropy in this game defaults to 4x, which is practically free on most modern GPUs. There's a catch though, anisotropy is only applied to a handful of textures given the default settings in the engine configuration. To fix this, use the following TextureGroup settings.

BmSystemSettings.ini:

[SystemSettings]
...
MaxAnisotropy=16
TEXTUREGROUP_World=(MinLODSize=128,MaxLODSize=1024,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_WorldNormalMap=(MinLODSize=128,MaxLODSize=1024,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_WorldSpecular=(MinLODSize=128,MaxLODSize=1024,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_Character=(MinLODSize=128,MaxLODSize=1024,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_CharacterNormalMap=(MinLODSize=128,MaxLODSize=1024,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_CharacterSpecular=(MinLODSize=128,MaxLODSize=1024,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_Weapon=(MinLODSize=128,MaxLODSize=1024,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_Sharpen6)
TEXTUREGROUP_WeaponNormalMap=(MinLODSize=128,MaxLODSize=512,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_WeaponSpecular=(MinLODSize=128,MaxLODSize=512,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_Vehicle=(MinLODSize=128,MaxLODSize=1024,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_Vehicle_Low=(MinLODSize=128,MaxLODSize=512,LODBias=0,MinMagFilter=Linear,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_Vehicle_High=(MinLODSize=128,MaxLODSize=2048,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_VehicleNormalMap=(MinLODSize=128,MaxLODSize=2048,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_VehicleSpecular=(MinLODSize=128,MaxLODSize=2048,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_Cinematic=(MinLODSize=128,MaxLODSize=2048,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_Effects=(MinLODSize=128,MaxLODSize=1024,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_EffectsNotFiltered=(MinLODSize=128,MaxLODSize=4096,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_Skybox=(MinLODSize=128,MaxLODSize=1024,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_UI=(MinLODSize=512,MaxLODSize=4096,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_Lightmap=(MinLODSize=128,MaxLODSize=4096,LODBias=0,MinMagFilter=Linear,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_Shadowmap=(MinLODSize=128,MaxLODSize=4096,LODBias=0,MinMagFilter=Linear,MipFilter=Linear)
TEXTUREGROUP_RenderTarget=(MinLODSize=1,MaxLODSize=2048,LODBias=0,MinMagFilter=Linear,MipFilter=Linear)
TEXTUREGROUP_MobileFlattened=(MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=aniso,MipFilter=point)
TEXTUREGROUP_ProcBuilding_Face=(MinLODSize=256,MaxLODSize=4096,LODBias=0,MinMagFilter=aniso,MipFilter=Linear,MipGenSettings=TMGS_Sharpen5)
TEXTUREGROUP_ProcBuilding_LightMap=(MinLODSize=128,MaxLODSize=4096,LODBias=-1,MinMagFilter=Linear,MipFilter=Linear,MipGenSettings=TMGS_Sharpen0)
TEXTUREGROUP_Terrain_Heightmap=(MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=Linear,MipFilter=Point,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_Terrain_Weightmap=(MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=Linear,MipFilter=Point,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_ImageBasedReflection=(MinLODSize=128,MaxLODSize=128,LODBias=1,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_SimpleAverage)
TEXTUREGROUP_Bokeh=(MinLODSize=128,MaxLODSize=512,LODBias=0,MinMagFilter=Linear,MipFilter=Linear,MipGenSettings=TMGS_SimpleAverage)
TEXTUREGROUP_LOD1_RRM_Mask=(MinLODSize=128,MaxLODSize=4096,LODBias=0,MinMagFilter=Linear,MipFilter=Linear,MipGenSettings=TMGS_SimpleAverage)
TEXTUREGROUP_LOD1_Opacity_Mask=(MinLODSize=128,MaxLODSize=4096,LODBias=0,MinMagFilter=Linear,MipFilter=Linear,MipGenSettings=TMGS_SimpleAverage)
TEXTUREGROUP_LOD1_Emissive=(MinLODSize=128,MaxLODSize=4096,LODBias=0,MinMagFilter=Linear,MipFilter=Linear,MipGenSettings=TMGS_SimpleAverage)
...
TEXTUREGROUP_CharacterLow=(MinLODSize=128,MaxLODSize=512,LODBias=0,MinMagFilter=Linear,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_CharacterHigh=(MinLODSize=128,MaxLODSize=2048,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_CharacterSpecPower=(MinLODSize=128,MaxLODSize=1024,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_World_Low=(MinLODSize=128,MaxLODSize=512,LODBias=0,MinMagFilter=Linear,MipFilter=Linear,MipGenSettings=TMGS_Sharpen6)
TEXTUREGROUP_World_Hi=(MinLODSize=128,MaxLODSize=2048,LODBias=0,MinMagFilter=aniso,MipFilter=Linear,MipGenSettings=TMGS_Sharpen6)
TEXTUREGROUP_WorldNormalMap_Hi=(MinLODSize=128,MaxLODSize=2048,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_WorldSpecular_Hi=(MinLODSize=128,MaxLODSize=2048,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_Interior_High=(MinLODSize=128,MaxLODSize=2048,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_InteriorNormalMap_High=(MinLODSize=128,MaxLODSize=2048,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_InteriorSpec_High=(MinLODSize=128,MaxLODSize=2048,LODBias=0,MinMagFilter=Aniso,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)
TEXTUREGROUP_LightAndShadowMap=(MinLODSize=128,MaxLODSize=4096,LODBias=0,MinMagFilter=Linear,MipFilter=Linear,MipGenSettings=TMGS_LeaveExistingMips)

End of part 2
Tweaks to improve texture quality part 3 [by Kaldaien]
Now every texture where anisotropic filtering is appropriate will use it. There are certain types of textures (atlases and lightmaps) where anisotropic filtering (especially at levels > 4x) will cause things like light bleeding, so you don't want to liberally apply anisotropic filtering to every type of texture. That's why I left some of the textures setup to use bi/trilinear filtering.

In addition to enabling anisotropic filtering across the board, this also disables sharpening on certain textures that I honestly think should never have been sharpened. For instance, the batmobile's normal maps were being sharpened and this made the interior look blocky and altogether like it was made of plastic in a lot of cinematic cutscenes. It's possible that was the art style they were going for, but I have my doubts.


---


Shadow map resolution scales with render resolution, and this makes rendering at resolutions > 1080p a hell of a lot more expensive than they ought to be. I suggest the following changes to get acceptable performance at max settings when running at 1440p or 2160p (4K UHD):

BmSystemSettings.ini:

ShadowTexelsPerPixel=0.250000 ; Match shadow map resolution to 1080p when rendering at 4K
ShadowTexelsPerPixel=0.66666 ; Match shadow map resolution to 1080p when rendering at 1440p

To make the Batmobile more drivable, especially if you've enabled multiple pre-rendered frames in your driver:

[Engine.GameEngine]
; Latency goes through the roof on occasion, and this keeps the batmobile from speeding up and slowing down during render lag spikes
MaxDeltaTime=0.0832222

[Engine.Engine]
...
; It's not clear exactly what this setting is (e.g. if it's a bitmask or integer), but it's tied to changes NVIDIA made when integrating their GameWorks stuff and seems to help Batmobile physics when the framerate's uncapped. _(This needs more testing)_
FrameRateLimitingSetting=15

--

IMPORTANT NOTE REGARDING PATCHES: It's also come to my attention that as the game is patched, these INI tweaks are going to be reset by the game. Moreover, if you set your INI files to read-only and then make chganges to graphics settings from the menu the game will usually reset your INI file everytime it starts.

To work around this problem, if you make changes from the user menu or if the game is patched, delete BmSystemSettings.ini run the game once and then apply changes to the new ini file.

----------

EDIT 4: The recent patch has made the need for tweaking the streaming texture manager unnecessary, but the other tweaks are still useful particularly the ones pertaining to texture filtering.

EDIT 5: Removed the original text, it's quoted in a few posts if you want the original settings... added details about patching.
126 Comments
Munuxi Nov 11 @ 5:03pm 
Just want to say that this guide helped me a ton. Holy crap, out of the box the game is clearly in need of tweaking to get it to work right.
Before the changes I was getting erratic frametimes and severe drops here and there, particularly while gliding or driving, no matter if I was at my native 1440p or using DSR to render at 4K, but now?

I can downsample from 4K at a locked 60FPS with flatlined frametimes. My current benchmark for performance is inside the Stagg Airships as that's where I was getting the hardest hit to performance and I'm rock solid and stable FPS and frametimes. It's only while driving the batmobile around that I will occasionally see a spike in the frametimes.

Bookmarking this one for future playthroughs!
Prime Dec 16, 2023 @ 9:17am 
Ok, so this guide still works today but I ran into a problem. Some of the effects are gone and the most crucial is the blue highlight thingy. Meaning, the blue counter icon is gone, detective vision doesnt highlight anything, batman's hologram comm doesn't show up, etc. Anyone know what I should change or revert lol
Sir_General Oct 23, 2023 @ 3:56am 
Well, quite a bit later - I decided to replay this and for reasons I couldn't understand I was getting 15 - 20 FPS, and that's running an NVidia RTX 3080 - but as soon as I set the limit up from 30 FPS to 60 FPS - I just got 60 FPS all the way, so I don't know what was going on there, but whatever was trying to limit my FPS was doing such a great job that it almost made it unplayable!
MbappePeruano34 Oct 4, 2022 @ 8:07pm 
i have some weird fps drops sometimes, goes all the way from 100 to 65, on my 75hz monitor these drops annoy me sometimes
43ukkz Jul 2, 2022 @ 10:57am 
hey if anyone sees this i need help with my batmanAK here my discord Archives.#4309
SPGaming2255 Mar 17, 2022 @ 5:24am 
did not work i think its just my 550 ti nivida
Kirohar Feb 21, 2021 @ 6:57pm 
I just want to thank Trippy Pyro. I'm still working on getting this thing to run right, but your comment has already made a world of difference. Thank you.
DarkSebyo Nov 25, 2019 @ 10:50am 
I have a gtx 1080 and a i7 3770k @ 4.4 and I have more fps in the bench if I put physx on the cpu.

physx on gtx 1080 : min60 avg90
physx on cpu : min82 avg122
The Trippy Pyro (MPH! MPH! MPH!) Apr 2, 2019 @ 2:13am 
this simple setting in bmengine.ini fixed EVERYTHING

[Engine.Engine]
...
bSmoothFrameRate=TRUE
MinSmoothedFrameRate=58
MaxSmoothedFrameRate=62

[Engine.Client]
...
; This is actually your refresh rate, set it to match your desktop's refresh rate and ignore what its name seems to imply
MinDesiredFrameRate=60.0



seriously. minsmoothframerates default is 22. no WONDER people were getting slideshows.
also mindesiredframerate was 35. changing both these settings to 60 fixed everything.

seriously 22 for minimum? the hell wb?!
1205033544 Nov 3, 2017 @ 6:05am 
good