Pros and cons of having a large base environment with multiple additive scenes

I’m not an artist of any sort, so many techniques and things that environmental artist use are out of my area of knowledge. However, I have been programming nearly 20 years, game development for about 3 using Unity. I’m well aware of various LOD techniques at least from a programmers perspective. Preface out of the way, what I’m wanting to achieve is the ability to be able to view the game world from a fairly far distance, say a few KMs, without having to load every single subscene. I say this only as an example as I’m not trying to achieve anything near the scale of Genshin Impact, but in GI, you can see practically the entire world from any other location in the world. I’ve found architectural articles on this topic scares at best.

Logically they aren’t loading every scene in order to pull this off, at least not unless each location scene is composed of several subscenes to act as layers (e.g. load decorations, trees, etc. as you approach a location), but what I assume is going on is that there’s one massive core scene. If you were to travel to a location and for whatever reason, it failed to load, I’m betting you’d still see the base terrain, but would not see any details, npcs, enemies, etc.

Even if this is totally off or sort of right, I’ll probably go this route anyway until it proves to be problematic, but I really can’t think of any other way you could pull off being able to view a massive amount of the world without having a base environment pre-loaded, but that is the reason for my post!

Feedback is appreciated. I’m really just looking for someone to either validate my thoughts here or to tell me I’m an idiot and what the proper solution may look like.

I should follow up by stating the potential pros and cons as my thread is titled.
Pros:

  1. Faster sync (initial load / fast travel) and async loading times as you’re only loading the details of a particular location, a lot of which may have already been loaded in prior locations.
  2. The ability to see a vast distance without needing to have a ridiculously complicated scene management setup.
  3. Nearly seemless transitions from one location to another (you may see some objects pop into view, but you’d still see the overall environment).
  4. Faster design time for each location since the base world has already been laid out.

Cons:

  1. The base scene may eat of a huge amount of memory (both ram and vram).
  2. Forward rendering / baked shadows / occlusion for a large base scene may require an ton of memory. Deferred may be better in this case.
  3. Multiple scenes give the advantage of allowing multiple people to edit a scene without stomping all over each other. A huge core base scene would almost certainly create merge conflicts unless modifications are tightly controlled.

Also please note that I’m not naive and not looking to create an “open world” because “it’s cool” but for the particular game I’m working on, it actually simplifies things quite a bit. More than likely, we’ll still end up treating locations as individual “levels” where progression may be blocked until you’ve completed several tasks. Also, the camera is fixed a 40 deg. However, we want the ability for players to be able to travel to vantage points where they’ll be able to see fairly far into the world even at a fixed camera angle.

Watch the Digital Foundry video on Call of Duty Warzone :

Also, I think you would be better off rolling your own streaming-from-disk system. Unity’s is quite horrible.

1 Like

Sorry for the post necro. Just wanted to say thanks to @joshuacwilde for the video link. Because of the style of game, we’ve opted to instead go with a more traditional level based design, however what I decided to do was have each level contain all of the level geometry with LOD groups, but then additively load location scenes which contain things such as dynamic lights, monster / npc spawners, scripted sequences / cut scene triggers, etc. I think this approach should reduce a lot of development complexity while allowing the game to still be performant. I can always find other ways to optimize later on. I was considering the idea of even having the location scenes contain most of the static collision geometry, though I’m trying not to pre-optimize.

1 Like