Binds & Console

KF2 Tweaks and Improvements: Full INI Guide (FPS, Textures, Gore)

This is one of the long-running Killing Floor 2 tweak guides, originally written in 2015 and extended through 2017. It can be used either to improve FPS or to make the game look fancier: you just raise or lower values and enable or disable settings in a few ini files. Read each section fully before editing anything, since mistakes can break the config. For shorter lists see this ini tweaks page and the texture streaming tweaks.

Before you start

Do not change any DefaultXXX.ini file. They are reset on every KF2 update because the game thinks something was replaced, and Steam downloads them again. Edit only the user files in:

C:\Users\<your user>\Documents\My Games\KillingFloor2\KFGame\Config

If a command is missing or performance gets worse, delete the ini files and let the game regenerate them. This guide edits KFEngine.ini, KFGame.ini and KFSystemSettings.ini.

Unlocking the FPS cap

In KFEngine.ini search for bSmoothFrameRate and set:

bSmoothFrameRate=FALSE
MinSmoothedFrameRate=22
MaxSmoothedFrameRate=144
  • bSmoothFrameRate: set to FALSE to unlock.
  • MinSmoothedFrameRate: leave at the default.
  • MaxSmoothedFrameRate: your target maximum, for example 144 for a 144 Hz monitor.

These lines appear twice in the file; change both. There is a third SmoothFrameRate setting in KFGame.ini which you should change as well if the frame rate is still locked. (Another guide, with a different bSmoothFrameRate value, suggests keeping it TRUE for multiplayer; test which works for you.)

PhysX Flex (GeForce 970 and above only)

In KFSystemSettings.ini search for FlexInvisibleFramesBeforeSleep:

FlexInvisibleFramesBeforeSleep=60
FlexDistanceBeforeSleep=1500.000000
AllowSPHFluidMipmap=True
FlexRigidBodiesCollisionAtHighLevel=False
  • FlexInvisibleFramesBeforeSleep: how long invisible fluid or blood stays before disappearing.
  • FlexDistanceBeforeSleep: distance beyond which fluid stops moving for you.
  • AllowSPHFluidMipmap: allow mipmaps on fluid.
  • FlexRigidBodiesCollisionAtHighLevel: body parts collide with each other.

PhysX Flex was re-enabled on 14 April 2016 and marked Stable by the developers.

Audio quality and stutter

In KFEngine.ini, under [XAudio2.XAudio2Device]:

