If you are looking to gain more frames in Killing Floor 3, the in-game graphics menu will only get you so far. The community has shared several configuration files that strip out heavy post-processing effects like fog and bloom. I have gathered these settings here to help you get a smoother experience.
These edits remove the heavy visual clutter from the client while keeping the basic lighting and textures. You will likely notice better mouse response and smoother image movement once applied.
Locating the Config Folder
Open My Computer or File Explorer. Navigate to the following directory, but remember to replace “Your User Name” with your actual Windows account name:
C:\Users\Your User Name\AppData\Local\Nightfall\Saved\Config\WindowsClient\Cfg
Inside this folder, you will find the Engine.ini file. This is the file you need to edit.
Configuring Engine.ini (Part 1)
Open the file and add the following lines. This section focuses on disabling Lumen and reducing shadow and particle quality to lighten the load on your GPU.
[SystemSettings] r.Lumen.DiffuseIndirect.Allow=0 r.Lumen.Reflections.Allow=0 r.Lumen.Reflections=0 r.Nanite=1 r.ShadowQuality=0 r.MotionBlurQuality=0 r.DefaultFeature.MotionBlur=0 r.MotionBlur.Amount=0 r.MotionBlur.Max=0 r.SceneColorFringeQuality=0 r.SceneColorFringe.Max=0 r.DepthOfFieldQuality=0 r.FilmGrain=0 r.Tonemapper.GrainQuantization=0 r.Tonemapper.Sharpen=0.25 r.Tonemapper.Quality=0 Slate.bAllowThrottling=0 s.AsyncLoadingThreadEnabled=1 tick.AllowAsyncTickDispatch=1 tick.AllowAsyncTickCleanup=1 r.RHICmdBypass=0 r.RHICmdUseThread=1 r.RHICmdUseParallelAlgorithms=1 r.SkeletalMeshLODRadiusScale=0.85 a.ForceParallelAnimUpdate=1 r.GPUSkin.CopyBones.ISPC=1 FX.AllowAsyncTick=1 FX.BatchAsync=1 FX.EarlyScheduleAsync=1 r.EmitterSpawnRateScale=0.85 r.ParticleLODBias=1 fx.Niagara.SystemSimulation.TickBatchSize=6 fx.NiagaraBatcher.FreeBufferEarly=1 r.Decal.FadeDurationScale=0.75 r.Decal.Visibility.Multithreaded=1 [/script/engine.userinterfacesettings] ;ApplicationScale=0.85 ;ApplicationScale controls the size of the HUD. ;Remove the semicolon to enable it. TimerManager.DumpTimerLogSymbolNames=0 TimerManager.DumpTimerLogResolveVirtualFunctions=0 d3d12.VRAMTexturePoolDefrag.MaxCopySizePerFrame=16777216 r.AllowRHITriggerThread=false r.AllowRHITriggerThread=0 r.HairStrands.AsyncLoad=1 r.HairStrands.ClusterBuilder.MaxVoxelResolution=128 r.HairStrands.DeepShadow.Resolution=256 r.Bloom.AsyncCompute=1 r.Tonemapper.Quality=0 r.CookOutUnusedDetailModeComponents=1 core.EnsuresAreErrors=0 r.InstanceCulling.OcclusionCull=1 LevelSequence.InvalidBindingTagWarnings=false r.ForceDebugViewModes=2 D3D12.DRED11=0 D3D12.Aftermath=0 r.GPUCrashDebugging=0 r.GPUCrashDebugging.Aftermath.Markers=0 r.GPUCrashDebugging.Aftermath.Callstack=0 health.logHealthSnapshot=0 r.MaxVertexBytesAllocatedPerFrame=1047466000 r.ReadBuffer.MaxRenderingBytesAllocatedPerFrame=1036556000 gc.TimeBetweenPurgingPendingKillObjects=15.423 gc.LowMemory.TimeBetweenPurgingPendingKillObjects=10.4321 gc.NumRetriesBeforeForcingGC=1 gc.MergeGCClusters=1 gc.MinDesiredObjectsPerSubTask=8 GT.Allocator.Enable=True GT.Allocator.BudgetMs=2.0 r.RHICmdBufferWriteLocks=0 r.RHICmdCollectRHIThreadStatsFromHighLevel=0 r.RHICmdMaxOutstandingMemoryBeforeFlush=256 r.RHICmdDeferSkeletalLockAndFillToRHIThread=0 r.RHICmdMergeSmallDeferredContexts=0 rhi.TransientAllocator.BufferCacheSize=128 rhi.TransientAllocator.TextureCacheSize=256 rhi.TransientAllocator.MaximumHeapSize=512 LevelStreaming.UnloadNotVisibleLevelsWhenLowRAM=1 LevelStreaming.UnloadNotVisibleLevelsWhenLowRAMLodLevel=2 LevelStreaming.UnloadNotVisibleLevelsWhenLowRAMNormalizedPercentage=80.0 s.AsyncLoadingUseFullTimeLimit=1 r.ExpandAllOcclusionTestedBBoxesAmount=1000.0 r.CullInteriorExteriorProbes=1 r.AvaTiledLightProbeRendering=1 r.AvaTiledLightProbeOQ=1 a.Budget.BudgetMs=0.5 p.IterationsPerTimeSlice=1000 r.ParallelGatherShadowPrimitives=0 r.Shadow.CachedDirectionalMaxTilePerFrame=4 r.Shadow.UnbuiltWholeSceneDynamicShadowRadius=100.0 r.Shadow.Preshadows=1 r.FidelityFX.FSR3.UseRHI=0 r.FidelityFX.FSR3.UseNativeDX12=1 grass.MaxAsyncTasks=16 grass.fastMode.MaxAsyncTasks=16 grass.fastMode.MaxCreatePerFrame=10 grass.MinFramesToKeepGrass=80 grass.UseHaltonDistribution=1 fx.ScalabilityManParallelThreshold=1 fx.ScalabilityMaxUpdatesPerFrame=10 fx.Budget.RenderThread=0.5 fx.Budget.GameThread=0.5 fx.Budget.GameThreadConcurrent=0.5 r.SSS.Burley.EnableProfileIdCache=1 r.HighResScreenshotDelay=30 r.MotionBlur.Amount=0.5 r.Color.Mid=0.4 r.Bloom.HalfResolutionFFT=1 r.UseParallelGetDynamicMeshElementsTasks=1 ForageablePool.RecycleActors=1 LevelStreaming.EnableTilePausedStreaming=1 r.OccludedPrimitiveQueryBatchSize=32 r.Lumen.ScreenProbeGather.DownsampleFactor=32 [/script/windowstargetplatform.windowstargetsettings] D3D12.ZeroBufferSizeInMB=16 D3D12.InsertOuterOcclusionQuery=1 r.OcclusionCullParallelPrimFetch=1 p.UseResimCache=1 au.BakedAnalysisEnabled=0 a.ForceParallelAnimUpdate=1 au.EnableBinauralAudioForAllSpatialSounds=1 TaskGraph.PrintBroadcastWarnings=0 AttemptStuckThreadResuscitation=true r.AlsoUseSphereForFrustumCull=1
Configuring Engine.ini (Part 2)
This next block handles renderer settings, including Temporal AA, streaming pools, and anti-aliasing. Add these lines below the previous section.
[/script/engine.renderersettings] fx.SkipVectorVMBackendOptimizations=0 fx.GPUSimulationTextureSizeX=256 fx.GPUSimulationTextureSizeY=256 r.TemporalAAFilterSize=0.7 r.TemporalAACurrentFrameWeight=0.10 r.Tonemapper.Sharpen=0.7 r.TemporalAAHistoryRejection=1 r.TemporalAA.UseDisocclusion=1 LevelSequence.DefaultLockEngineToDisplayRate=1 r.Tonemapper.GrainQuantization=0 r.DontLimitOnBattery=1 r.D3D.ForceDXC=1 r.ForceAllCoresForShaderCompiling=1 r.Shadow.CacheWPOPrimitives=1 FX.BatchAsync=1 fx.EarlyScheduleAsync=1 GeometryCache.OffloadUpdate=1 r.GPUCrashDebugging.Aftermath.TrackAll=0 r.GPUCrash.DataDepth=0 r.ShaderLibrary.PrintExtendedStats=0 r.CompileShadersForDevelopment=0 r.Shaders.CompressionFormat.Oodle.Algo=1 r.EnableDebugSpam_GetObjectPositionAndScale=0 fx.Niagara.TaskPriority.AllowHighPriPerfTests=0 fx.MaxGPUParticlesSpawnedPerFrame=524288 fx.MaxNiagaraGPUParticlesSpawnPerFrame=1000000 fx.ParticlePerfStats.Enabled=false fx.EnableCircularAnimTrailDump=0 fx.Niagara.DebugDraw.Enabled=0 r.RHICmdBufferWriteLocks=0 RHI.SyncThreshold=999 fx.Niagara.GpuComputeDebug.DrawDebugEnabled=0 p.Chaos.VisualDebuggerEnable=0 r.Emitter.FastPoolEnable=1 r.FidelityFX.FI.Enabled=1 r.FidelityFX.FI.FrameGenerationEnabled=1 r.FidelityFX.FI.OverrideSwapChainDX12=1 r.FidelityFX.FSR3.ReactiveMask=1 r.FidelityFX.FSR3.ReactiveMaskForceOpaque=1 r.AntiAliasingMethod=2 r.TemporalAA.Quality=3 r.TemporalAA.Upsampling=1 r.TemporalAA.HistoryScreenPercentage=100 r.TemporalAAFilterSize=0.8 r.TemporalAA.Sharpen=0.5 r.ScreenPercentage=90 r.Streaming.PoolSize=27852 r.Streaming.MaxTempMemoryAllowed=4096 r.Streaming.Boost=3.0 r.Streaming.LimitPoolSizeToVRAM=1 r.Streaming.LODBias=0 r.Streaming.DiscardUnusedMips=1 r.Streaming.UseBackgroundThreadPool=1 r.Streaming.UseDeferredLock=1 r.Streaming.UsePerTextureBias=1 r.Nanite=0 r.Shadow.Virtual.Enable=1 r.Shadow.Virtual.MaxPhysicalPages=4096 r.Shadow.Virtual.ResolutionLodBias=-1 r.Shadow.CSM.MaxCascades=1 r.Shadow.DistanceScale=1.0 r.Shadow.DistanceScalePerObject=0.7 r.Shadow.MaxResolution=1024 r.ContactShadows=1 r.CapsuleShadow=0 r.BloomQuality=1 r.GpuIdleWait=0 r.GPUParticle.MaxCPUParticlesPerFrame=0 r.DynamicLightFadeDistance=0 r.Decals=0 r.ParticleLODBias=0 r.TranslucencyLightingVolumeDim=8 r.StaticMesh.EnableExternalOcclusionQueries=1 r.MaxOcclusionQueriesPerFrame=64 r.Translucency.GatherPerPixel=0 r.Translucency.EarlyZPass=0 r.AmbientOcclusion.Denoiser=1 r.DiffuseIndirect.Denoiser=1 r.Streaming.AmortizeCPUToGPUCopy=1 r.DumpGPU=0 r.DynamicRes.OperationMode=0 r.SceneColorFringeQuality=0 r.DOF.TemporalAAIntegration=0 r.DepthOfFieldQuality=0 r.PostProcessing.DisableAll=0 r.VolumetricFog=0 r.VolumetricFog.GridPixelSize=16 r.VolumetricFog.GridSizeZ=32 r.AllowStaticLighting=0 r.VSync=0 r.D3D12.UseAllowTearing=1 r.GraphicsThread.EnableBackgroundThreads=1 r.GraphicsThread.UseThreadedDestruction=1 r.RenderThread.EnableTaskGraphThread=1 r.RenderThread.Priority=2 r.Streaming.FullyLoadUsedTextures=0 r.Streaming.DropMips=1 r.MipMapLODBias=0 r.MaxAnisotropy=8 r.DetailMode=1 r.UseShaderCaching=1 r.UseShaderPredraw=1 r.PipelineStateCache.BackgroundBatchSize=16 r.PipelineStateCache.BatchTime=3 r.GTSyncType=1 r.SSR.Quality=1 r.GenerateMeshDistanceFields=0 r.Lumen.DiffuseIndirect.Allow=0 r.Lumen.Reflections.Allow=0 r.FastVRAM.ShadowCSM=1 r.FastVRAM.SSR=1 r.IO.UseDirectStorage=1 r.IO.VirtualTextures=1 r.Renderer.UseGPUInstancing=1 r.DontLimitOnBattery=1 r.UniformBufferPooling=1 r.FinishCurrentFrame=0 r.ShaderLibrary.PrintExtendedStats=0 r.ShaderDrawDebug=0 r.MotionBlurQuality=0 r.MotionBlurPause=1 r.InstanceCulling.OcclusionCull=1 r.ForceOcclusionQueryBatching=1 r.NumBufferedOcclusionQueries=4 r.Emitter.FastPoolEnable=1 r.Streaming.DefragDynamicBounds=1 r.Streaming.UseNewMetrics=1 r.Streaming.MaxMipLevelReduction=1 r.Streaming.MaxNumStaticComponentsProcessedPerFrame=100 r.MeshStreaming=1 r.MeshStreaming.LODBias=0 r.GPUSkin.LimitNumBones=64 r.WorldPartition.Streaming.Enabled=1 r.WorldPartition.Streaming.MinCellSize=4000 r.WorldPartition.Streaming.MaxLoadingDistance=100000 r.WorldPartition.RuntimeHashUpdate=0 r.VisibilityCulling=1 r.HLOD=0 r.OcclusionCullNonVisibleActors=1 r.ShaderCompression=1 r.ShaderDevelopmentMode=0 r.RDG.AsyncCompute=1 t.maxfps=0 r.EmitterSpawnRateScale=0 r.ParticleMinTimeBetweenTicks=99999 r.ShadowQuality=0 r.Shadow.MaxResolution=1 r.Shadow.MinResolution=1 r.Shadow.RadiusThreshold=0.1 r.Shadow.DistanceScale=0 r.Shadow.CSM.MaxCascades=0 r.AllowStaticLighting=0 r.DefaultFeature.AmbientOcclusion=0 r.DefaultFeature.AmbientOcclusionStaticFraction=0 r.DistanceFieldShadowing=0 r.DynamicShadows=0 r.LightFunctionQuality=0 r.Shadow.PerObject=0 r.bForceNoPrecomputedLighting=1 [/script/engine.animationsettings] ai.EnableBurst=1 a.SkipUpdateWhenNotRendered=1 a.DisableUpdateRateOptimizations=0 a.ParallelBlendPhysics=1 a.URO.Enable=1 a.URO.ForceLod=2 bAllowMultiThreadedAnimationUpdate=1 bOptimizeAnimBlueprintMemberVariableAccess=1 r.SkeletalMeshLODBias=0 r.SkeletalMesh.LODStreaming=1 r.AnimSequence.LODBias=1
Configuring Engine.ini (Part 3)
The final block covers streaming settings, shader compilation, and input settings. This part also disables telemetry and crash reporting logs to reduce background overhead.
[/script/engine.streamingsettings] r.GTSyncType=2 pakcache.UseNewTrim=1 wp.Runtime.UpdateStreaming.EnableOptimization=true r.OptimizedWPO=true r.ShaderPipelineCache.PreOptimizeEnabled=1 r.Shaders.RemoveUnusedInterpolators=1 r.UseShaderCaching=1 r.UseShaderPredraw=1 r.UseAsyncShaderPrecompilation=1 r.ShaderPipelineCache.Enabled=1 r.PSOWarmup.Enable=True r.PSOWarmup.Interrupt=False r.PSOPrecache.Resources=1 r.PSOWarmup.WarmupMaterials=True r.PSOPrecache.GlobalComputeShaders=1 r.PSOWarmup.GlobalComputeShaders=True r.Shaders.Optimize=1 r.ShaderCompiler.MaxJobCacheMemoryMB=8192 r.MaterialEnableNewHLSLGenerator=2 r.Streaming.AmortizeCPUToGPUCopy=1 r.VolumetricCloud.SkyAO.MaxResolution=256 r.VolumetricFog.LightFunction.Resolution=256 r.Streaming.MaxTempMemoryAllowed=120 r.UniformBufferPooling=1 r.D3D.RemoveUnusedInterpolators=1 r.TemporalAAPauseCorrect=1 r.Streaming.LimitPoolSizeToVRAM=1 r.Shadow.CachePreshadow=1 r.Shadow.CacheWholeSceneShadows=1 r.pso.CreateOnRHIThread=1 r.PSOPrecaching=1 r.AsyncPipelineCompile=1 r.AllowMultiThreadedShaderCreation=1 D3D12.AFRUseFramePacing=1 D3D12.AsyncDeferredDeletion=1 D3D12.SyncThreshold=999 D3D12.InsertOuterOcclusionQuery=1 D3D12.AllowPoolAllocateIndirectArgBuffers=1 RHI.SyncWithDWM=0 RHI.MaximumFrameLatency=3 D3D12.MaximumFrameLatency=3 fx.ParticlePerfStats.Enabled=false FX.MaxCPUParticlesPerEmitter=0 fx.EnableCircularAnimTrailDump=0 fx.Niagara.DebugDraw.Enabled=0 fx.Niagara.DisableAllSystems=1 FX.BatchAsyncBatchSize=8 FX.EarlyScheduleAsync=1 FX.BatchAsync=1 bEnableMultiCoreRendering=1 bAllowThreadedRendering=True UseAllCores=1 r.ShaderCompiler.NumBackgroundThreads=8 r.ShaderPipelineCache.Enabled=0 r.ShaderPipelineCache.SaveAfterPSOsLogged=1000 r.VRS.Enable=1 r.VRS.Quality=2 r.GPUScene.UploadEveryFrame=0 r.MaterialQualityLevel=1 r.TextureStreaming.MipTailReduction=1 r.RenderTargetPoolMin=512 p.Chaos.MaxCollisionPerFrame=0 p.Chaos.EnableThreadedPhysics=1 p.EnableCollisionCulling=1 au.LowPassFilterResonance=0.7 au.MaxChannels=32 au.StreamCaching=1 [/script/engine.engine] bAllowMultiThreadedShaderCompile=True bEnableMultiCoreRendering=True [/script/engine.inputsettings] RawMouseInputEnabled=Enabled RawMouseInputEnabled=1 bEnableMouseSmoothing=False bViewAccelerationEnabled=False net.AllowAsyncLoading=1 [CrashReportClient] bAgreeToCrashUpload=False bImplicitSend=False bPromptForRemoteDebugging=False bPromptForRemoteDebugOnEnsure=False [/script/winstrumentedprofilerssettings.wtelemetrysettings] bEnableTelemetry=False [FATHydraCrashHandler] LogCrashReportHydra=off LogCrashUploader=off [Core.Log] LogPluginManager=off LogOnlineIdentity=off LogOnlineSession=off LogMemory=off LogPakFile=off LogTemp=off LogTelemetry=off LogLinker=off LogOnline=off LogOnlineGame=off LogAnalytics=off LogConfig=off LogInteractiveProcess=off LogInput=off LogOnlineEntitlement=off LogOnlineEvents=off LogOnlineFriend=off LogOnlinePresence=off LogOnlineTitleFile=off LogOnlineUser=off Global=off [ScalabilitySettings] OverrideTriggerBenchmark=1 [/script/engine.localplayer] AspectRatioAxisConstraint=AspectRatio_MaintainYFOV [/script/engine.streamingsettings] s.LevelStreamingActorsUpdateTimeLimit=3.0 s.ForceGCAfterLevelStreamedOut=0 s.ProcessPrestreamingRequests=1 s.ContinuouslyIncrementalGCWhileLevelStreaming=1 s.LevelStreamingComponentsUnregistrationGranularity=5 s.LevelStreamingComponentsRegistrationGranularity=20 s.UseBackgroundLevelStreaming=True s.WorldPartitionStreaming=1 s.WorldPartitionStreaming.MaxCellLoadTime=0.05 [/script/engine.garbagecollectionsettings] gc.MultithreadedDestructionEnabled=1 gc.TimeBetweenPurgingPendingKillObjects=15 gc.AllowParallelGC=1 gc.NumRetriesBeforeForcingGC=1 gc.LowMemory.StreamingThreshold=1024 [ConsoleVariables] fx.MaxCPUParticlesPerEmitter=0 fx.MaxGPUParticlesSpawnedPerFrame=0 fx.BatchProcessParticleOcclusion=1 fx.Niagara.AllowGPUParticleReadback=0 fx.Niagara.AllowSpawnFromOtherSystems=0 fx.Niagara.ForceGPU=1 fx.Niagara.CullByMaxDistance=1 fx.Niagara.MaxDistanceCull=2000 fx.Niagara.CullByViewFrustum=1 fx.Niagara.TickWhenNotRendered=0 fx.Niagara.Scalability.MaxActiveSystems=50 fx.Niagara.Scalability.MaxActiveParticles=0 fx.Niagara.MaxGPUCollisionEventsPerFrame=0 fx.Niagara.LODDistanceScale=0.7 fx.ForceCPUParticlesToUseFixedBounds=1 fx.MaxCPUParticlesPerFrame=0 fx.MaxGPUParticlesPerFrame=0 fx.Niagara.DebugDraw.Enabled=0 fx.ParticlePerfStats.Enabled=0 r.ParticleEmitter.Enabled=0
Saving and Locking the File
Once you have added all three sections, save the Engine.ini file. To prevent the game from overwriting your changes, right-click the file, select Properties, and check the box for Read-only.
This will not turn the game into a space flight simulator, but the performance should feel much better. For some players, the reduced visual noise will also be easier on the eyes.
Conclusion
These settings strip away the heavy effects that drag down frame rates, leaving you with a cleaner and faster game. Try it out, and see how it feels in your next match.