Object Container Streaming

== What to expect from OCS/ABS in 3.3 (FAQ/Guide) ==

Object Container Streaming (OCS)
Object Container Streaming is a complex system which organizes and manages 'objects' in the game and how they come and go and interact with one another. The specific OCS updates in 3.3 relate to client-side OCS which mainly deals with loading and unloading object data, server streaming for those objects, and assets related to the object which must be loaded/unloaded from the memory (RAM) on your computer.

Asynchronous Background Streaming (ABS)
Asynchronous Background Streaming is the ability for the objects mentioned in OCS above to load on their own threads (separate CPU cores) from your main game thread, thereby improving performance for your main rendering and gameplay loop, allowing it to be smoother and less impeded when major events happen like someone spawning or landing a Reclaimer near you.

So what can I expect from the implementation coming in 3.3?
- Improved memory use on the client-side as your game client will no longer need to try to keep EVERYTHING in the game universe loaded at once.

- Slightly improved client-server performance as some measure of additional culling is provided by OCS.

- Less of the hiccups in your client which happen for 1-2 seconds every 10-15 seconds due to major events or spawns nearby, this is where ABS really comes in.

- Additionally there have been some other non OCS/ABS related server optimizations made for 3.3 which will also improve some of the server performance. Sadly these improvements will mostly be negated by the increased size of the universe and new NPCs which have been added to the game (they all take resources from the server cores). That issue along with number of players "per server" will be addressed down the road with the Server Meshing enhancements.

Why is OCS/ABS so important?
These are foundational pieces of the game client and server management system which are required for further advancements coming down the pipe. They will improve client performance for both SQ42 and the PU, allow what may become a 300+GB game on disk to work for people who only have 16GB of RAM, and provide a core system for managing and passing around objects and containers from server to server or thread to thread when Server Meshing comes along.

What is an 'object'?
Pretty much anything "in the universe" that you can see or interact with is either an object or part of an object. That includes planets and moons, space stations, ships, players, cargo, weapons, missiles, torpedoes, etc.

What is a 'container'?
While it is just what it sounds like, some containers are more abstract than others. But basically containers are part of the object system which defines what the object is inside of (child of) and what is inside of it (its children). Some examples of containers (these are all objects too) would be a solar system, the area around each planet in a solar system, the planet and moon(s) around a planet are each a container, stations are containers which may be children of any of the above, a ship is a container which will be in one of those when spawned, and players can move among all of those. Containers provide a convenient hierarchy for servers to manage areas and hand-off information between threads by container or provide points of reference for how to find any given object in the tree. Think of it like GPS for objects.

One of the devs said in RTV that the OCS made performance "truly amazing", will that be the case?
Probably... not. There are definitely performance gains, but they will be offset by a much heavier load on the servers as more than double the NPCs have been added from 3.2 to 3.3 and they consume a lot of overhead. We may see some slight server framerate gains, but it's not likely to move the needle to where everyone wants concerning 60fps. Remember that when devs test the game, they are doing so in small controlled instances with only 1 to 4 players on them, which means only 1-4 clients connected putting demand on the servers and only 1-4 ships needing the physics engine, etc. Putting 50 players doing crazy things on a server is a radically different environment than the one devs test in. So when a dev on a dev instance says "truly amazing" performance improvements, remember they are not playing on the public servers! Plus the stuttering issues in the last few patches have been very painful, so those being fixed by OCS is going to feel "really good" even if framerate improvements are only marginal.

What is the difference between OCS and Bind Culling? Will OCS be providing some degree of Bind Culling?
In some senses, yes, OCS brings in a little of what we call Bind Culling by its very nature. But the two are different in the sense that Bind Culling is in itself a system of ferreting out which objects do not currently matter to a given game client (player) and removes communication about that object in the network stack. The reason they are different is that OCS (on the server side anyway) will stop communicating to a client about objects in another container that the client (player) is not currently in or near to. A good example is let's say you and another player are flying around Yela - you start right next to each other, but move away from each other for a long time. Because you are both still in the same celestial container of Yela, OCS is not removing knowledge of one another, but once you get to some distance let's say 500km apart as an example, Bind Culling may kick-in and stop sending updates about each other. If you're both next to each other and then one of you warps to Cellin, OCS is doing the culling because the one who warped to Cellin is moving to another whole container where Bind Culling would never kick-in. Think of Bind Culling as a small/local scale system and OCS as a larger scale system of managing communications between objects. Also note that server OCS improvements and optimizations will come later down the road, in 3.3 we're (mostly) getting client-side OCS.

Why has it been such a big deal and taken so much effort to make OCS happen?
Because it's all about objects, and the whole game is all about objects. Everyone one of those objects had to be updated to work in this new system, and have code changed to communicate in this new system. Development on it has actually been going on for nearly 3 years now, but for 3.3 it really became imperative to finish it off - so many devs and whole teams were redirected to ensure that happens. Without OCS/ABS, the Hurston planet and moons along with Lorville quite probably wouldn't have been possible for many game clients to handle (due to how much RAM it would take to have potentially all the moons and planets and stations and ships loaded)! And it will, in theory, destroy those annoying stutters in the client, yay!