Tweaks and Fixes for Unofficial Dedicated Servers: the Ramblings of a Config-Edit Junkie

Introduction

One of my flaws--often fruitful, at least--is that when I see something unoptimized in technical code terms in any way, I have this absolute need to fiddle with it. It's a recent addiction that manifested the last time I wandered into the SWTOR MMO, in which I overhauled the graphics purely with Reshade (and learned HLSL extensively in the process) to cinematic quality with no performance hit. This was sometime last year, and perhaps why I didn't delve into this rabbithole when I first played this game in Early Access much earlier than that.

Back then, the bugs annoyed me enough that I quit, and I only recently picked the game up now, 2-3 years later, because friends wanted to play something in the sandbox survival genre together. Being the weird one who just "gets" the technical things amongst the group, I slid into the position of maintaining the server backend and accepting the fate of what I assumed would be fielding tons of issues.

I wasn't wrong. But I got tired of it, and figured I could alleviate some of it if I just buckled down and fixed it. What followed was weeks on end of rooting through the devkit, Unreal Engine official documentation, and various other associated file projects and forums to mishmash the results of trial and error with the patterns I'd picked up.

Most of the edits in this guide go best together; however, I'll do my best to explain each setting and why it was changed so that if you want to cherry-pick which settings to apply personally, you at least can do so informed. As stated in the little blurb, I've only extensively tested this on small-to-medium population servers without Battleye--feel free to report back with results outside of these parameters and if you need assistance!

The following will be broken down into server-side config settings and a few specific client-side settings that best accompany them, which allow for slightly better client performance over what the dedicated server has to run on minimally.

Topics these settings cover:

↳ Server performance: loading speed, mod size capabilities, network connection stability, rubberbanding and lag per client positioning errors, etc.

↳ Client performance: intensiveness of the game to the computer, graphics improvements without significant impact on running capability, etc.

↳ AI performance: realistic speeds in combat, unpredictable rotations, a more aggressive and competent logic for thralls and enemies, general thrall improvements, collision and pathing upgrades, etc.

↳ Various functionalities: some unintended and happily received consequences have been the result of settings changed, from assets actually loading properly with full ranges of capabilities I didn't know they could do, to full-on lighting and weather fixes. They like to just surprise you when they appear.

Server-Side: Engine.ini [Part 1]

A format of these settings will be included at the end of the last part of this guide for easy copy and pasting purposes, as you do not want to include all the explanations in your config file!

In addition to whatever your hosting service auto-adds to this file upon server installation, I've experimented and ultimately kept the following settings within the [ConanSandbox \ Saved \ Config \ WindowsNoEditor] filepath:

[/script/engine.streamingsettings]

s.AsyncLoadingThreadEnable=true ⇉ EDIT 6/16/2020: I am amused to see this setting mysteriously made its way into the default engine config files in the patch update, along with Event-Driven Loading. This setting is no longer required to be added, as it is enabled by default to expedite loading and remove the intensity of large quantities of mods. 😉

[/script/onlinesubsystemutils.ipnetdriver]

NetServerMaxTickRate=[30 - 120]

MaxClientRate=600000

MaxInternetClientRate=600000 ⇉ I've seen this referenced previously on Steam threads, including one which Funcom officially responded to. In regards to the last two settings, this mostly just helps compensate for the fact that the default values put in for internet speeds were based off of common statistics from years ago--speeds that have dramatically increased for the majority of the world. I've seen varying numbers inserted in here, but generally anything over 100,000 will have you pretty well set. I've found that by increasing these speeds, rendering with minimal stuttering improves (things can be sent with less of a cap) and it also appeared to resolve some select server connection issues from those connecting from further away than the dedicated server's cloud base.

The server tick rate seems to be a bit more of a point of contention. By upping this, you effectively increase the dedicated server's instance's average FPS--but at the cost of requiring extra CPU power. Most dedicated server hosts have the default cap at 30, and for many servers, this is enough, especially higher population servers. In my experience with my smaller population, increasing this DID improve rendering speeds with negligible hit to the CPU usage as people started building sprawling locations, as well as smooth out some FPS stuttering issues client-side.

Arguably, the MaxTickRate should be the one setting you change as a last resort because it can be highly unpredictable, and if you do decide to change it, I strongly urge you increase or decrease it in increments and observe the impact before adjusting it further. The other two settings, though, should definitely be adjusted.

[SystemSettings]

dw.NetClientFloatsDuringNavWalking=0 ⇉ Conan's config file states that this setting is the toggle as to whether the server is using an algorithm to simulate movement based on replicated velocity, or if it is actually finding the floor of the navmesh. By default, the game uses the simulated movement by algorithm--I've changed this because of the subtle differences it creates in realism when navigating as the player character, and it has negligible impact when combined with else in finding your location between server/client communication in the broad scheme of things. Plus, it's one less calculation with room for error that the engine has to run--which, as stated, when combined with else, can reduce navigational lag, rubberbanding, teleporting, and error.

[/script/conansandbox.systemsettings]

dw.SkeletalMeshTickRate=0.1 ⇉ This is just how frequently the skeletal meshes update. It's a little less than half the default value, and mostly provides a smoother aesthetic appearance in the game, while additionally contributing to calming the "jitters" NPCs are plagued with.

dw.EnableAISpawning=1

dw.EnableInitialAISpawningPass=1 ⇉ A failsafe setting for the oddball error, by making sure these settings forcibly remain on, the AI will continue to respawn NPCs as well as populate the world's NPC spawners each server load.

dw.NPCsTargetBuildings=1 ⇉ By default, Funcom has it set that NPCs do not recognize buildings. They see other NPCs, they see players--but not buildings. If we just ignore the implication this can have with pathing issues, the major hilarity that has ensued with this is watching the AI process the environmental query data when it stumbles across your bases with certain patrolling mobs.

dw.nav.AvoidNonPawns=1 ⇉ Another collision setting disabled by default, enabling this allows the AI to factor in placeables like decorations into their pathing parameters. I'll take a moment, as I continue to delve into collision, to express that a lot of these settings have been disabled, in my opinion, due to how little the AI is able to process in environmental data and execution logic per tick--it is SEVERELY below what the internet considers the industry standard, even in the years this game was developed. I firmly believe a lot of this data was removed because the AI was otherwise bogged down and couldn't perform--which would lead me into a rant about normalizing and nerfbatting settings across the board for whatever reason. There's more on this later.

dw.EnableStaticRoamingPaths=1 ⇉ The config file notates that the algorithm Funcom uses was not working predictably, however if used in conjunction with the other settings in this guide, it seems to work well-enough. This enables some extra roaming mobs and patrols generated by the engine in conjunction with the algorithm to add more danger to your map. If you are noticing mobs not working as intended, disable this.

dw.nav.InterpolateAvoidanceResult=1 ⇉ This just removes whatever algorithm instituted when it comes to avoidance data and replaces it with the ideal value that should be running in the first place. Since Conan is running on a version of UE4 that is literally ten versions outdated (and a major point of any of my rants as to why there's a lot of bugs that wouldn't be there if it was just UPDATED; yes, I know this is time consuming but the bug fixes that came in those ten versions would fix a LOT of issues on its own) this appears, in my time experimenting, to be easier on both the engine and in-game appearance's sake.

dw.AILOD1Distance=4000

dw.AILOD2Distance=8000

dw.AILOD3Distance=11500 ⇉ Regardless as to how far you personally have the world rendered out in detail, the AI can have NPC spawners prepped and ready to go beyond what's considered "physically" rendered for when you do approach them. The default distances are pretty small, but you also don't want to increase this too substantially for the sake of bogging down server processes, as this applies in a radius to each individual player character loaded in on the server. I've found in my experience that these values I have listed provide optimal ranges for the AI to have things ready to brutally murder me without waiting for things to have to load in in the open world.

CONTINUED IN NEXT SECTION

Server-Side: Engine.ini [Part 2]

CONTINUED FROM PART 1

We are still working under the subsection: [/script/conansandbox.systemsettings]

dw.NpcLOD2ListenServerControllerTickRate=20.f

