Here it is:
Spoiler
;---------------------------------------------------------------------------------------------------------------------
; MrVaad MWO Config v0.97
;
; Values in brackets are default MWO values (with HIGH settings selected in MWO)
; Variables without assigned values are important ones. You can keep them to check their value in the logs (in case they get locked/disabled)
;
; Sometimes, you'll see comments i picked or made by looking at the lumberyard code (the amazon engine derivated from the cryengine)
; Some variables will only work after loading a level
;
; I recommend to stay in FULLSCREEN WINDOWED mode : Fullscreen mode behave very strangely with framerate and CPU usage (a lot higher usage on my PC)
; I recommend to keep windows GAME MODE ENABLED : if disabled, it introduce some slight permanent stutters (but you can disable the game bar)
;
;---------------------------------------------------------------------------------------------------------------------
;Uncomment to generate documentation (HTML) and current values for all variables (in consolecommandsandvars.txt file)
;DumpCommandsVar
;---------------------------------------------------------------------------
; EFFECTS
;[1] Can't find what uses THIS reflection effect type in the game (no, it's not the glass buildings)
r_Reflections
;[3] 0 (terrain only), 1 (terrain + particles), 2 (terrain + particles + brushes), 3 (everything)
; if r_ReflectionsQuality >= 4 reflections gets anisotropic filtering
r_ReflectionsQuality=0
;[1] Refraction is used for glass and other similar materials, keep enabled, it does not seem used much.
r_Refraction
;[0] Enables per object and camera motion blur. 0: Disable Motion Blur 1: camera motion blur 2: camera and object motion blur
r_MotionBlur=0
;[2] 0: disabled. 1:enabled. 2: hdr time of day enabled
; does not seem to work that well with 1.
r_DepthOfField=0
;[0] 1:Enable if you use DepthOfField. It could improve performance when using DepthOfField -> NEEDS PERFORMANCE TESTS
r_DepthOfFieldStencilPrepass = 1
; SSAO and SSDO are very perf hungry. Visual difference is very small in MWO
; http://www.tweakguid...Crysis3_15.html for SSAO/SSDO examples (see Shadows)
; SSAO 3 and 4 seem the less GPU intensive and not much in visual difference so far.
; With SSAO quality=2, i have the following GPU usage (my gpu can go from 1000Mhz to 1911Mhz) :
; RIVER CITY - SSAO0:37% SSAO1:55% SSAO2:55% SSAO3:45% SSAO4:45% SSAO5:50% SSDO1:50% SSDO2:51% (GPU auto power, freq=1126Mhz)
; HIBERNAL RIFT - SSAO0:40% SSAO1:62% SSAO2:62% SSAO3:50% SSAO4:50% SSAO5:54% SSDO1:52% SSDO2:53% (GPU auto power, freq=1126Mhz)
; RIVER CITY 2nd- SSAO0:30% SSAO1: % SSAO2: % SSAO3:35% SSAO4: % SSAO5: % SSDO1: % SSDO2: % (GPU max power, freq=1607Mhz)
r_SSAO=0
r_ssdo=0
;[1] Global Illumination does not seem to work. Disabled, or Enabled with a few maxed parameters, i see no differences.
; example of GI with CryEngine 3
e_GI=0
;[2] Color correction is a post processing effect that takes a frame rendered by the Engine and changes the appearance of colors in various ways (see https://docs.cryengi...2/Color+Grading )
; Dont' disable, some maps assets are done with this feature in mind. They can look very dark or black if disabled.
r_ColorGrading
;[1] You can disable sun shafts to gain %GPU (1-2% on a 1080) or if you don't like sun rays.
r_sunshafts = 0
;---------------------------------------------------------------------------
; OBJECTS
;
; [1] This makes STATIC objects dissolve instead of instantly disappearing.
e_Dissolve=0
; Objects will have effects applied to them depending on the min e_ObjQuality specified for each of those effect (minspec)
; Does not impact textures or geometry. I prefer to set max quality and disable effects I don't want
; Light entities have a minspec, does it mean some lights can be disabled depending on this value ?
e_ObjQuality = 4
; [1] Will merge SubOjects of a STATIC object (Not sure if MWO has many objects using sub-objects)
e_StatObjMerge
;[500] e_StatObjMergeMaxTrisPerDrawCall. This value cap the number of triangles that will be merged from subOjects
;[1] Load and use LOD models for static geometry. Allows to adjust default lod distance settings with e_LodRatio
e_Lods
; e_LodRatio : 0 to 255
; Artists set a distance for each 3D object to switch to the next lower detail (Lod0 -> Lod1 -> Lod2 etc).
; In the Default Settings, LodRatio goes from 5 (low) to 20 (very high) so artists often set their object distances in accordance with that).
e_LodRatio=10
;[6]e_LodCompMaxSize - Affects LOD selection for big objects, Lower values force the lower detail LODs to load sooner (ie LODX -> LODX+1)
;
; MAGIC CRYTEK Formula : resultLod = (int)(fDistance * (fLodRatioNorm * fLodRatioNorm) / (max(frameLodInfo.fLodRatio * min(fRadius, e_LodCompMaxSize), 0.001f)));
; fLodRatioNorm is lodratio * 0.01
;
; In short, formula uses minimum between bounding box radius and e_LodCompMaxSize.
; So, in the formula determining the LOD to use, the size of the object cannot exceed e_LodCompMaxSize
e_LodCompMaxSize=10
; [1] Makes the engine evaluate each LOD for an object. If triangle number is not reduced or materials number not reduced, or triangles number not superior to e_LodMinTtris, Engine won't load the LOD
; This improves the look at no cost (Remember that triangle cost can skyrocket if mesh is under 300 triangles, for many cards, especially low end and integrated ones)
e_LodsForceUse=0
;[300]e_LodMinTtris - LODs with less triangles will not be used - LOCKED
; [-1] Controls dynamic LOD system for textures used in materials. Could be be creating lower textures from the original ones, relative to the distance ? (but i can't see any visual/perf differences)
; IT DOES NOT AFFECT THE MAIN TEXTURES (ONLY UNDERNEATH MATERIAL TEXTURES)
r_TextureLodDistanceRatio
; Cannot go under 40. but can be changed
e_ViewDistRatioVegetation
;---------------------------------------------------------------------------
; VEGETATION
e_VegetationSprites = 1
;[1.5]
e_VegetationSpritesDistanceRatio = 0.5
;[8]
e_VegetationSpritesMinDistance = 4
;[64]
r_VegetationSpritesTexRes = 256
e_VegetationBending = 0
e_VegetationAlphaBlend = 0
; e_VegetationMinSize = 16 LOCKED
e_ProcVegetation
e_ProcVegetationMaxSectorsInCache = 64
;---------------------------------------------------------------------------
; TERRAIN
;[1] e_TerrainAo (see https://docs.cryengi...bient+Occlusion )
; Terrain AO influence light on objects near the ground, but terrain must be generated with "Calculate Terrain Sky Accessibility " checked
; i'm not convinced MWO had his terrain generated with this option
; can't see a noticeable difference in visuals, enabled or disabled
e_TerrainAo = 0
;[7] r_TerrainAO. 7=Activate terrain AO deferred passes
r_TerrainAO = 0
; [2] For each terrain sector, Engine loops through all the LOD's above 0 and computes the maximum difference in meters between LOD N and LOD 0
; Then when displaying a terrain sector, look at each Lod, if this sector's MaxDiff < allowedError, use LOD else try the lower better lod
; allowedError is computed from terrainlodratio (which is locked), distanceToCamera and fov (bigger fov lower the details ?)
;
; BUT IF THE SECTOR HAS A HOLE, this number is the min Z diff that will be stored for each terrain lod sector (unless a bigger Z delta is found when checking the lod)
; i don't think i've seen holes in MWO (see https://docs.cryengi...in-TheHolesTool)
e_TerrainLodRatioHolesMin = 0
; cost 20% more drawcalls from 1 to 0.5. 1 seems too detailed, 4-5 makes less poppins than 1. Over 5 is too visible.
; This controls the base texture of the terrain (on screen what you see is the detailed texture which is over this one. This texture only sets a base color)
; If settings is too low, base texture will be too detailed for the main texture over it (bad look) and if it's too high, you will see big square changing colors under the main texture
e_TerrainTextureLodRatio = 4
;[2048] Each map can apply a different ratio to this settings ("m_fTerrainDetailMaterialsViewDistRatio" in the code or "DetailLayersViewDistRatio" in XML files)
; This is the distance where the detailed texture will appear on top of your base terrain texture (from e_TerrainTextureLodRatio)
e_TerrainDetailMaterialsViewDistXY = 2048
e_TerrainDetailMaterialsViewDistZ = 256
e_TerrainDetailMaterialsZAngle
; Distance used for per-pixel detail layers blending. Can't see a difference when changing the value
r_DetailDistance = 10
;---------------------------------------------------------------------------
; WATER
; If 1, render fog and ocean at the same time.
; -> Don't render fog with ocean as i have not seen fog over water in MWO (this removes the fog mesh over the water)
; TEST IN SOLARIS CITY !!!
e_WaterOcean=2
; Already 0 if MWO settings for environment is HIGH or lower
r_WaterTessellationHW = 0
; if r_WaterTessellationHW==0 and m_bOceanFFT!=0 -> TessellationAmount is forced to 200.
; if you are starved for CPU, set to 0 but this should not be needed, formula is not very CPU intensive
e_WaterOceanFFT = 0
; e_WaterTessellationAmount is multiplied by 20 compared to the e_WaterTessellationAmountX and Y values used directly
; e_WaterTessellationAmount is replaced IF e_WaterTessellationAmountX and e_WaterTessellationAmountY are not 0
; which is why water low and medium are the same (they set e_WaterTessellationAmount to 1 but keep the two others to 10)
e_WaterTessellationAmount
e_WaterTessellationAmountX
e_WaterTessellationAmountY
;[1] Enabled by default
r_WaterReflections
; if r_WaterReflectionsQuality>=4, reflections gets anisotropic filtering and resolution is half instead of a quarter of original
r_WaterReflectionsQuality=0
r_WaterCaustics = 0
; only rendered when underwater, disable it ?
r_WaterGodRays = 0
;[10]e_WaterTessellationSwathWidth. Used if e_WaterOceanFFT=0 and r_WaterTessellationHW=0. If the value is negative, the triangle mesh generates normally. If the value is positive, the value determines the length of triangle strips used in the mesh.
;[2] q_ShaderWater. 1 disabled ocean shores animation
;[0.1] Controls how often per second the images on water are updated (like reflections)
r_WaterUpdateFactor= 0.2
;---------------------------------------------------------------------------
; PARTICLES (see CParticleManager::Update())
; 2 seems too much when a lot of smokes are around (missile launch, vents, ground smokes). 0 is not very good, particles go through buildings/objects/terrain
; MWO sets 2 for every settings. Compared to cryengine defaults which sets 2 for HIGH and VERY HIGH
e_ParticlesObjectCollisions=1
; 2 removes smoke when launching missiles, this seems the only way to solve that FPS monster right now
; Other options don't impact this effect enough and destroy/degrade all particles effects
; Real solution is editing particle effect which works really well but its forbidden by PGI
; Particle quality only determine if an effect is drawn or not (each effect has a min quality set by the artist)
; DO NOT SET TO 0. Else it will use your "System specifications" selected in MWO (not sure what is used when using custom settings)
e_ParticlesQuality=2
;[0.004] Particles with transparency under this value will disappear. Use 0.19?
e_ParticlesMinDrawAlpha
;[1] Apply global illumination to appropriate particle effects. Not sure if it needs to be disabled if GI is already disabled
e_ParticlesGI = 0
;[1] 1 activates softs particles (intersection example http://cdn.wolfire.c...iclecompare.jpg)
r_UseSoftParticles = 0
e_ParticlesSoftIntersect=2
; 0 if you selected particles and shadows on HIGH or lower
e_ParticlesMotionBlur
e_ParticlesShadows
;[1] Multiplier to particles count for ONE emitter.
e_ParticlesLod = 0.75
;---------------------------------------------------------------------------
; DECALS
; Deffered is a rendering MODE in the engine
; Mech decals do not seem deferred even with the "force" options
;[1] e_DecalsForceDeferred. 1 - force to convert all decals to use deferred ones
; Crytek manual says that decals set as FLAT mode (decals on flat surfaces ?) are cheaper than deferred. Reading the code, this variable forces ALL decals to deferred including FLAT ones.
; "Deferred rendering is faster than the old rendering system but still slower than "Planar" Projection Type. That means keep as many Decals as possible in the "Planar" mode, especially if you plan a production for console release."
e_DecalsForceDeferred = 0
;[1] 1 - switch all STATIC non-planar decals placed by level designer to deferred
e_DecalsDefferedStatic
;[1] Keep enabled else some decals will appeared as full squares instead of being clipped by the geometry they are on (And again, this is not MECH decals)
e_DecalsClip
;[1] I think it should be 0. And after some testing, i can confirm shooting a laser, without moving your weapon, spawns one decal instead of many (same thing with feet decals on ground (dust, snow) ).
; If zero - new decals will not be spawned if the distance to nearest decals less than X
; if not zero, decals will be spawned everytime, no overlapping test is done
e_DecalsOverlapping = 0
;---------------------------------------------------------------------------
; COVERAGE BUFFER AND OCLLUSION
; this section is very complex, many variables can disable others
; (lumberyard code: occlusion is mainly in CCullThread)
;[1] if coverage buffer == 2, objects tagged as outdoor only (some vegetation and static decal/road ) won't be displayed if a sector sets rendering mode as indoor (does MWO use this ???)
e_CoverageBuffer = 1
;[64] 128 is CryEngine default value for every game (MWO used 64)
e_CoverageBufferResolution = 64
;[128] e_CoverageBufferCullIndividualBrushesMaxNodeSize. This should be 0 but is LOCKED at 128 by MWO. I've never seen a cryengine game set this to a value different from 0.
; In short, coverage buffer test is skipped for objects smaller than this (and this is the max size !), so those objects are drawn even if hidden ...
e_CoverageBufferCullIndividualBrushesMaxNodeSize
;[0] e_CoverageBufferTerrain. Could be usefull when using e_CoverageBuffer as terrain is used a lot in MWO.
e_CoverageBufferTerrain
;[0] 1 - occlusion test on render node level, 2 - occlusion test on render mesh level;
; e_StatObjBufferRenderTasks=1 introduces display bugs if e_CoverageBuffer==1
e_StatObjBufferRenderTasks = 0
;[0] Technique used for coverage buffer rendering. Does not seem to work well so far.
e_CoverageBufferReproj = 0
; [0.007] Expand is relative to object distance (ie final BBox expand = object distance * e_CoverageBufferAABBExpand).
; lowest value improves number of objects not drawn (but too low can introduce flickering)
e_CoverageBufferAABBExpand=0
;[0.05] e_CoverageBufferBias. Again, lowest value improves number of objects not drawn (but too low introduce flickering)
e_coveragebufferbias=0.03
;[1] This is the default cryengine value. Used in RenderObject and RenderDecalAndRoad.
; [IsBoxOccluded] (coverage buffer) is called FROM 0m TO (MaxViewDistance* e_OcclusionCullingViewDistRatio ) meters. After that, uses the object tree.
; [IsBoxOccluded] needs e_OcclusionVolumes or e_CoverageBuffer enabled (ie =1) else ALWAYS return FALSE
; see also CCullThread::TestAABB and CCullThread::CheckOcclusion
; Occlusion test is done is EntityDistance < (max object view distance * e_OcclusionCullingViewDistRatio)
; The ratio is using the max object view distance (set by the artist AND a LOCKED variable)
; So far, best results/perfs are obtained with 1
e_OcclusionCullingViewDistRatio= 1
; e_CoverageBufferCullIndividualBrushesMaxNodeSize (in object tree occlusion tests)
; used in COctreeNode::RenderDecalsAndRoads | COctreeNode::RenderVegetations CObjManager::RenderVegetations | COctreeNode::RenderBrushes CObjManager::RenderBrush CObjManager::IsBoxOccluded
;[1] 0: No depth sorting 1: Sort by depth layers (default) 2: Sort by distance
; Does not seem to improve performance (coverage buffer is enough on its own)
r_ZPassDepthSorting = 0
; [0] 1 = async 2 = sync
; Used in FX_StartQuery. If 0 function exit without doing anything. Could be GPU Occlusion queries for some specific effects ?
; The cryengine manual says "Conditional Rendering : On most hardware this would not pay off but our PS3 renderer implementation can access data structures at a very low level and so the overhead is lower"
; Seems only 2 gives gains. It lowers GPU drawcalls but can cost 3% CPU. Keep disabled for now (especially with what the manual says)
r_ConditionalRendering = 0
;---------------------------------------------------------------------------
; THREADS
; As controlling the engines threads does not seem to work well (most of them seem locked), we focus on the job system and the physics enngine
; [1] the job system allows all cryengine's engines (physics, anim, particle, render etc) to start asynchronous jobs.
sys_job_system_enable
; sys_job_system_max_worker creates a MAXIMUM of worker threads equal to the number of LOGICAL CPU (see CThreadBackEnd::Init in lumberyard code)
; As 8 is the default value for PC, any CPU with more than 8 logical CPU should increase that value
; if you set 0, engine will use your number of logical CPU
; Engines will use what they need so you should set the maximum allowed by your hardware (ie 0 or your number of logical CPU which is the same thing)
sys_job_system_max_worker=0
; Some insights from the CryEngine manual :
; By default the physics runs in its own separate thread, and can have a customizable amount of additional worker threads.
; Each frame, CrySystem requests the physics to make a step with the current frame time, and the physics posts notifications when the results are ready.
; Note that if the physics cannot keep up with the main thread, it can take more than one main thread frame for the results to come back. Such situations, of course, should be avoided.
;[1] Set limit for threads created by the physics engine. This uses PHYSICAL CPU count as a limit (and not LOGICAL)
; If this variable is set to 1, p_num_threads is set to p_num_threads BUT is capped to (PHYSICAL CPU count - 1)
sys_limit_phys_thread_count=0
;[1] p_num_threads is capped to 4 (Physics engine does not seem to use threads from the job system, it creates its owns)
; 1 thread is for the for the physics engine itself. The other threads are for the physics engine own threads
p_num_threads
;---------------------------------------------------------------------------
; SHADERS - compiling and loading
; Here we enable asynchronous shader compilation and activation
; Remember that changing some settings in MWO can modify the needed shaders and so you will have some shader compilation occurring when you do
;[0] Lookup table should speed up the process of shader compilation/activation but
; Testing on a SSD ddrive, caustic valley loading goes from 7s to 11s -> keep disabled if you have an SSD (NEEDS TESTING FOR HDD)
r_ShadersUseInstanceLookUpTable=0
;[0] auto activate compilation if needed (when outdated shaders detected).
r_ShadersCompileAutoActivate=1
;[0] r_ShadersAsyncCompiling. 3 is not recommended as being in cachegen mode can disable some features
r_ShadersAsyncCompiling=1
r_ShadersAsyncActivation=0
; Min is 1 and max is 4 (set by the engine). The threads will be created/destroyed as needed by the engine
; Seems only used for async shader compilation (so when a new shader combination needs to be generated)
r_ShadersAsyncMaxThreads=4
;[1] only used if remote compiler is used
r_ShadersSubmitRequestline = 0
;---------------------------------------------------------------------------
; PRELOAD/PRECACHE
; Our goal is "Don't preload/precache everything", some options take a lot of time and VRAM (load unused textures/objects, compute unneeded shaders etc)
; Preload ALL particles from LevelParticles.xml
e_ParticlesPreload=0
; Preload ALL objects (CGF) from brushlist.txt in level.pak and resourcelist.txt
e_StatObjPreload=0
; These are the levels decals (not the mech ones !). Saves around 100-150mb VRAM, and lower the draw cost of decals ??
e_DecalsPreCreate=0
; Preload materials in decals
e_PreloadDecals=0
; Preload materials in objects
e_PreloadMaterials=0
; no need to preactivate as we have async activation/compilation (and most shaders will be activated while in the lobby)
r_ShadersPreactivate=0
r_TexturesWarmup=0
;---------------------------------------------------------------------------
; HUD/MENUS
; [0.033] 0.0166 is better for menus interaction in mechlab (it correspond to 60fps)
; Value is probably capped to the framerate. 0 does not seem better than 0.0166
gfx_inputevents_mouse_move_threshold = 0.0166
;[1]
sys_flash_curve_tess_error = 2
; This gives better perf and is activated in cryengine 3.4.5 by default.
; can cause display bugs on HUD for 21:9 monitor users (set to 0 if you have problems)
sys_flash_newstencilclear = 1
;---------------------------------------------------------------------------
; GENERAL
; [0] Keep audio at 100% when alt-tabbing (you can put a lower value to lower the sound)
s_NoFocusVolume=1
; [2] If you have SLI, Set to 1(enabled) or 2(auto) (if SLI is enabled, some features/optimisations are disabled)
r_MultiGPU=0
; [1] We don't use 3D stereo rendering, removes the error during startup in omicron.log
r_stereodevice=0
;[128] Solves a few cases of stuttering sounds (with sound mods mainly)
s_MaxChannels = 64
r_Batching
; [2] 0 - CPU friendly 1 - GPU friendly. 2-auto
; r_BatchType=1 and 2 will disable geometry instancing and use Z depth sorting. BatchType=0 can shave 30-50% of the total number of drawcalls (compared to 1 and 2)
; if r_BatchType=0 then m_bUseGPUFriendlyBatching = false
; if r_BatchType=2 then GPU limited detection is enabled
;
; [lumberyard code] On PC if we are GPU limited use z-pass distance sorting and disable instancing -> this means m_bUseGPUFriendlyBatching = TRUE
; From reading the code, if the engine waits for the GPU too many times, it forces m_bUseGPUFriendlyBatching to TRUE
;
; By using r_BatchType=0, we ensure that this cannot happen (it is used after the GPU limited test)
r_BatchType= 0
;[1] Material batching is only done one time after loading the level (PostLevel) but it's needed
r_MaterialsBatching
; Geometry instancing : Lower drawcalls but not much %GPU.
; Lumberyard code confirms my idea:
; RFT_HW_ATI => CRenderer::m_iGeomInstancingThreshold = 2; // seems to help in performance on ALL cards
; RFT_HW_NVIDIA => CRenderer::m_iGeomInstancingThreshold = 8;
; Others => CRenderer::m_iGeomInstancingThreshold = 7; // might be a good start - can be tweaked further
; I set the Threshold at 1. So the feature will activate if at least 2 objects are the same (i see a small gain from 2)
; This should be good for any cards
r_GeomInstancing = 1
r_GeomInstancingThreshold=1
;[80] If you set this too low and have error log verbosity set to 3 or 4
; you'll see error messages "Error: Dynamic textures thrashing (try to increase texture pool size - r_DynTexMaxSize)"
r_DynTexMaxSize = 160
; Let the engine decide where anisotropy is needed (unless you forced 16x through your drivers which will make these variables not used)
r_TexMinAnisotropy = 4
r_TexMaxAnisotropy = 16
r_Texture_Anisotropic_Level = 8
gp_mech_showfps=1
Graphics.itemskins=0
;---------------------------------------------------------------------------------------------------------------------
; MrVaad MWO Config v0.97
;
; Values in brackets are default MWO values (with HIGH settings selected in MWO)
; Variables without assigned values are important ones. You can keep them to check their value in the logs (in case they get locked/disabled)
;
; Sometimes, you'll see comments i picked or made by looking at the lumberyard code (the amazon engine derivated from the cryengine)
; Some variables will only work after loading a level
;
; I recommend to stay in FULLSCREEN WINDOWED mode : Fullscreen mode behave very strangely with framerate and CPU usage (a lot higher usage on my PC)
; I recommend to keep windows GAME MODE ENABLED : if disabled, it introduce some slight permanent stutters (but you can disable the game bar)
;
;---------------------------------------------------------------------------------------------------------------------
;Uncomment to generate documentation (HTML) and current values for all variables (in consolecommandsandvars.txt file)
;DumpCommandsVar
;---------------------------------------------------------------------------
; EFFECTS
;[1] Can't find what uses THIS reflection effect type in the game (no, it's not the glass buildings)
r_Reflections
;[3] 0 (terrain only), 1 (terrain + particles), 2 (terrain + particles + brushes), 3 (everything)
; if r_ReflectionsQuality >= 4 reflections gets anisotropic filtering
r_ReflectionsQuality=0
;[1] Refraction is used for glass and other similar materials, keep enabled, it does not seem used much.
r_Refraction
;[0] Enables per object and camera motion blur. 0: Disable Motion Blur 1: camera motion blur 2: camera and object motion blur
r_MotionBlur=0
;[2] 0: disabled. 1:enabled. 2: hdr time of day enabled
; does not seem to work that well with 1.
r_DepthOfField=0
;[0] 1:Enable if you use DepthOfField. It could improve performance when using DepthOfField -> NEEDS PERFORMANCE TESTS
r_DepthOfFieldStencilPrepass = 1
; SSAO and SSDO are very perf hungry. Visual difference is very small in MWO
; http://www.tweakguid...Crysis3_15.html for SSAO/SSDO examples (see Shadows)
; SSAO 3 and 4 seem the less GPU intensive and not much in visual difference so far.
; With SSAO quality=2, i have the following GPU usage (my gpu can go from 1000Mhz to 1911Mhz) :
; RIVER CITY - SSAO0:37% SSAO1:55% SSAO2:55% SSAO3:45% SSAO4:45% SSAO5:50% SSDO1:50% SSDO2:51% (GPU auto power, freq=1126Mhz)
; HIBERNAL RIFT - SSAO0:40% SSAO1:62% SSAO2:62% SSAO3:50% SSAO4:50% SSAO5:54% SSDO1:52% SSDO2:53% (GPU auto power, freq=1126Mhz)
; RIVER CITY 2nd- SSAO0:30% SSAO1: % SSAO2: % SSAO3:35% SSAO4: % SSAO5: % SSDO1: % SSDO2: % (GPU max power, freq=1607Mhz)
r_SSAO=0
r_ssdo=0
;[1] Global Illumination does not seem to work. Disabled, or Enabled with a few maxed parameters, i see no differences.
; example of GI with CryEngine 3
e_GI=0
;[2] Color correction is a post processing effect that takes a frame rendered by the Engine and changes the appearance of colors in various ways (see https://docs.cryengi...2/Color+Grading )
; Dont' disable, some maps assets are done with this feature in mind. They can look very dark or black if disabled.
r_ColorGrading
;[1] You can disable sun shafts to gain %GPU (1-2% on a 1080) or if you don't like sun rays.
r_sunshafts = 0
;---------------------------------------------------------------------------
; OBJECTS
;
; [1] This makes STATIC objects dissolve instead of instantly disappearing.
e_Dissolve=0
; Objects will have effects applied to them depending on the min e_ObjQuality specified for each of those effect (minspec)
; Does not impact textures or geometry. I prefer to set max quality and disable effects I don't want
; Light entities have a minspec, does it mean some lights can be disabled depending on this value ?
e_ObjQuality = 4
; [1] Will merge SubOjects of a STATIC object (Not sure if MWO has many objects using sub-objects)
e_StatObjMerge
;[500] e_StatObjMergeMaxTrisPerDrawCall. This value cap the number of triangles that will be merged from subOjects
;[1] Load and use LOD models for static geometry. Allows to adjust default lod distance settings with e_LodRatio
e_Lods
; e_LodRatio : 0 to 255
; Artists set a distance for each 3D object to switch to the next lower detail (Lod0 -> Lod1 -> Lod2 etc).
; In the Default Settings, LodRatio goes from 5 (low) to 20 (very high) so artists often set their object distances in accordance with that).
e_LodRatio=10
;[6]e_LodCompMaxSize - Affects LOD selection for big objects, Lower values force the lower detail LODs to load sooner (ie LODX -> LODX+1)
;
; MAGIC CRYTEK Formula : resultLod = (int)(fDistance * (fLodRatioNorm * fLodRatioNorm) / (max(frameLodInfo.fLodRatio * min(fRadius, e_LodCompMaxSize), 0.001f)));
; fLodRatioNorm is lodratio * 0.01
;
; In short, formula uses minimum between bounding box radius and e_LodCompMaxSize.
; So, in the formula determining the LOD to use, the size of the object cannot exceed e_LodCompMaxSize
e_LodCompMaxSize=10
; [1] Makes the engine evaluate each LOD for an object. If triangle number is not reduced or materials number not reduced, or triangles number not superior to e_LodMinTtris, Engine won't load the LOD
; This improves the look at no cost (Remember that triangle cost can skyrocket if mesh is under 300 triangles, for many cards, especially low end and integrated ones)
e_LodsForceUse=0
;[300]e_LodMinTtris - LODs with less triangles will not be used - LOCKED
; [-1] Controls dynamic LOD system for textures used in materials. Could be be creating lower textures from the original ones, relative to the distance ? (but i can't see any visual/perf differences)
; IT DOES NOT AFFECT THE MAIN TEXTURES (ONLY UNDERNEATH MATERIAL TEXTURES)
r_TextureLodDistanceRatio
; Cannot go under 40. but can be changed
e_ViewDistRatioVegetation
;---------------------------------------------------------------------------
; VEGETATION
e_VegetationSprites = 1
;[1.5]
e_VegetationSpritesDistanceRatio = 0.5
;[8]
e_VegetationSpritesMinDistance = 4
;[64]
r_VegetationSpritesTexRes = 256
e_VegetationBending = 0
e_VegetationAlphaBlend = 0
; e_VegetationMinSize = 16 LOCKED
e_ProcVegetation
e_ProcVegetationMaxSectorsInCache = 64
;---------------------------------------------------------------------------
; TERRAIN
;[1] e_TerrainAo (see https://docs.cryengi...bient+Occlusion )
; Terrain AO influence light on objects near the ground, but terrain must be generated with "Calculate Terrain Sky Accessibility " checked
; i'm not convinced MWO had his terrain generated with this option
; can't see a noticeable difference in visuals, enabled or disabled
e_TerrainAo = 0
;[7] r_TerrainAO. 7=Activate terrain AO deferred passes
r_TerrainAO = 0
; [2] For each terrain sector, Engine loops through all the LOD's above 0 and computes the maximum difference in meters between LOD N and LOD 0
; Then when displaying a terrain sector, look at each Lod, if this sector's MaxDiff < allowedError, use LOD else try the lower better lod
; allowedError is computed from terrainlodratio (which is locked), distanceToCamera and fov (bigger fov lower the details ?)
;
; BUT IF THE SECTOR HAS A HOLE, this number is the min Z diff that will be stored for each terrain lod sector (unless a bigger Z delta is found when checking the lod)
; i don't think i've seen holes in MWO (see https://docs.cryengi...in-TheHolesTool)
e_TerrainLodRatioHolesMin = 0
; cost 20% more drawcalls from 1 to 0.5. 1 seems too detailed, 4-5 makes less poppins than 1. Over 5 is too visible.
; This controls the base texture of the terrain (on screen what you see is the detailed texture which is over this one. This texture only sets a base color)
; If settings is too low, base texture will be too detailed for the main texture over it (bad look) and if it's too high, you will see big square changing colors under the main texture
e_TerrainTextureLodRatio = 4
;[2048] Each map can apply a different ratio to this settings ("m_fTerrainDetailMaterialsViewDistRatio" in the code or "DetailLayersViewDistRatio" in XML files)
; This is the distance where the detailed texture will appear on top of your base terrain texture (from e_TerrainTextureLodRatio)
e_TerrainDetailMaterialsViewDistXY = 2048
e_TerrainDetailMaterialsViewDistZ = 256
e_TerrainDetailMaterialsZAngle
; Distance used for per-pixel detail layers blending. Can't see a difference when changing the value
r_DetailDistance = 10
;---------------------------------------------------------------------------
; WATER
; If 1, render fog and ocean at the same time.
; -> Don't render fog with ocean as i have not seen fog over water in MWO (this removes the fog mesh over the water)
; TEST IN SOLARIS CITY !!!
e_WaterOcean=2
; Already 0 if MWO settings for environment is HIGH or lower
r_WaterTessellationHW = 0
; if r_WaterTessellationHW==0 and m_bOceanFFT!=0 -> TessellationAmount is forced to 200.
; if you are starved for CPU, set to 0 but this should not be needed, formula is not very CPU intensive
e_WaterOceanFFT = 0
; e_WaterTessellationAmount is multiplied by 20 compared to the e_WaterTessellationAmountX and Y values used directly
; e_WaterTessellationAmount is replaced IF e_WaterTessellationAmountX and e_WaterTessellationAmountY are not 0
; which is why water low and medium are the same (they set e_WaterTessellationAmount to 1 but keep the two others to 10)
e_WaterTessellationAmount
e_WaterTessellationAmountX
e_WaterTessellationAmountY
;[1] Enabled by default
r_WaterReflections
; if r_WaterReflectionsQuality>=4, reflections gets anisotropic filtering and resolution is half instead of a quarter of original
r_WaterReflectionsQuality=0
r_WaterCaustics = 0
; only rendered when underwater, disable it ?
r_WaterGodRays = 0
;[10]e_WaterTessellationSwathWidth. Used if e_WaterOceanFFT=0 and r_WaterTessellationHW=0. If the value is negative, the triangle mesh generates normally. If the value is positive, the value determines the length of triangle strips used in the mesh.
;[2] q_ShaderWater. 1 disabled ocean shores animation
;[0.1] Controls how often per second the images on water are updated (like reflections)
r_WaterUpdateFactor= 0.2
;---------------------------------------------------------------------------
; PARTICLES (see CParticleManager::Update())
; 2 seems too much when a lot of smokes are around (missile launch, vents, ground smokes). 0 is not very good, particles go through buildings/objects/terrain
; MWO sets 2 for every settings. Compared to cryengine defaults which sets 2 for HIGH and VERY HIGH
e_ParticlesObjectCollisions=1
; 2 removes smoke when launching missiles, this seems the only way to solve that FPS monster right now
; Other options don't impact this effect enough and destroy/degrade all particles effects
; Real solution is editing particle effect which works really well but its forbidden by PGI
; Particle quality only determine if an effect is drawn or not (each effect has a min quality set by the artist)
; DO NOT SET TO 0. Else it will use your "System specifications" selected in MWO (not sure what is used when using custom settings)
e_ParticlesQuality=2
;[0.004] Particles with transparency under this value will disappear. Use 0.19?
e_ParticlesMinDrawAlpha
;[1] Apply global illumination to appropriate particle effects. Not sure if it needs to be disabled if GI is already disabled
e_ParticlesGI = 0
;[1] 1 activates softs particles (intersection example http://cdn.wolfire.c...iclecompare.jpg)
r_UseSoftParticles = 0
e_ParticlesSoftIntersect=2
; 0 if you selected particles and shadows on HIGH or lower
e_ParticlesMotionBlur
e_ParticlesShadows
;[1] Multiplier to particles count for ONE emitter.
e_ParticlesLod = 0.75
;---------------------------------------------------------------------------
; DECALS
; Deffered is a rendering MODE in the engine
; Mech decals do not seem deferred even with the "force" options
;[1] e_DecalsForceDeferred. 1 - force to convert all decals to use deferred ones
; Crytek manual says that decals set as FLAT mode (decals on flat surfaces ?) are cheaper than deferred. Reading the code, this variable forces ALL decals to deferred including FLAT ones.
; "Deferred rendering is faster than the old rendering system but still slower than "Planar" Projection Type. That means keep as many Decals as possible in the "Planar" mode, especially if you plan a production for console release."
e_DecalsForceDeferred = 0
;[1] 1 - switch all STATIC non-planar decals placed by level designer to deferred
e_DecalsDefferedStatic
;[1] Keep enabled else some decals will appeared as full squares instead of being clipped by the geometry they are on (And again, this is not MECH decals)
e_DecalsClip
;[1] I think it should be 0. And after some testing, i can confirm shooting a laser, without moving your weapon, spawns one decal instead of many (same thing with feet decals on ground (dust, snow) ).
; If zero - new decals will not be spawned if the distance to nearest decals less than X
; if not zero, decals will be spawned everytime, no overlapping test is done
e_DecalsOverlapping = 0
;---------------------------------------------------------------------------
; COVERAGE BUFFER AND OCLLUSION
; this section is very complex, many variables can disable others
; (lumberyard code: occlusion is mainly in CCullThread)
;[1] if coverage buffer == 2, objects tagged as outdoor only (some vegetation and static decal/road ) won't be displayed if a sector sets rendering mode as indoor (does MWO use this ???)
e_CoverageBuffer = 1
;[64] 128 is CryEngine default value for every game (MWO used 64)
e_CoverageBufferResolution = 64
;[128] e_CoverageBufferCullIndividualBrushesMaxNodeSize. This should be 0 but is LOCKED at 128 by MWO. I've never seen a cryengine game set this to a value different from 0.
; In short, coverage buffer test is skipped for objects smaller than this (and this is the max size !), so those objects are drawn even if hidden ...
e_CoverageBufferCullIndividualBrushesMaxNodeSize
;[0] e_CoverageBufferTerrain. Could be usefull when using e_CoverageBuffer as terrain is used a lot in MWO.
e_CoverageBufferTerrain
;[0] 1 - occlusion test on render node level, 2 - occlusion test on render mesh level;
; e_StatObjBufferRenderTasks=1 introduces display bugs if e_CoverageBuffer==1
e_StatObjBufferRenderTasks = 0
;[0] Technique used for coverage buffer rendering. Does not seem to work well so far.
e_CoverageBufferReproj = 0
; [0.007] Expand is relative to object distance (ie final BBox expand = object distance * e_CoverageBufferAABBExpand).
; lowest value improves number of objects not drawn (but too low can introduce flickering)
e_CoverageBufferAABBExpand=0
;[0.05] e_CoverageBufferBias. Again, lowest value improves number of objects not drawn (but too low introduce flickering)
e_coveragebufferbias=0.03
;[1] This is the default cryengine value. Used in RenderObject and RenderDecalAndRoad.
; [IsBoxOccluded] (coverage buffer) is called FROM 0m TO (MaxViewDistance* e_OcclusionCullingViewDistRatio ) meters. After that, uses the object tree.
; [IsBoxOccluded] needs e_OcclusionVolumes or e_CoverageBuffer enabled (ie =1) else ALWAYS return FALSE
; see also CCullThread::TestAABB and CCullThread::CheckOcclusion
; Occlusion test is done is EntityDistance < (max object view distance * e_OcclusionCullingViewDistRatio)
; The ratio is using the max object view distance (set by the artist AND a LOCKED variable)
; So far, best results/perfs are obtained with 1
e_OcclusionCullingViewDistRatio= 1
; e_CoverageBufferCullIndividualBrushesMaxNodeSize (in object tree occlusion tests)
; used in COctreeNode::RenderDecalsAndRoads | COctreeNode::RenderVegetations CObjManager::RenderVegetations | COctreeNode::RenderBrushes CObjManager::RenderBrush CObjManager::IsBoxOccluded
;[1] 0: No depth sorting 1: Sort by depth layers (default) 2: Sort by distance
; Does not seem to improve performance (coverage buffer is enough on its own)
r_ZPassDepthSorting = 0
; [0] 1 = async 2 = sync
; Used in FX_StartQuery. If 0 function exit without doing anything. Could be GPU Occlusion queries for some specific effects ?
; The cryengine manual says "Conditional Rendering : On most hardware this would not pay off but our PS3 renderer implementation can access data structures at a very low level and so the overhead is lower"
; Seems only 2 gives gains. It lowers GPU drawcalls but can cost 3% CPU. Keep disabled for now (especially with what the manual says)
r_ConditionalRendering = 0
;---------------------------------------------------------------------------
; THREADS
; As controlling the engines threads does not seem to work well (most of them seem locked), we focus on the job system and the physics enngine
; [1] the job system allows all cryengine's engines (physics, anim, particle, render etc) to start asynchronous jobs.
sys_job_system_enable
; sys_job_system_max_worker creates a MAXIMUM of worker threads equal to the number of LOGICAL CPU (see CThreadBackEnd::Init in lumberyard code)
; As 8 is the default value for PC, any CPU with more than 8 logical CPU should increase that value
; if you set 0, engine will use your number of logical CPU
; Engines will use what they need so you should set the maximum allowed by your hardware (ie 0 or your number of logical CPU which is the same thing)
sys_job_system_max_worker=0
; Some insights from the CryEngine manual :
; By default the physics runs in its own separate thread, and can have a customizable amount of additional worker threads.
; Each frame, CrySystem requests the physics to make a step with the current frame time, and the physics posts notifications when the results are ready.
; Note that if the physics cannot keep up with the main thread, it can take more than one main thread frame for the results to come back. Such situations, of course, should be avoided.
;[1] Set limit for threads created by the physics engine. This uses PHYSICAL CPU count as a limit (and not LOGICAL)
; If this variable is set to 1, p_num_threads is set to p_num_threads BUT is capped to (PHYSICAL CPU count - 1)
sys_limit_phys_thread_count=0
;[1] p_num_threads is capped to 4 (Physics engine does not seem to use threads from the job system, it creates its owns)
; 1 thread is for the for the physics engine itself. The other threads are for the physics engine own threads
p_num_threads
;---------------------------------------------------------------------------
; SHADERS - compiling and loading
; Here we enable asynchronous shader compilation and activation
; Remember that changing some settings in MWO can modify the needed shaders and so you will have some shader compilation occurring when you do
;[0] Lookup table should speed up the process of shader compilation/activation but
; Testing on a SSD ddrive, caustic valley loading goes from 7s to 11s -> keep disabled if you have an SSD (NEEDS TESTING FOR HDD)
r_ShadersUseInstanceLookUpTable=0
;[0] auto activate compilation if needed (when outdated shaders detected).
r_ShadersCompileAutoActivate=1
;[0] r_ShadersAsyncCompiling. 3 is not recommended as being in cachegen mode can disable some features
r_ShadersAsyncCompiling=1
r_ShadersAsyncActivation=0
; Min is 1 and max is 4 (set by the engine). The threads will be created/destroyed as needed by the engine
; Seems only used for async shader compilation (so when a new shader combination needs to be generated)
r_ShadersAsyncMaxThreads=4
;[1] only used if remote compiler is used
r_ShadersSubmitRequestline = 0
;---------------------------------------------------------------------------
; PRELOAD/PRECACHE
; Our goal is "Don't preload/precache everything", some options take a lot of time and VRAM (load unused textures/objects, compute unneeded shaders etc)
; Preload ALL particles from LevelParticles.xml
e_ParticlesPreload=0
; Preload ALL objects (CGF) from brushlist.txt in level.pak and resourcelist.txt
e_StatObjPreload=0
; These are the levels decals (not the mech ones !). Saves around 100-150mb VRAM, and lower the draw cost of decals ??
e_DecalsPreCreate=0
; Preload materials in decals
e_PreloadDecals=0
; Preload materials in objects
e_PreloadMaterials=0
; no need to preactivate as we have async activation/compilation (and most shaders will be activated while in the lobby)
r_ShadersPreactivate=0
r_TexturesWarmup=0
;---------------------------------------------------------------------------
; HUD/MENUS
; [0.033] 0.0166 is better for menus interaction in mechlab (it correspond to 60fps)
; Value is probably capped to the framerate. 0 does not seem better than 0.0166
gfx_inputevents_mouse_move_threshold = 0.0166
;[1]
sys_flash_curve_tess_error = 2
; This gives better perf and is activated in cryengine 3.4.5 by default.
; can cause display bugs on HUD for 21:9 monitor users (set to 0 if you have problems)
sys_flash_newstencilclear = 1
;---------------------------------------------------------------------------
; GENERAL
; [0] Keep audio at 100% when alt-tabbing (you can put a lower value to lower the sound)
s_NoFocusVolume=1
; [2] If you have SLI, Set to 1(enabled) or 2(auto) (if SLI is enabled, some features/optimisations are disabled)
r_MultiGPU=0
; [1] We don't use 3D stereo rendering, removes the error during startup in omicron.log
r_stereodevice=0
;[128] Solves a few cases of stuttering sounds (with sound mods mainly)
s_MaxChannels = 64
r_Batching
; [2] 0 - CPU friendly 1 - GPU friendly. 2-auto
; r_BatchType=1 and 2 will disable geometry instancing and use Z depth sorting. BatchType=0 can shave 30-50% of the total number of drawcalls (compared to 1 and 2)
; if r_BatchType=0 then m_bUseGPUFriendlyBatching = false
; if r_BatchType=2 then GPU limited detection is enabled
;
; [lumberyard code] On PC if we are GPU limited use z-pass distance sorting and disable instancing -> this means m_bUseGPUFriendlyBatching = TRUE
; From reading the code, if the engine waits for the GPU too many times, it forces m_bUseGPUFriendlyBatching to TRUE
;
; By using r_BatchType=0, we ensure that this cannot happen (it is used after the GPU limited test)
r_BatchType= 0
;[1] Material batching is only done one time after loading the level (PostLevel) but it's needed
r_MaterialsBatching
; Geometry instancing : Lower drawcalls but not much %GPU.
; Lumberyard code confirms my idea:
; RFT_HW_ATI => CRenderer::m_iGeomInstancingThreshold = 2; // seems to help in performance on ALL cards
; RFT_HW_NVIDIA => CRenderer::m_iGeomInstancingThreshold = 8;
; Others => CRenderer::m_iGeomInstancingThreshold = 7; // might be a good start - can be tweaked further
; I set the Threshold at 1. So the feature will activate if at least 2 objects are the same (i see a small gain from 2)
; This should be good for any cards
r_GeomInstancing = 1
r_GeomInstancingThreshold=1
;[80] If you set this too low and have error log verbosity set to 3 or 4
; you'll see error messages "Error: Dynamic textures thrashing (try to increase texture pool size - r_DynTexMaxSize)"
r_DynTexMaxSize = 160
; Let the engine decide where anisotropy is needed (unless you forced 16x through your drivers which will make these variables not used)
r_TexMinAnisotropy = 4
r_TexMaxAnisotropy = 16
r_Texture_Anisotropic_Level = 8
gp_mech_showfps=1
Graphics.itemskins=0
Edited by 111psycho, 25 May 2023 - 01:24 PM.