JUMP POINT: We've heard a lot about OCS over the past year. Let's clarify once and for all, what is it?
OCS TEAM: OCS is a major system that's a key part of the foundation of Star Citizen as our 'verse expands to include more planets and solar systems.
JP: In broad terms, how does it all work? What's an object and where is it being streamed to?
Think of a computer's memory as an empty tub. The more available memory, the bigger the tub. As you play a game, objects you interact with are taken from storage and then dropped into it. Objects, in this case, mean things like level maps, 3D objects, textures, audio, pre-rendered video… all the individual parts that make up the game experience. It takes a little time to move objects into the tub, which is what you experience as loading. As long as the object you need has already been dropped in, though, you can make use of it immediately. OCS takes these objects and puts them into the memory to allow the game to use them as soon as needed. When they're not needed anymore, it takes them out to make room for more.
JP: Why not start with all the objects in the tub at once? Load them all at once and leave it at that?
That's how the Persistent Universe works right now… and we're already hitting the limit of what's possible. Computer memory becomes more plentiful and processes become more efficient with every new generation of technology, but the objects that make up games increase at a greater rate. Sure, if your game is small enough, you can make everything available immediately, but Star Citizen isn't a small game and it's only getting bigger! We need to be able to store content on servers (bigger tubs that are connected together) and then move it to the player before they know they need it. That's why we need to build in dedicated systems that let us manage those objects. OCS is our system for determining which objects need to be streamed to which players at which times, all while avoiding loading screens and accounting for a whole lot of dependencies.
JP: How does OCS tackle this problem?
Object Container Streaming breaks the game into smaller chunks so that we always have what the player needs available, while also letting us continue to expand the size and complexity of the game world in other directions. It helps us kill loading screens and make the Star Citizen experience seamless. With OCS in place, the game detects where the player is heading and pulls in all relevant entities.
JP: Is OCS a new idea, something on the cutting edge that we're pioneering?
Object Container Streaming is not unique to Star Citizen. Every game that approaches a certain level of complexity faces the same problem - there's more content to be delivered to the player than can be held in the computer's memory at any one time. In the 'olden' days, games were organized into separate levels or regularly required the player to sit through a loading screen while the data was brought to bear. Today, games address the problem depending on their nature. The most common solution for multiplayer and massively multiplayer games is to try and address the issue from a level and art design standpoint: build leaner levels and smaller objects that all players can keep in memory permanently. However, this won't work for Star Citizen, as building realistically-sized space stations, moons, planets, and star systems means we need very large maps available to many players pretty much all of the time. The client-side work we're doing today is more akin to openworld single-player games, with processes for knowing what the player is doing and accurately estimating what they will do next. This information allows the game to stream content that will be needed while dropping anything that won't appear again and enables modern single player games to have huge, seamless maps. We're just taking the tech a bit further by using it to build an entire universe.
JP: I've seen games where things visually 'pop in' once they're close to the player. Is that what we're talking about?
No, our solution needs to be much broader and our system needs to be able to handle many cases beyond whether or not the player is close enough to see a particular object. If anything, the easy part is knowing whether a ship, character, or even a whole planet is close enough to see. In a single player game, that alone would be fine… but, with Star Citizen, we have a vast galaxy inhabited by multitudes of players whose actions will constantly impact one another. Even if you can't see a ship, character, or place at a specific moment, it may still be impacting your game in some way. The challenge is to build a system that takes into account the million cases that aren't immediately apparent: How do we handle scanning ships outside of visual range? How do we handle a mission that assigns you to a marker three systems away? And most importantly, how do we handle several players in the same area impacting one another in ways we can't predict? The answer to these questions is something else you might have heard us talk about: serialized variables, which the game uses to communicate internally. Every 'piece' of the game has values that change over time and form a sort-of remote control over the state of game objects. That helps inform us of more distant changes that might impact the player. Another big part of this is making the process of loading entities asynchronous to reduce the time they take to load. We're changing the fundamental network messaging that handles spawns. Right now, the old system spawns something immediately using the main thread. So, if you need to load a whole planet, it could take a noticeable second or two because the game processes these requests. Once we're asynchronous, objects can be readied in advance to stream in more quickly without interrupting anything; think of it like meal prep for starships. Right now, you have to collect everything from the cupboard, but soon the game will have all the ingredients measured out in advance.
JP: Can you give me a real-world example of how it all works?
Right now, Star Citizen loads everything at once. With OCS, the player might start off with only their initial location in memory. So, if you start on Grim HEX, only Grim HEX is in memory. As you leave your quarters, the game knows to stream-in the area around you, including the level geometry, other players, docked ships, and more. When you call your ship, it starts streaming the area around the planet and as you move into space, it unloads your quarters and anything not needed on the planet's of the history of game development I referenced earlier: as soon as resources are freed up the priority becomes to make a bigger, better, and more immersive game.
JP: You said we're on step two. What's after client-side OCS?
Step three is server-side OCS, which will come online much later when the overall shape of the game world is closer to being finished. Serverside OCS is an essential part of what will eventually let us use multiple servers to create one cohesive game universe for all players. The work we're doing today is foundational for that. In short, we know what we're doing, we just have some dependencies to work out before we can start that part of the work.
JP: What's the biggest challenge to building this system? The nature of the thing.
Star Citizen is already a very complex game, so a system like this ends up touching almost everything that has come before it. A major part of our work has been preparing existing game elements for OCS, dividing content into logical containers and teaching the game how and when to stream them. We're turning Star Citizen's existing world into a sort of nesting doll of object containers. On the largest side, you have the Stanton System which encompasses many smaller containers that hold moons, asteroid fields, and the like. Then, you can go down several levels to individual ships, locations, NPCs, etc. The other very difficult aspect is production. 'Producer' is an oftenmisunderstood role outside the industry and one that doesn't get enough credit for what's contributed into building even a regular feature. In the case of OCS, producers are absolutely essential for keeping things planned and organized. We have tasks that might have two, three, or even four dependencies, meaning tasks given to other teams that need to be completed for our tasks to begin. Our producers keep a very complicated machine humming along nicely.
JP: How long has the OCS system been in development?
Work began in earnest about three years ago. Our overall plan has three parts. The first of these premiered in alpha 3.1 with serialised variable culling, which is basically the foundation of OCS. It's the system by which the game decides what is and isn't close enough to drop from memory. Next, we're hoping to premiere the client-side OCS, which gives each individual computer the ability to decide what needs to be in memory as described above. Right now, the server loads everything that's needed in the Stanton System to every player in a particular instance all the time. So, every ship model being flown, every portion of planetary surface, every audio clip… the whole bag. Once we premiere OCS on the live branch in the future, that will no longer be the case. J
JP: Does that mean we can expect to see a huge performance increase?
That's a very tough question to answer and I want to be cautious here. It's true that our testers have noticed some great improvements with regards to server-side frames-per-seconds (FPS). But, it's very important to understand that this is NOT a polish pass aimed at making the game run more smoothly. Instead, it's the key to letting us do MORE in the game world. While we'll see an improvement as clientside OCS comes online, we're also adding a lot more to the game and plan to continue to do so for the foreseeable future. Therefore, the new system is much more about letting us give you a game world with more ships, more planets, more star systems. It's really a microcosm when there are one or two players in an area, but Star Citizen allows many more complicated scenarios to happen at any time. What if four players are in the same container and one drops a cargo box? The other players need to see it immediately, of course, but there are also any number of ways they might leave and come back or otherwise impact what's going on. If one damages the box, then it needs to appear the same way to everyone no matter when they revisit it. To make testing things like this possible internally, we use 'headless' clients, which are computers running the game in certain ways to help us help simulate multiple players in the same container. Of course, we're eager to move from headless clients to real, live players. OCS is another system that's going to benefit greatly from letting thousands and thousands of dedicated backers in. As with everything else, we're eager to see what happens when theoretical work meets the real world.
JP: What will those players 'see' when OCS goes live?
Players won't necessarily 'see' anything apart from the new locations and features made possible by OCS. When Alpha 3.3.5 goes live, every new location and feature is the result of OCS doing its thing, so the first things players see will probably be Hurston and its moons. All content in future releases will only exist because of the 3.3.5 update. So, think of OCS when you're landing in Area18 or blasting off in an 890 Jump.
JP: When do you aim to release OCS for the community?
We're eager to have it out as soon as it's ready. We're releasing Alpha 3.3 first to give the community access to the new ships and features that don't rely on OCS. OCS will come in Alpha 3.3.5, which we'll push out to the Evocati for testing as soon as we can. Keep an eye out, it's not far away!
JP: Do you have any final words for the community?
We want to thank everyone for their support and their patience. It goes without saying that the community is why we're here. A system like OCS isn't something a normal game developer would ever talk about in the first place because it's so 'under the hood'... it says a lot about the Star Citizen community that we have backers out there trying to understand all this work and cheer us on. It means a lot and it truly makes this feel like a collaborative effort. We can't wait to let you see what we've been doing. It's a cliché, but OCS is the thing that gets you to the thing. It enables Star Citizen to get bigger and to achieve what we set out to do early on. Getting it live is an exciting step forward and we're glad to have the community along as part of that process.
END TRANSMISSION