MaxChannels=32
CommonAudioPoolSize=0
  • MaxChannels: how many sounds can play at once. 32 works on almost every card; allowed values are 16, 32, 48, 64, 96 and 128 (the author's Asus Xonar Essence STX supports 128). If you hear weird noises, lower it.
  • CommonAudioPoolSize: memory reserved for always-resident sounds (32, 64, 128 or 256). Pre-buffering may fix audio stutter.

Shadow quality

Only use this if your average FPS is 80 or higher. In KFSystemSettings.ini search these entries one by one:

MaxShadowResolution=1024
MaxWholeSceneDominantShadowResolution=1280
UseHighQualityReflections=False
bEnableForegroundShadowsOnWorld=False
bEnableForegroundSelfShadowing=False
MaxDrawDistanceScale=1.0
MinShadowResolution=64
MinPreShadowResolution=24
MobileShadowTextureResolution=1280
ShadowFadeResolution=64
PreShadowFadeResolution=16
UnbuiltNumWholeSceneDynamicShadowCascades=9
ShadowFadeExponent=0.5
WholeSceneShadowCutoffDistance=1400
WholeSceneShadowFadeOutDistance=1200
GlobalShadowDistanceScale=1.5

Your original values may differ. bEnableForegroundShadowsOnWorld is not recommended (it only shows your arms and weapon), while bEnableForegroundSelfShadowing renders shadows on your arms, hands and weapon. Credit for some of the extra shadow commands goes to Dobes.

Reflection quality

Again only for an average FPS of 80 or more. In KFEngine.ini search ImageReflectionTextureSize and set a larger value such as 1024 up to 4096.

Texture quality

Only with 80+ FPS. In KFSystemSettings.ini, near the top, find the texture group lines (around lines 181 to 207 and 247 to 254 in Notepad++, depending on your file). For every line containing MaxLODSize=XXXX, change the value to 4096.

Texture group lines in KFSystemSettings.ini, first block First block of texture lines (about lines 181 to 207).

Texture group lines in KFSystemSettings.ini, second block Second block (about lines 247 to 254).

Note that TEXTUREGROUP_ProcBuilding_Face and TEXTUREGROUP_ProcBuilding_LightMap are bound to MaxProcBuildingLODColorTextureSize and MaxProcBuildingLODLightingTextureSize in KFEngine.ini, so keep those sizes the same as the values you set in KFSystemSettings.ini.

For higher quality models and particles, in KFSystemSettings.ini change:

SkeletalMeshLODBias=0   ->  -5
ParticleLODBias=0       ->  -5

and in KFGame.ini change MeshLODRange=0 to -5 to see high-quality models further away.

Improving texture streaming

Unlike advice to disable texture streaming, this guide keeps it on and improves it. In KFEngine.ini, in the TextureStreaming section:

PoolSize=3072
MemoryMargin=768
  • PoolSize: your GPU VRAM in MB.
  • MemoryMargin: memory reserved for incoming textures, about 10 to 20 percent of VRAM.

Suggested pairs: 1 GB = 1024 / 128, 2 GB = 2048 / 256, 3 GB = 3072 / 768.

If textures pop in, make streaming more aggressive:

MipFadeInSpeed0=0.2
MipFadeOutSpeed0=0.1
MipFadeInSpeed1=1.0
MipFadeOutSpeed1=0.5

Speeds 0 are for first-person mode, speeds 1 for spectating or when dead. Lowering them to 0.0 breaks streaming. For pop-in with SLI (tested by the author with two GTX 970), also set in MemoryPools:

FLightPrimitiveInteractionInitialBlockSize=2048
FModShadowPrimitiveInteractionInitialBlockSize=2048

These two values should be about 10 to 20 percent of your RAM. If you disabled texture streaming earlier, set bUseTextureStreaming back to True.

Disabling texture streaming (at your own risk)

Some say it helps and some say it makes things worse. In KFEngine.ini set to False: bUseTextureStreaming, bUseBackgroundLevelStreaming (also present in KFGame.ini), AllowStreamingLightmaps, UsePriorityStreaming, UseDynamicStreaming. Make sure you have a high-end GPU with at least 6 GB of VRAM; if it does not work, switch them back to True.

More gore and dead bodies

Do not set the values too high or the game may crash. In KFGame.ini find [KFGame.KFGoreManager] and adjust:

SettingMeaning
MaxImpactEffectDecalsMaximum impact decals on objects (bullet holes, melee cuts)
GoreFXLifetimeMultiplierHow long gibs and gore stay
BodyWoundDecalLifetimeLifetime of bullet impacts and holes
BloodSplatterLifetimeLifetime of splatters on ground and walls
BloodPoolLifetimeLifetime of blood pools
GibletLifetimeTime before giblets vanish
MaxBodyWoundDecalsWound decals applied to enemies
MaxBloodSplatterDecalsDecals per splatter
MaxBloodPoolDecalsBlood pools at once
BloodSplatSize / BloodPoolSizeSizes (do not set too high)
MaxDeadBodiesMaximum ragdolls; they have no timer, only this cap
MaxBloodEffectsMaximum blood effects
MaxGoreEffectsMaximum severed body parts before they vanish
AllowBloodSplatterDecals / bAllowBloodSplatterDecalsExtra non-permanent splatters
PersistentSplatTraceLengthLength of splats
MaxPersistentSplatsPerFramePermanent splats per frame

The KFGoreManager block The gore settings in KFGame.ini.

To keep decals longer, change DecalLifeSpan=10.0 under [Engine.DecalManager] in KFGame.ini (seconds).

Quake-like field of view

In KFEngine.ini, under [Engine.LocalPlayer], change AspectRatioAxisConstraint=AspectRatio_MaintainXFOV to AspectRatio_MaintainYFOV. This switches the FOV from Vert- to Hor+. On 1920x1080, a 90 degree horizontal FOV gives roughly 59 degrees vertical in Vert- mode and 106 degrees vertical in Hor+, against 74 degrees on a 4:3 screen. The view becomes wider with a slight fisheye at the edges, so it is optional. See also the short FOV guide.

Diagram of Vert- and Hor+ field of view Vert- versus Hor+ explained.

Vert- screenshot, view one Vert- setting.

Vert- screenshot, view two Vert- setting, second view.

Hor+ screenshot, view one Hor+ setting.

Hor+ screenshot, view two Hor+ setting, second view.

Skip intro movies

Right-click Killing Floor 2 in the Steam library, open Properties, press Set Launch Options and enter -nostartupmovies.

Submitted fixes

  • Texture pop-up: unlock the frame rate and turn VSync off in game. This especially affected SLI and Crossfire setups.
  • DxTory crash on startup (version 2.0.130 and up): in the Advanced tab, under Hook Option, tick Delay Hook and set about 7 seconds or more. This lets the game start before the FPS counter hooks in. It fixes most startup crashes with DxTory but not if SweetFX or ReShade is running.

DxTory Delay Hook option The Delay Hook setting in DxTory.

Update history

  • 02/09/2015: Incinerate N Detonate update, PhysX Flex settings added.
  • 29/03/2016: PhysX Flex update, DxTory info, SLI and Crossfire texture pop-up tip.
  • 08/05/2016: PhysX Flex tweaks re-added and more content.
  • 25/08/2016: section on noteworthy user guides.
  • 05/01/2017: more commands, including more texture quality entries.

FAQ

Which files does this guide edit?
Only the user copies in Documents\My Games\KillingFloor2\KFGame\Config: KFEngine.ini, KFGame.ini and KFSystemSettings.ini. The DefaultXXX.ini files are never touched.
Why not edit the Default ini files?
They get reset on every game update, and keeping your changes in the user files makes it easy to revert: delete them and Steam regenerates the defaults.
Should I disable texture streaming?
The author prefers to keep it on and improve it. Disabling it entirely is at your own risk and recommended only for GPUs with at least 6 GB of VRAM.