dw.NpcLOD3ListenServerControllerTickRate=20.f

dw.NpcLOD3ListenServerBehaviorTickRate=20.f

dw.NpcLOD2ListenServerMovementTickRate=2.0f

dw.NpcLOD3ListenServerMovementTickRate=20.f

dw.NpcLOD2ControllerTickRate=20.f

dw.NpcLOD3ControllerTickRate=20.f

dw.NpcLOD3BehaviorTickRate=20.f

dw.NpcLOD2MovementTickRate=2.0f

dw.NpcLOD3MovementTickRate=20.f ⇉ All values disabled by default, re-enabling these allows the NPCs to have "consciousness" beyond the first level of detail that is the only one otherwise enabled. It contributes to having the NPCs ready to fight you, but CAN contribute to server performance hits if you don't have strong hardware (if you aren't using a hosting service, for instance) or if you haven't optimized your network capabilities fully. It adds a sizable amount of work for the AI to do depending on the area you are in, and while most clients won't feel it if the server can handle it, it WILL be noticeable if the server infrastructure isn't capable. Disabling these won't severely destroy your experience (as they are already disabled in the first place, so really, just keeping them disabled and ignoring this section), but you may notice it takes a moment for NPCs to not just be idly standing there not doing anything when you load into new areas if you are moving quickly otherwise.

[/script/engine.renderersettings]

r.GraphicsAdapter=-1 ⇉ I integrated this setting server-side because it carries over client-side, and has helped those who play on laptops where the engine has failed them (see: my previous rant about old UE4 engine versions). Traditionally a console command, this setting tells the game how it should be prioritizing the intensiveness of rendering on their machine; this particular setting makes sure that anyone connecting to your dedicated server (and putting this in client-side on your personal Engine.ini isn't a bad idea, either), by default, has the graphics card chosen for processing and, on top of that, it favors non-integrated / dedicated cards before it trickles any processing over to an integrated or secondary card. This can massively reduce FPS drops for people whose game, client-side, has chosen, for whatever bizarre reason, to run on an integrated card or even focus on CPU usage.

To note, this often shoots up how much the graphics card is utilized in 3D rendering--it's not uncommon, especially when running many mods, to see it in the 90+ percentage range. This is NOT a bad thing. In my personal experience and research, I've found the GPUs, so long as they ARE NOT OVERHEATING, are processing in optimal form when they are at high percentages. If you overclock your GPU, I cannot speak to the effect, however.

r.Cache.LightingCacheDimension=75 ⇉ Mostly a pet peeve fix, when I was looking at cache optimization, I found this setting operated best when the value was a multiple of five. The default value is not a multiple of five.

r.AllowLandscapeShadows=1

r.HighQualityLightMaps=1 ⇉ Further pet peeve fixes, this allows, where the engine is able to or the mesh has the capacity, for higher quality rendering to be loaded when it comes to certain lighting. You can adjust this value in Scalability for those who operate on lower graphic settings to have it turned off by default for them.

r.AOTrimOldRecordsFraction=0.5

r.AOInterpolationAngleScale=1.1

r.AOInterpolationRadiusScale=1.1

r.AOHeightfieldOcclusion=1 ⇉ A collection of tweaks I've scrounged from various posts across the UE4 official forums to optimize different aspects of ambient occlusion effects, from how they are cast to adjusting how much is carried across each frame for best visual effect. It's mostly just to provide a more realistic level of it within the game, feel free to adjust these if you want to see different effects for your personal style or if adding these causes FPS performance drops client-side.

r.TemporalAASamples=4

r.TemporalAACurrentFrameWeight=0.1 ⇉ Some fine-tuning on the temporal AA utilized by the game, mostly to reduce jitter-effects in the distance and lingering ghosting/screen-tearing. If, by the end of this guide, you find you still have ghosting effects when moving your camera around rapidly, I suggest utilizing motion blur at a quality level of 1 via the in-game console--this negates the trails with very minimal actual motion blur.

grass.densityScale=1.5 ⇉ A personal preference, but I like my Highlands to actually look like there's a legitimate meadow in those hills--you know? You can omit or scale this value back if it causes performance drops client-side for users (and simply put it in client-side for yourself if you wish to retain it), but I otherwise found this value to work pretty well since it sets it across the board--including in the desert.

[/script/engine.physicssettings]

RagdollAggregateThreshold=2 ⇉ I get that it's Conan as a universe--like really, I do, but I also found the explosion of bodies into various pieces as they went flying into the abyss to just be a bit too dramatic. This scales it back to something more realistic (but don't worry, rhinos and mammoths seem to ignore this setting all together and will still go to the moon).

bDefaultHasComplexCollision=True ⇉ This enables complex collision on items that support it; I found it mostly seems to help the AI in environmental queries when its trying to sort its pathing out, but you might notice some subtle realistic changes as well in how characters collide with various objects.

bSubstepping=True

bSubsteppingAsync=True

MaxSubstepDeltaTime=0.025

MaxSubsteps=4 ⇉ Substepping is still a relatively new and experimental feature in the UE4, even now. It can mitigate physics insanity because it breaks down the simulation into even fractions per frame time, smoothing it out and making it more realistic. However, it CAN cause performance issues with no rhyme or rhythm simply due to the nature of being experimental. I haven't personally experienced anything but benefits from applying this to the server's algorithms, but I left the values at optimal defaults beyond turning it on. If you find there's an issue, turn it off--you might lose some smoothness in physics, but it's not gonna be awful considering the game never had it on in the first place.

[/script/engine.audiosettings]

bAllowCenterChannel3DPanning=True ⇉ When supported, improves various aspects of audio quality that stream to your client. I've found my audio (in combination with uncompressing it) to be downright eerie now, so I leave it on as default now.

[/script/aimodule.crowdmanager]

NavmeshCheckInterval=0.100000

PathOptimizationInterval=0.100000

bResolveCollisions=True ⇉ Returning to the AI, the following settings increase how often the controllers are checking NPC positioning and optimizing the pathing data--you can up these values if you feel it is being detrimental to performance, but these ones listed seem to work pretty well in smoothing out the otherwise-choppy movement of NPCs (0.05 can help if they're still getting stuck). The latter option also allows the engine more flexibility in resolving collisions, leading to less glitched NPCs in the long run (they'll still occasionally glitch for a few seconds here and there while the AI re-maps the navmesh after settings application).

[/script/aimodule.aisystem]

bAllowStrafing=True ⇉ Allow the AI, when available, to strafe in movement. Makes for more interesting combat sequences, and appears to directly correlate to them not colliding with each other as much or boxing you in unnecessarily (the AI will still try to corner you in general as a technique, though).

CONTINUED IN NEXT SECTION

Client-Side: Engine.ini [Part 3]

In addition to any of the notes made during the server-side review that you may want to carry over client-side, there's really only one major setting you want to apply in your own [ConanSandbox \ Saved \ Config \ WindowsNoEditor] filepath:

[/script/engine.physicssettings]

bEnableAsyncScene=True ⇉ You DO NOT want to apply this to a dedicated server because it will mess with the NPC spawning--in that, they will be spawning in new and unique places you didn't think they could go. However, utilizing this client-side appears to help reduce rendering lag noticeably in high-building zones.

Server-Side: Game.ini [Part 1]

A format of these settings will be included at the end of the last part of this guide for easy copy and pasting purposes, as you do not want to include all the explanations in your config file!

In addition to whatever your hosting service auto-adds to this file upon server installation, I've experimented and ultimately kept the following settings within the [ConanSandbox \ Saved \ Config \ WindowsNoEditor] filepath:

[/script/engine.gamenetworkmanager]

TotalNetBandwidth=4000000

MaxDynamicBandwidth=100000

MinDynamicBandwidth=10000 ⇉ These three adjusted settings I pulled from a recommendation I found on Steam and have found them to work amazingly well in mitigating client/server traffic. The top one is really the only one you can continue to adjust as necessary over time; it's the total amount of bandwidth the server will use across all connected clients when it comes to traffic. Increase dramatically at your own risk when it comes to using a hosting service--but if you notice the server generally lagging or bogging down out of the blue for no reason, there's a chance you're starting to reach the cap at how much bandwidth is being shared amongst everyone connected at that time. When it starts to max out, data transfer will slow.

