World Partition and WorldSettings

Hi,

We have a large open world built with World Partition. As I understand it, this is basically a bunch of worlds under the hood, and each one seems to be given its own WorldSettings rather than sharing it.

The problem is that the server CPU hit from touching all of these world settings for replication is rather significant - even just hitting PreReplication for them all is problematic.

Is there an assumed best practice for dealing with this? Possibly:

  • A way of sharing the WorldSettings across all the WP worlds.
  • Setting WorldSettings dormant most of the time - I assume the replicated variables don’t actually change very often, but not sure if that causes problems for the pauser (assuming we even need it!) or any RPC’s happening that I haven’t noticed.

Thanks,

Steve

Steps to Reproduce

Oh I just bumped into this, sorry didn’t spot it before making the question! [Content removed]

I’ll try the steps outlined here and see if it solves our problem. :slight_smile:

Nevermind, I’m an idiot, this was sublevels doing this and not WP which I had assumed. Might be nice to have sublevels be able to handle this too intrinsically, but I’ve injected something locally that does the job!

Hi,

Just checking in to make sure you’re all set.

I’ll go ahead and close out this ticket if that’s the case when I hear back from you, otherwise please feel free to respond here if you have any follow-up questions.

Regards

Hi John,

Yeah sorry, feel free to close this. I think there’s potential value in adding support for whether each sub-level WorldSettings should replicate into the engien by default (or whether they even need their own WorldSettings), but it’s not an immediate problem as I can force turn off replication in code.

For the record, all I did was add the following into ALyraWorldSettings:

`void ALyraWorldSettings::PostInitializeComponents()
{
Super::PostInitializeComponents();

// We prevent world settings from replicating for every single sub level, as there are
// hundreds and it eats a lot of time in the NetDriver checking for replicated variables.
if(!GIsEditor || GIsPlayInEditorWorld)
{
if(!GetLevel()->IsPersistentLevel())
{
check(IsActorInitialized());
SetReplicates(false);
}
}
}`Cheers.