MoveRepSize=512.0f ⇉ This one here is a major, bright neon flashing sign setting ultimately. This setting right here determines the amount of data that can be transferred per packet in client/server traffic, as well as in important functions when the server is booting up. This sounds only mildly important on the surface, but let me get in-depth a little further:

When you start up a server, the sequential functions that pull the data from the save file are on timers. Whatever is not loaded in that timer has its stats (in a NPC or thrall's case) or other relevant data erased and replaced with zeros.

Your save file is one ever-growing SQL database, which is just tables upon tables of numbers, the occasional word, and filepaths. Everything about your world is broken down into literal charts--who owns what, what their attributes are, what building pieces are placed and where they go, etcetera. As you continue to play the game, whether on single-player or on a dedicated server, this file passively grows in size. At a certain point, even though it's still relatively small in the grand scope of things, there's a LOT of textual data within that isn't pulled individually, it has to be pulled in large clusters.

You know how sometimes you kill a mob and it doesn't award any experience? Or you know how your thrall just HATES listening to commands? This is because their data was zeroed out at server (or game) start, as the server couldn't pull all the necessary data from the database in time. The only server-side log of this is at first boot up for dedicated servers--you'll get some scrolling warnings in rapid succession about it being unable to load ThrallInfo of ThrallData and a suggestion to resave the asset. Client-wise, any attempt to actively command your follower (or when it is told by the AI behavioral presets to attack) drops a warning log that communication to the server returned that you are not the owner of that NPC and thus cannot order it to do anything. You could force it to attempt to refresh this by clearing the server cache, but it wasn't a 100% guarantee it'd work.

The default value Funcom left in was low; while I don't know exactly what the float translates to, I know from server logs that parts and bytes captured were not very high in general between server and client. The UE4 relies on C++ code being implemented to make this float variable based on the client netspeed, so that it can increase as appropriate for the connection data is flowing to and from. Now, obviously, we don't have access to the C++ in the devkit, but I ended up wandering over to the Microsoft official documentation regarding SQL databases and looking up optimal data transfer speeds for large quantities of text/image data being pulled from the SQL files.

I went out on a limb and inputted their minimum suggestion--512 bytes--as the float value in this field, because what was reflected presently in the logs was far, far below this amount. I can tell you that from watching the server logs now, the captures are showing MUCH higher amounts of data being sent per-packet, which means this float value does not correspond to bytes. In that, I warn for those who have caps on data they can utilize on connections--things like mobile hotspots--that this can run up how much data is utilized quickly. But for your standard internet connection, this was a literal godsend.

The server was immediately loading thralls, NPC data--everything, honestly--properly, with full values at each boot. Textures generally looked better all around, the server lost any remnants of lag, things rendered faster in dense areas, items worked properly... honestly, you name it, it fixed it. The audio quality of the game is a whole new world at this point.

Feel free to fiddle with a value that works for you. Microsoft suggests 512 bytes but the internet argues at exactly how high this really can go ultimately--so it's very open ended. But this is a HUGE improvement for quality of life and will reflect as much when combined with the network adjustments mentioned in here and the Engine.ini.

MAXPOSITIONERRORSQUARED=3.0f ⇉ You ever wonder why, in PvP, people teleport around? It's not always hackers, because it happens just as frequently in PvE, too. The value displayed here is the default UE4 value as the square of, essentially, the margin of error allowed in positioning that is accepted but not corrected when the client/server are communicating about your position. Funcom has this set at 10,000, I'm assuming for necessity on the public server infrastructure... but--just let that one sink in.

MAXCLIENTUPDATEINTERVAL=0.25f ⇉ This is the default value and subsequently doesn't actually override anything. However, it's an important value to have handy because depending on your server structure and population, you CAN fiddle with this and lower it in increments to force the server and client to communicate more frequently as to the client position. Use edits with caution, as it can cause client-side lag.

MaxClientSmoothingDeltaTime=1.0f ⇉ Just an additional setting I dug up on the UE4 documentation for smoothing positioning data not included by default in the config files.

ClientAuthorativePosition=true ⇉ This is an optional setting, by default it is false and many of you may agree that it should stay there. When false, a player is forced to have their position corrected by the server kind of at an ultimatum-level. When true, the client is allowed to remain in their position they ping to the server if the discrepancy between where the server THINKS they should be and where the client says they are is within the range of the setting above listed as MAXPOSITIONERRORSQUARED. Otherwise, they are adjusted. If you retain a high margin of error for clients in movement when it comes to server traffic, you probably want to leave this false. If you utilize the above value like I have, you can set this to true, and oddly it helps mitigate some of the otherwise weird and dramatic teleporting issues caused by positioning errors.

[/script/engine.granitesettings]

bAdvanced=True

r.GraniteStreamLightMaps=True ⇉ Miscellaneous settings to improve the quality of textures.

[Settings.Physics.Cloth]

MaxClothSimuatingActors=3

ClothSimulationAdjustmentInterval=0.650000 ⇉ Just some slight tweaking, makes cloth physics a little more realistic while retaining a measure of dramatic flowiness. Aesthetic purpose is nice, but lowering these values from the default also is a MAJOR saver of FPS and processing power across the board.

CONTINUED IN NEXT SECTION

Server-Side: Game.ini [Part 2]

CONTINUED FROM PART 1

[/script/conansandbox.aisense_newsight]

MaxTracesPerTick=2000 ⇉ This is one of the settings that really grinds my gears, so buckle up.

There are a lot of factors that go into the AI controllers in this game. If you want variance in combat or speed, I'll discuss that in the ServerSettings config section. But this setting is the major player the supersedes all, and I'll tell you why.

The traces that the AI does can mostly be summed up, from my understanding delving into the wild AI rabbithole, as data collection, and in Conan's case, this appears to come primarily from environmental queries. This data is then used in these traces to direct the logic driving pathing decisions, combat choices, thrall performance--pretty much anything and everything the AI does. From my observation, the AI will focus its attention on enemy NPCs before it will pay attention to the thrall component--I can't tell you why, and I haven't found anything in the blueprints that explains it that is at least easily visible in the devkit.

There are multiple AIs in the game, varying controllers dedicated to certain "families" within the NPC pool, and then sort of a main controller to herd the cats to some functional degree. Among all of them, by default, Funcom assigned a max value of 20 traces per tick.

Consider everything you see when you play the game, and how many enemies you can face in certain scenarios, and then imagine how the AI has to spread 20 traces between whatever's loaded in and active to handle all of that data. So--yeah, combat suffers massively, and is a major factor I believe as to why enemies are set upon a preset rotation they cycle through monotonously while your thrall likes to twiddle his thumbs because mom says it isn't his turn with the brain.

According to a series of popular threads beginning in 2014 on the UE4 forums, your common "mega" AI, one that was handling TONS of functions, could usually handle somewhere around 200 traces per tick before it started hitting performance. Regular AIs could average around 2,000, and the smaller ones were 4,000+.

When I first decided to experiment with this option, I bumped it cautiously up to 50 out of fear for server stability, and it was a night-and-day difference with literally no blip on performance the moment we kicked the server back on. The enemies started performing massively different. Over the course of a few weeks, we continued to push it up in increments until we finally reached 2,000.

Somewhere around 200 was when thralls began to show noticeable improvement in their skillset--you could equip them with varying weapons and they would use them appropriate to the situation regardless of their preset behaviors (though seamlessly transition to their preferred style once it was appropriate again). Other highlights include them deciding to use consumable weapons (scared the crap out of a server member when he thought nothing of using his thrall to store gas orbs for inventory weight adjustment and she started bombing the next pull), patrolling in unexpected ways, exhibiting attack coordination / pack behavior, and lately lil' Skynet Jr. has desperately been trying to learn how to swim.

I notate this in part because that's an unintentional, semi-buggy effect, but also because Conan utilizes a cost system when navigating the navmesh to determine where NPCs and such will be willing to go. The AI appears to weigh whether the "cost" they've inputted in the painted areas (like water, it's a painting system you don't see in game for obvious reasons) is worth entering that particular zone. Skynet Jr. over here has suddenly decided it is now cost-worthy to go into certain areas of water. Who knew?

Playing with this option should definitely be done in increments unless you are #yolo-levels in seeing what will happen. I stress this because the AI suddenly being able to compute things often leads to 24-48 hours of some pretty strange behavior--usually tied in with adjusting pathing and collision settings, as the AI relearns the responses from the environmental queries (or that's my best guess, anyways). After about the 48 hour mark, at maximum, most of the odd quirks disappear as it settles into its new role as your overlord and schemes how to put YOU on the wheel of pain.

Additionally, if you are worried about server performance, starting with a low value will help you get a feel for your server's capabilities. Anything past 200-350 as an end-target is purely superfluous and just leads to some very interesting situations out of personal experience, but if you like the unexpected, go for it.

[/script/conansandbox.aisenseconfig_newsight]

PeripheralVisionAngleDegrees=75 ⇉ This setting is half the total angle, in degrees, that enemies can "see" around them. Realistically, humans can only see about 100 degrees with peripheral vision. The current default is 180 degrees total (or 90 in the files). You could set it to the equivalent of 100 (utilizing 50) but you'll find enemies rarely see you--it's useful if you want to implement an impromptu stealth mechanic, but I recommend compensating for this by increasing your aggro range in your ServerSettings. This value (150 degrees total) works pretty well for added realism without being too dramatic for the variety of NPCs in the game.

[/script/aimodule.envquerymanager]

MaxAllowedTestingTime=0.003 ⇉ I pulled this suggested value override from a forum thread on the official UE4 site. It basically forces the AI to rapid-fire query the environment, instead of getting hung up in testing. Though the default value is a fraction of a second itself, reducing it, in my opinion, makes the AI responses more "realistic".

bTestQueriesUsingBreadth=false ⇉ I swapped this based on a suggestion from I believe that same thread I referenced above; this forces the AI to not run queries asynchronously, but to process the data more methodically--essentially, somewhat more human-like, almost like building the resulting logic step-by-step instead of instant-snapshot-decision.

CONTINUED IN NEXT SECTION

Client-Side: Game.ini [Part 3]

In addition to any of the notes made during the server-side review that you may want to carry over client-side, there's really only two major settings you want to apply in your own [ConanSandbox \ Saved \ Config \ WindowsNoEditor] filepath:

[/script/engine.gamenetworkmanager]

MaxMoveDeltaTime=0.033f ⇉ Truthfully I can't say if this setting gets overwritten or not by the server. I lean towards no, because I found that if you fiddle with the setting server-side and set it to this value client-side, it removes whatever lag changing the server-side value causes. If you leave this at default in the server config, then you don't really have to worry about this one--but it appears to help client communication with the server if your personal network is capable of faster speeds, which can smooth out a lot of the micro-stuttering for everything but the z-axis. If you lower the value server-side, you'll suddenly find that gravity and velocity are very, very real things in the UE4 engine--running is more natural, acceleration is a thing, and the only quirky behavior I've found is that lowering it too much causes moon-jump-like effects when you jump up and down.

That result corresponds with z-axis stuttering, which I've found is caused by the engine's gravity interfering with the default jump z-velocity value for player characters; basically, gravity is saying you can't just DO that, and causes a micro-stutter as it plays tug-of-war with your character just straight up shooting into the air. Unfortunately, the map isn't conducive to lowering the jump velocity to something more realistic, though that DOES solve the micro-stuttering on ramps, stairs, and while otherwise flying in admin mode from personal testing with a private mod.

[/script/engine.player]

ConfiguredInternetSpeed=50000 ⇉ Shout out to Nicolai Maximov reminding me of this setting in the comment section. This isn't a requirement by any means because it's a very touchy one--and you only want to put it client-side unless you really wanna push the server (I really only recommend using client-side, I rarely use it myself but it is a worthwhile mention and compatible with the rest of the settings). By increasing this value, you can improve the rendering speed client-side with telling the server you have faster internet than the default in 2017, but going too high on the value can start causing FPS loss and stuttering. I've found most people fall between 50000 and 100000 for optimal improvement in rendering, however if you use this setting and start suffering with stuttering client-side, you want to remove it.

Server-Side: ServerSettings.ini [Assorted]

A format of these settings will be included at the end of the last part of this guide for easy copy and pasting purposes, as you do not want to include all the explanations in your config file!

Please note that some of the settings used here are the "hidden" settings (yeah, those ones that Funcom said you probably shouldn't touch but "it's a sandbox so you can experiment if you want!" so I totally touched them) not immediately visible in default ServerSettings files. You may have to manually add them in if they aren't already there to overwrite.

As we pass the "big" config file crest, these settings become more optional--though I highly stress utilizing these for optimal experiences.

In addition to whatever your hosting service auto-adds to this file upon server installation, I've experimented and ultimately kept the following settings within the [ConanSandbox \ Saved \ Config \ WindowsNoEditor] filepath:

[ServerSettings]

RegionBlockList= ⇉ If this field is populated (likely with "8.8.8.8" or "8.8.4.4"), the best thing you can do is Google exactly what you're blocking. If it's with the values I've stated--congratulations! You're blocking two of the most widely used Google DNS addresses in the world. Do your players have trouble connecting to the server? It's because the region block list has blacklisted literally some of the most common addresses IP addresses are connected to. So when someone attempts to connect and they have these DNS addresses attached, the server has to sift through their IP to determine if they're from a blocked region in actuality or not, which increases the loading time and likes to fail for no reason other than because it can.

Do yourself a favor. Clear this field, and if you HAVE to region block by IP, use another method--the whitelist, for instance.

CorpsesPerPlayer=3

MaxDeathMapMarkers=3 ⇉ Generally a good rule to keep these two the same, but if you're on a semi-well-populated server and people die easily, corpses left behind aren't just awful for the aesthetic--they're sources of lag. Keeping this value low is wise, and if you like death penalties, you might want to invest in one of the alternative function mods that produce a separate way to recover loot than the lag-corpse.

BuildingPreloadRadius=90 ⇉ You can optionally increase this to render in buildings in a wider radius. Be careful, because too much rendering IS a major source of lag regardless of how powerful your computer is--the game, at its core, is just not optimized for that. The default value is 80, I found increasing it just slightly gave a better rendering of "big" player-built areas so that they didn't cut off abruptly, but didn't cause a FPS drop, either.

EnforceRotationRateWhenRoaming_2=False

EnforceRotationRateInCombat_2=False ⇉ These settings--these and the next set are the crucial ones when it comes to combat with the AI. By swapping these two here from true to false, you remove the rails that pigeonhole the AI into only utilizing the rotation in that specific order set by the blueprints internally. This allows the AI to use logic and queries to decide which attack from its available sequence suite it feels is most suited at a given time, which creates a variety in what NPCs will do each time you engage them.

TargetPredictionMaxSeconds=0.5

TargetPredictionAllowSecondsForAttack=0.2 ⇉ Adjusting these settings will allow you to customize how "real-time" your combat is. I've found this particular value set to work best as fast-paced but not stressful, but do feel free to fiddle with it. These settings basically adjust how much time the AI will wait for you to attack, as well as what appears to be how much time it has to "think" about what it believes you'll do so that it can try to preemptively respond.

PlayerKnockbackMultiplier=0.25 ⇉ If you follow the above combat setting tweaks then just trust me, you want to reduce how much the AI is capable of knocking you back / how severe the knockback is. The chain-stuns can be WAY too real otherwise. I've found this value to be appropriate in regards to the other values I've utilized, but as with the rest, tweak away.

ClipVelocityOnNavmeshBoundary=True

ValidatePhysNavWalkWithRaycast=true

LocalNavMeshVisualizationFrequency=0.1 ⇉ As far as I can tell, this is just tweaking how the AI and engine in general handle navigation on the navmesh. Activating raycast appears to be beneficial in broadening the capabilities of environmental queries--in that, particularly, NPC pathing gets less "choppy" or otherwise riddled with bad decisions.

RotateToTargetSendsAngularVelocity=True

PathFollowingSendsAngularVelocity=True

UseLocalQuadraticAngularVelocityPrediction=true ⇉ Turning on velocity is a wild freakin' ride. When I toggled this on, it somehow made weather patterns and lighting work more... efficiently? Which makes no sense, but it was the only setting I changed when that happened, so I have no other argument. Either way, the ultimate benefit to this is just more power to the AI to better handle collision in combat and patrolling. If you don't already have these settings visible in your file, you can add the next cluster of settings with them--they're default values, so it doesn't ultimately override anything, but you can poke at them if you want to see the effect.

LQAVPUseTime=0.150000

LQAVPFadeTime=0.100000

LQAVPMethod=2

NetworkSimulatedSmoothRotationTimeWithLQAVP=0.100000

NPCRespawnMultiplier=5.000000 ⇉ Recommended addition by Sam (Game of Thralls) in the Admins United Discord, and I'm very glad it was brought up because I hadn't considered its quiet benefits. By increasing the amount of time between respawns, the AI has less to calculate because its presence isn't as exponential around the server. This may not be a noticeable difference in performance for smaller servers, but as Sam notated, having the AI run less calculations overall on higher population servers (where more people are there, meaning more NPCs are loaded in and the AI is doing more processes) as server members cull the population passively will reduce some of the strain on your server performance.

NPCMaxSpawnCapMultiplier=1.000000 ⇉ A miscellaneous setting I thought I'd include--adjusting this basically determines how "populated" a spawner can be. You can increase how many total NPCs will populate an area, essentially, by fiddling with this. Use at your own risk if you up it, lowering it can make things cheese-mode if you aren't careful but be beneficial in certain circumstances.

CoopTetheringLimit=52000 ⇉ Another miscellaneous setting, for those utilizing co-op functionality; this is how far people in your hosted game can travel in distance from you overall, but also can effect rendering issues when it comes to NPC enemies snapping back to position for seemingly no reason. You can increase this in local games to compensate, it can help.

Server-Side: Scalability.ini [Assorted]

Changing this file will change how graphics are rendered across the clients that connect to your server based upon their inputted settings--meaning, essentially, you have a degree of control over exactly how cinematic your server is at ultra, or how intensive it is at its lowest setting.

I compiled the recommended settings from official UE4 documentation and cross-referenced them with the engine defaults included in the game and Funcom's presets to come up with the best range that worked for those I play with. Obviously, there's a lot of cherry-picking that can be done here to tailor to your server needs, but you can get some stunning settings with this and fix some weird graphical issues otherwise (even if just by applying the settings overall to your client).

I strongly suggest that if you utilize any of these, you take the optional selection from the Lightmass.ini section. It will be a beautiful combination.

As always, in the [ConanSandbox \ Saved \ Config \ WindowsNoEditor] filepath:

[AntiAliasingQuality@0]

r.MSAA.CompositingSampleCount=0

[AntiAliasingQuality@1]

r.MSAA.CompositingSampleCount=2

[AntiAliasingQuality@2]

r.MSAA.CompositingSampleCount=4

[AntiAliasingQuality@3]

r.MSAA.CompositingSampleCount=4 ⇉ Tweaks to the MSAA system, which can be rather intensive on some hardware.

[ViewDistanceQuality@0]

r.ViewDistanceScale=3.4

[ViewDistanceQuality@1]

r.ViewDistanceScale=3.6

[ViewDistanceQuality@2]

r.ViewDistanceScale=3.8

[ViewDistanceQuality@3]

r.ViewDistanceScale=4.0 ⇉ Increases to how far out you can see, though it does not fully render the entire scene all the way out. It does utilize some dithering on level of detail to some degree or form, so it isn't too horrifically intensive but also keeps you from feeling like you are perpetually in the fog.

[ShadowQuality@0]

r.Shadow.CSM.MaxCascades=1

r.Shadow.MaxResolution=512

r.Shadow.DistanceScale=0.6

r.Shadow.MaxPointCasters=0

r.Shadow.CSMDepthBias=30

[ShadowQuality@1]

r.Shadow.CSM.MaxCascades=1

r.Shadow.RadiusThreshold=0.05

r.Shadow.DistanceScale=0.7

r.Shadow.MaxPointCasters=0

r.Shadow.CSMDepthBias=25

[ShadowQuality@2]

r.DistanceFieldAO=1

r.Shadow.MaxPointCasters=1

r.Shadow.CSMDepthBias=20

[ShadowQuality@3]

r.Shadow.CSM.MaxCascades=10

r.Shadow.CSM.TransitionScale=2

r.Shadow.CSMDepthBias=100

r.Shadow.MaxResolution=4096

r.Shadow.FadeExponent=0

r.Shadow.Faderesolution=1024

r.DistanceFieldAO=1

r.Shadow.PerObjectDirectionalDepthBias=10000

r.Shadow.PointLightDepthBias=10000

r.Shadow.SpotLightDepthBias=10000 ⇉ General tweaks to the shadowing system and how intensive it is, with ultra now being more cinematic and gradually tapering off below that setting with the intent to still retain some aesthetic pleasantry.

[PostProcessQuality@0]

r.AllowLandscapeShadows=0

r.HighQualityLightMaps=0

r.TonemapperQuality=1

[PostProcessQuality@1]

r.AllowLandscapeShadows=0

r.HighQualityLightMaps=0

r.TonemapperQuality=1

[PostProcessQuality@2]

r.BloomQuality=4

r.TonemapperQuality=1

[PostProcessQuality@3]

r.AmbientOcclusionLevels=2

r.DepthOfFieldQuality=4

r.RenderTargetPoolMin=1000

r.LensFlareQuality=3

r.EyeAdaptationQuality=3

r.Bloom.Cross=1

r.Tonemapper.Quality=1

r.Tonemapper.Sharpen=0.2

r.ReflectionEnvironmentLightmapMixLargestWeight=7500 ⇉ This whole section is another one of my pet peeves. Biggest changes include that weird shadow haze around the screen being reduced, bloom not being as blinding on ultra, and the implementation of experimental eye adaption on ultra that works surprisingly well.

[TextureQuality@0]

r.Streaming.LimitPoolSizeToVRAM=1

r.Streaming.PoolSize=500

[TextureQuality@1]

r.Streaming.LimitPoolSizeToVRAM=1

r.Streaming.PoolSize=800

[TextureQuality@2]

r.Streaming.LimitPoolSizeToVRAM=1

r.Streaming.PoolSize=1500

[TextureQuality@3]

r.Streaming.LimitPoolSizeToVRAM=0

r.Streaming.PoolSize=3000 ⇉ Various tweaks to optimize texture streaming so that your computer isn't taking off to space all the time.

[EffectsQuality@0]

r.SSS.Scale=0

r.SSS.Quality=0

r.SSS.HalfRes=1

r.ParticleLightQuality=0

[EffectsQuality@1]

r.SSS.Scale=0.75

r.SSS.Quality=0

r.SSS.HalfRes=1

r.ParticleLightQuality=0

[EffectsQuality@2]

r.ReflectionEnvironment=1

r.SubsurfaceQuality=0

r.SSS.Scale=1

r.SSS.Quality=-1

r.SSS.HalfRes=1

r.ParticleLightQuality=1

[EffectsQuality@3]

r.ReflectionEnvironment=1

r.SubsurfaceQuality=1

r.EmitterSpawnRateScale=1.5

r.SSR.Quality=4

r.SSS.Scale=1

r.SSS.Quality=1

r.SSS.HalfRes=0

r.ParticleLightQuality=2

r.FluidQuality=2 ⇉ Various adjustments to the effect system, with the most notable being bringing down ultra's FluidQuality setting. At its default value, it creates some weird clipping on texture junctions, primarily in the desert. Anything above 1 is liable to make improperly-designed alpha channels appear (zig-zagging effects or lines) in the water in some very specific areas, but if you use anything below 2 you lose the water physics.

[GraniteTextureQuality@0]

r.GraniteSDK.MipBias=1

r.GraniteSDK.MaxAnisotropy=1

r.GraniteSDK.GPUCacheSizeScale=1.0

r.GraniteSDK.CPUCacheSizeScale=1.0

r.GraniteSDK.MinGPUCacheSizeInMB=10

r.GraniteSDK.MinCPUCacheSizeInMB=10

[GraniteTextureQuality@1]

r.GraniteSDK.MipBias=0.5

r.GraniteSDK.MaxAnisotropy=2

r.GraniteSDK.GPUCacheSizeScale=3.0

r.GraniteSDK.CPUCacheSizeScale=2.0

r.GraniteSDK.MinGPUCacheSizeInMB=10

r.GraniteSDK.MinCPUCacheSizeInMB=10

[GraniteTextureQuality@2]

r.GraniteSDK.MipBias=0

r.GraniteSDK.MaxAnisotropy=4

r.GraniteSDK.GPUCacheSizeScale=5.0

r.GraniteSDK.CPUCacheSizeScale=3.0

r.GraniteSDK.MinGPUCacheSizeInMB=20

r.GraniteSDK.MinCPUCacheSizeInMB=20

[GraniteTextureQuality@3]

r.GraniteSDK.MipBias=0

r.GraniteSDK.MaxAnisotropy=8

r.GraniteSDK.GPUCacheSizeScale=10.0

r.GraniteSDK.CPUCacheSizeScale=4.0

r.GraniteSDK.MinGPUCacheSizeInMB=20

r.GraniteSDK.MinCPUCacheSizeInMB=20 ⇉ Various optimizations to streaming the GraniteSDK textures as well, less NASA-sounds on your computer all around.

Server-Side: CharacterLOD.ini [Optional]

A format of these settings will be included at the end of the last part of this guide for easy copy and pasting purposes, as you do not want to include all the explanations in your config file!

I note again: as we have passed the "big" config file crest, these settings become more optional--though I highly stress utilizing these for optimal experiences.

This file is likely empty in your saved config, or may already contain these settings at different values. I pulled these settings from the ones provided and fiddled with them, utilizing these overwrites the values for a better experience, in my opinion, when it comes to characters. It does increase the detail in characters, however, so if you notice a performance hit server-wide, you can skip this (or alternatively only change it for your client-side settings).

These settings are within the [ConanSandbox \ Saved \ Config \ WindowsNoEditor] filepath:

[/script/conansandbox.characterlodsystem]

SimultaneousIK=8

IKLodUpdateInterval=0.3 ⇉ These settings deal with inverse kinetics, which as UE4 explains, deals with believable joint rotation for things like moving on the ground. I lowered the last setting to make it update more frequently, which allows your character to move and flow more naturally.

SimultaneousHighQualityHair=8

HairLodUpdateInterval=0.75 ⇉ Tweaked this around a bit to make hair have more realistic animation detailing while also compensating for that darn z-axis stuttering. You may notice modded hairs occasionally misbehave with this setting, but in no way that breaks anything.

Client-Side: GraniteBaking.ini [Optional]

A very simple setting adjustment, though I will still put a record of it at the end of this guide for ease of reference when copy-pasting: I present GraniteBaking.ini, the underdog of the config files that I'm not sure actually does anything but I still have edited anyways, and best used client-side (but completely compatible with dedicated servers, it just makes things look pretty as far as I can tell).

Also found [ConanSandbox \ Saved \ Config \ WindowsNoEditor] filepath:

[/script/granitematerialbaker.granitebakingsettings]

Quality=High ⇉ I initially thought this setting had to do with the GraniteSDK system within the game itself. By default, it is set to medium. I upped it to high out of curiosity and personally, I felt the textures looked better (in that it was streaming higher qualities to my client). But at this point my config files are so heavily tweaked that it could completely be something else and I wouldn't know it. If you experiment with it or otherwise know, let me know!

Server-Side: Lightmass.ini [Optional]

A format of these settings will be included at the end of the last part of this guide for easy copy and pasting purposes, as you do not want to include all the explanations in your config file!

Very, very much an optional config change here--but hands-down one of my favorites. The Lightmass.ini file allows you to overwrite the base settings utilized to set up the lighting structure of the entire world--down to the photons, and how light works with them. I went down this rabbithole when I was irked at... something with the graphics, at this point I no longer remember what it was, and I ended up stumbling across an excellent compilation post explaining this file and offering some presets that were utilized when some upgrades were put out in 2015.

You can find the thread here, it's actually extremely interesting and one I have bookmarked / readily available.[forums.unrealengine.com]

Obviously this system has since evolved, but since this debut was around the time of the engine version that Conan utilizes being active, I ported the differing settings offered into the game for some stunning results.

This file is extremely likely to be empty in your saved config, so you'll need to copy the settings over. Unfortunately I don't have a very detailed explanation for these settings--the intricacies of this system yet allude me. I just know they're very pretty and create stunning effects without hitting performance at all.

These settings are within the [ConanSandbox \ Saved \ Config \ WindowsNoEditor] filepath:

[DevOptions.PhotonMapping]

NumIrradianceCalculationPhotons=2000

NumIrradianceCalculationPhotons=4096

IndirectPhotonSearchDistance=1000

IndirectPhotonSearchDistance=180

DirectIrradiancePhotonDensity=1024

IndirectPhotonDensity=20000

IndirectIrradiancePhotonDensity=16000

[DevOptions.StaticLightingProductionQuality]

NumHemisphereSamplesScale=100

NumDirectPhotonsScale=1

NumIndirectPhotonsScale=1

NumIndirectIrradiancePhotonsScale=1

AdaptiveBrightnessThresholdScale=.01

[DevOptions.ImportanceTracing]

NumHemisphereSamples=256

Change Log / Notes

Some Notes:

I want to thank everyone who has provided feedback since this guide was launched, who have tried these settings on servers with varying population sizes and reported back with the results.

The feedback has been overwhelmingly positive, and I'm so glad to hear it.

As far as people have tested, these settings are proving stable on servers with significantly higher populations than I experimented with. I have two mods (a basic back up fix and an expanded version with additional server fixes) that you can use in coordination with this guide to make failsafes on thrall loading issues, which I have been told have dramatically reduced thrall issues or otherwise completely removed the problem itself.

You may notice I reference some values being high that, if you look into the default configuration now, no longer seem much higher than the settings listed here. Funcom mysteriously tweaked a series of their settings and included them in a patch slated to launch a few days after this guide was published--what a coincidence, am I right? So servers by default should run a little better, at least, in performance.

For those that have hosting servers with no access to the cache:

The cache periodically rebuilds itself every so many days (I want to say somewhere between 5-7). I've been told the settings still prove beneficial even when the cache isn't able to be cleared, and then any sporadic screwball issues disappear on their own when the server rebuilds its cache during one of the restarts.

For those that don't have access to the Game.ini or Engine.ini:

First, I'm sorry that your server hosting service is being a helicopter parent. Most of the time, these restrictions are put in place so that you can't override how much bandwidth or virtual hardware usage they are otherwise allocating you.

You can still achieve some of the AI benefits by changing solely the ServerSettings.ini. I've been told that the AI is still performing better with these changes alone. However, you won't have access to adjusting your network, so please keep in mind that there may be unpredictable issues--please feel free to reach out to me if you want to work on troubleshooting, and I highly suggest trying the mods I listed above to fix things like the database issues.

Notable Changes6/16/2020 ⇉ Removed the details of the async loading on the Engine settings; this setting mysteriously made it into the default configuration on the patch Funcom released several days after this guide was posted.

6/24/2020 ⇉ Added additional settings into the Engine configuration listing regarding generating patrolling mobs. Details included in the corresponding guide page over how these settings should be used. Additionally, added this page. Woo!

FAQ / Known Issues

✓ What specs are these settings run on for server / client?

I use G-Portal for dedicated server hosting--not their biggest fan by any means, their interface is awful and their customer service drives me up a wall. But they have excellent hardware that they run their servers on and generally decent running capacities otherwise, so they've become glorified rented hardware space for me. I do anything mod- or config-related manually through anything BUT their interfaces.

Personally I run the following specs:

☞ Intel Core i7-9700 CPU @ 3.00GHz, 3000 Mhz, 8 Cores

☞ 32GB RAM

☞ NVIDIA GTX 1660Ti, 6GB VRAM

☞ SSD install

I run the game on full ultra, with an average 40% CPU usage, 6GB of RAM utilized and 5.1GB of VRAM utilized, and usually 95% GPU utilization in total when factoring in the the 3D rendering. Doesn't overheat, rarely kicks into overdrive, and I don't have any liquid-cooling system so it's doing it all on its own. Game takes approximately 3 minutes from boot to finalized server connection (ie: I'm in the game, I see the game).

Dedicated servers I work with run between 40 and 45 mods (10-12GB worth of extra content). They boot up and can take logins in approximately 3 minutes as well, utilize anywhere from 3-5% CPU usage steadily, and fluctuate between 6-10GB of RAM utilization. The ping range of our users varies from 30 to 210, with no issues on either end of the range.

✓ Character/world items ghosting on ultra?

There is some residual ghosting from tampering with the TemporalAA, though from what I've found it's mostly been resolved when the database streaming was fixed. If it persists, the cause is unfortunately bound to very bad choices in the algorithms utilized in the prevalent post-processing across the levels. You can make it disappear by turning on motion blur--if you hate motion blur, the console command for r.MotionBlurQuality 1 will make the tearing non-existent while also make the motion blur pretty natural and non-intrusive.

✓ The world is really bright!

The gamma setting. I had cranked mine up back at first defaults because of the contrast the game utilizes inherently--I've been slowly lowering it to compensate for the adjustments.

✓ Thralls keep getting stuck in the water.

Skynet Jr. wants to follow you now on your adventures. Luckily, this only seems to happen to thralls--not mounts. Picking them up and placing them in guard is an easy fix, but if it really bothers you, lower the trace-tick rate setting in your Game.ini.

✓ Thralls still don't want to attack.

Clear the server cache in the Intermediate folder tree (it's a .bin file with a bunch of numbers and letters) for your next restart. This allows the server to rebuild from the database manually for the next boot, instead of pulling from the previous error-ridden cache (where the thralls/NPCs likely had their data zeroed out inside). It might add 1-2 minutes when you boot it up to rebuild the cache, but once it has a new cache that extra time should disappear.

If the error is persisting after that, reach out to me so I can better troubleshoot the exact situation.

✓ Pathing is still awful.

Wait 24-48 hours from first setting implementation--if you apply ALL of these settings at once at full value, it might take a little longer, because lil' Skynet Jr. is now learning a lot of things about the navmesh. It takes time, but it will iron out on its own in most cases. Promise.

If it doesn't, I did notate which settings were the best to fuss with in the documentation when it came to pathing adjustments.

✓ LAAAAAAG.

If you find your game suddenly impacted by lag (and I highly recommend backing up any database you are actively using if you plan on applying these settings to it beforehand), I notated in the documentation which settings are often the culprit and may require fine-tuning in regards to your personal needs. If you are still struggling, please reach out to me so I can better troubleshoot you.

Contact MeIf you need any help in applying these settings or have questions, comments, concerns, feedback, etc, please don't hesitate to leave a message here on Steam. You are welcome to add me if you want to further discuss a topic, or you may reach out to me on Discord.

My handle is kเt#6284 -- you may want to copy+paste, because it's a funky "i" character. Please be advised, my response time as of late is EXTREMELY delayed due to real life medical situations surrounding myself and my family.

DisclaimerAs always, these settings are purely experimental and subject to tweaks, further adjustments, or other edits as I continue my wild delve in this rabbithole.

Engine.ini Code Compilation

Full code available below for direct copy and pasting needs:

Server-Side Config[/script/onlinesubsystemutils.ipnetdriver]

NetServerMaxTickRate=INSERT A VALUE OF 30 OR HIGHER

MaxClientRate=600000

MaxInternetClientRate=600000

[SystemSettings]

dw.NetClientFloatsDuringNavWalking=0

[/script/conansandbox.systemsettings]

dw.EnableAISpawning=1

dw.EnableInitialAISpawningPass=1

dw.NPCsTargetBuildings=1

dw.nav.AvoidNonPawns=1

dw.EnableStaticRoamingPaths=1

dw.nav.InterpolateAvoidanceResult=1

dw.AILOD1Distance=4000

dw.AILOD2Distance=8000

dw.AILOD3Distance=11500

dw.SkeletalMeshTickRate=0.1

dw.NpcLOD2ListenServerControllerTickRate=20.f

dw.NpcLOD3ListenServerControllerTickRate=20.f

dw.NpcLOD3ListenServerBehaviorTickRate=20.f

dw.NpcLOD2ListenServerMovementTickRate=2.0f

dw.NpcLOD3ListenServerMovementTickRate=20.f

dw.NpcLOD2ControllerTickRate=20.f

dw.NpcLOD3ControllerTickRate=20.f

dw.NpcLOD3BehaviorTickRate=20.f

dw.NpcLOD2MovementTickRate=2.0f

dw.NpcLOD3MovementTickRate=20.f

[/script/engine.renderersettings]

r.GraphicsAdapter=-1

r.Cache.LightingCacheDimension=75

r.AllowLandscapeShadows=1

r.HighQualityLightMaps=1

r.AOTrimOldRecordsFraction=0.5

r.AOInterpolationAngleScale=1.1

r.AOInterpolationRadiusScale=1.1

r.AOHeightfieldOcclusion=1

r.TemporalAASamples=4

r.TemporalAACurrentFrameWeight=0.1

grass.densityScale=1.5

[/script/engine.physicssettings]

RagdollAggregateThreshold=2

bDefaultHasComplexCollision=True

bSubstepping=True

bSubsteppingAsync=True

MaxSubstepDeltaTime=0.025

MaxSubsteps=4

[/script/aimodule.crowdmanager]

NavmeshCheckInterval=0.100000

PathOptimizationInterval=0.100000

bResolveCollisions=True

[/script/aimodule.aisystem]

bAllowStrafing=True

[/script/engine.audiosettings]

bAllowCenterChannel3DPanning=True

Client-Side Config[/script/engine.physicssettings]

bEnableAsyncScene=True

[/script/engine.player]

ConfiguredInternetSpeed=50000

Game.ini Code Compilation

Full code available below for direct copy and pasting needs:

Server-Side Config[/script/engine.gamenetworkmanager]

TotalNetBandwidth=80000000

MaxDynamicBandwidth=100000

MinDynamicBandwidth=10000

MoveRepSize=512.0f

MAXPOSITIONERRORSQUARED=3.0f

MAXCLIENTUPDATEINTERVAL=0.25f

MaxMoveDeltaTime=0.125f

MaxClientSmoothingDeltaTime=1.0f

ClientAuthorativePosition=true

[/script/engine.granitesettings]

bAdvanced=True

r.GraniteStreamLightMaps=True

[/script/conansandbox.aisense_newsight]

MaxTracesPerTick=2000

[/script/conansandbox.aisenseconfig_newsight]

PeripheralVisionAngleDegrees=75

[/script/aimodule.envquerymanager]

MaxAllowedTestingTime=0.003

bTestQueriesUsingBreadth=false

[Settings.Physics.Cloth]

MaxClothSimuatingActors=3

ClothSimulationAdjustmentInterval=0.650000

Client-Side Config[/script/engine.gamenetworkmanager]

MaxMoveDeltaTime=0.033f

ServerSettings.ini Code Compilation

Full code available below for direct copy and pasting needs:

Server-Side Config[ServerSettings]

RegionBlockList=

CorpsesPerPlayer=3

MaxDeathMapMarkers=3

BuildingPreloadRadius=90

EnforceRotationRateWhenRoaming_2=False

EnforceRotationRateInCombat_2=False

TargetPredictionMaxSeconds=0.5

TargetPredictionAllowSecondsForAttack=0.2

PlayerKnockbackMultiplier=0.25

ClipVelocityOnNavmeshBoundary=True

ValidatePhysNavWalkWithRaycast=true

LocalNavMeshVisualizationFrequency=0.1

RotateToTargetSendsAngularVelocity=True

PathFollowingSendsAngularVelocity=True

UseLocalQuadraticAngularVelocityPrediction=true

LQAVPUseTime=0.150000

LQAVPFadeTime=0.100000

LQAVPMethod=2

NetworkSimulatedSmoothRotationTimeWithLQAVP=0.100000

NPCRespawnMultiplier=5.000000

NPCMaxSpawnCapMultiplier=1.000000

Scalability.ini Code Compilation

Full code available below for direct copy and pasting needs:

Server-Side Config[AntiAliasingQuality@0]

r.MSAA.CompositingSampleCount=0

[AntiAliasingQuality@1]

r.MSAA.CompositingSampleCount=2

[AntiAliasingQuality@2]

r.MSAA.CompositingSampleCount=4

[AntiAliasingQuality@3]

r.MSAA.CompositingSampleCount=4

;----/----

[ViewDistanceQuality@0]

r.ViewDistanceScale=3.4

[ViewDistanceQuality@1]

r.ViewDistanceScale=3.6

[ViewDistanceQuality@2]

r.ViewDistanceScale=3.8

[ViewDistanceQuality@3]

r.ViewDistanceScale=4.0

;----/----

[ShadowQuality@0]

r.Shadow.CSM.MaxCascades=1

r.Shadow.MaxResolution=512

r.Shadow.DistanceScale=0.6

r.Shadow.MaxPointCasters=0

r.Shadow.CSMDepthBias=30

[ShadowQuality@1]

r.Shadow.CSM.MaxCascades=1

r.Shadow.RadiusThreshold=0.05

r.Shadow.DistanceScale=0.7

r.Shadow.MaxPointCasters=0

r.Shadow.CSMDepthBias=25

[ShadowQuality@2]

r.DistanceFieldAO=1

r.Shadow.MaxPointCasters=1

r.Shadow.CSMDepthBias=20

[ShadowQuality@3]

r.Shadow.CSM.MaxCascades=10

r.Shadow.CSM.TransitionScale=2

r.Shadow.CSMDepthBias=100

r.Shadow.MaxResolution=4096

r.Shadow.FadeExponent=0

r.Shadow.Faderesolution=1024

r.DistanceFieldAO=1

r.Shadow.PerObjectDirectionalDepthBias=10000

r.Shadow.PointLightDepthBias=10000

r.Shadow.SpotLightDepthBias=10000

;----/----

[PostProcessQuality@0]

r.AllowLandscapeShadows=0

r.HighQualityLightMaps=0

r.TonemapperQuality=1

[PostProcessQuality@1]

r.AllowLandscapeShadows=0

r.HighQualityLightMaps=0

r.TonemapperQuality=1

[PostProcessQuality@2]

r.BloomQuality=4

r.TonemapperQuality=1

[PostProcessQuality@3]

r.AmbientOcclusionLevels=2

r.DepthOfFieldQuality=4

r.RenderTargetPoolMin=1000

r.LensFlareQuality=3

r.EyeAdaptationQuality=3

r.Bloom.Cross=1

r.Tonemapper.Quality=1

r.Tonemapper.Sharpen=0.2

r.ReflectionEnvironmentLightmapMixLargestWeight=7500

;----/----

[TextureQuality@0]

r.Streaming.LimitPoolSizeToVRAM=1

r.Streaming.PoolSize=500

[TextureQuality@1]

r.Streaming.LimitPoolSizeToVRAM=1

r.Streaming.PoolSize=800

[TextureQuality@2]

r.Streaming.LimitPoolSizeToVRAM=1

r.Streaming.PoolSize=1500

[TextureQuality@3]

r.Streaming.LimitPoolSizeToVRAM=0

r.Streaming.PoolSize=3000

;----/----

[EffectsQuality@0]

r.SSS.Scale=0

r.SSS.Quality=0

r.SSS.HalfRes=1

r.ParticleLightQuality=0

[EffectsQuality@1]

r.SSS.Scale=0.75

r.SSS.Quality=0

r.SSS.HalfRes=1

r.ParticleLightQuality=0

[EffectsQuality@2]

r.ReflectionEnvironment=1

r.SubsurfaceQuality=0

r.SSS.Scale=1

r.SSS.Quality=-1

r.SSS.HalfRes=1

r.ParticleLightQuality=1

[EffectsQuality@3]

r.ReflectionEnvironment=1

r.SubsurfaceQuality=1

r.EmitterSpawnRateScale=1.5

r.SSR.Quality=4

r.SSS.Scale=1

r.SSS.Quality=1

r.SSS.HalfRes=0

r.ParticleLightQuality=2

r.FluidQuality=2

;----/----

[GraniteTextureQuality@0]

r.GraniteSDK.MipBias=1

r.GraniteSDK.MaxAnisotropy=1

r.GraniteSDK.GPUCacheSizeScale=1.0

r.GraniteSDK.CPUCacheSizeScale=1.0

r.GraniteSDK.MinGPUCacheSizeInMB=10

r.GraniteSDK.MinCPUCacheSizeInMB=10

[GraniteTextureQuality@1]

r.GraniteSDK.MipBias=0.5

r.GraniteSDK.MaxAnisotropy=2

r.GraniteSDK.GPUCacheSizeScale=3.0

r.GraniteSDK.CPUCacheSizeScale=2.0

r.GraniteSDK.MinGPUCacheSizeInMB=10

r.GraniteSDK.MinCPUCacheSizeInMB=10

[GraniteTextureQuality@2]

r.GraniteSDK.MipBias=0

r.GraniteSDK.MaxAnisotropy=4

r.GraniteSDK.GPUCacheSizeScale=5.0

r.GraniteSDK.CPUCacheSizeScale=3.0

r.GraniteSDK.MinGPUCacheSizeInMB=20

r.GraniteSDK.MinCPUCacheSizeInMB=20

[GraniteTextureQuality@3]

r.GraniteSDK.MipBias=0

r.GraniteSDK.MaxAnisotropy=8

r.GraniteSDK.GPUCacheSizeScale=10.0

r.GraniteSDK.CPUCacheSizeScale=4.0

r.GraniteSDK.MinGPUCacheSizeInMB=20

r.GraniteSDK.MinCPUCacheSizeInMB=20

CharacterLOD.ini Code Compilation

Full code available below for direct copy and pasting needs (extra lines included with their default values that should already be in the file, if not you can grab them from here):

Server-Side Config[/script/conansandbox.characterlodsystem]

SimultaneousIK=8

IKLodUpdateInterval=0.3

IKRange=6000.000000

SimultaneousHighQualityHair=8

HairLodUpdateInterval=0.75

GraniteBaking.ini Code Compilation

Full code available below for direct copy and pasting needs:

Client-Side Config[/script/granitematerialbaker.granitebakingsettings]

Quality=High

Lightmass.ini Code Compilation

Full code available below for direct copy and pasting needs:

Server-Side Config[DevOptions.PhotonMapping]

NumIrradianceCalculationPhotons=2000

NumIrradianceCalculationPhotons=4096

IndirectPhotonSearchDistance=1000

IndirectPhotonSearchDistance=180

DirectIrradiancePhotonDensity=1024

IndirectPhotonDensity=20000

IndirectIrradiancePhotonDensity=16000

[DevOptions.StaticLightingProductionQuality]

NumHemisphereSamplesScale=100

NumDirectPhotonsScale=1

NumIndirectPhotonsScale=1

NumIndirectIrradiancePhotonsScale=1

AdaptiveBrightnessThresholdScale=.01

[DevOptions.ImportanceTracing]

NumHemisphereSamples=256

Source: https://steamcommunity.com/sharedfiles/filedetails/?id=2130895654					

More Conan Exiles guilds