I have played in many early access games and optimization is one of the key components on why people leave and stop playing. With so many videos and stuff coming out for this game it will only get bigger so optimization is a huge key. Some might now of this, that’s why the game atlas has fallen. Its launch was one of the worst launches in history because of how poorly optimized its servers were.
We’re constantly working on optimization! Last update actually saw some pretty drastic optimizations to both client and server. Next update will have some more.
Our ‘official’ goal is a decent experience with up to 16 players online at a time. So when servers were hitting 50 players earlier this week, it’s definitely well and truly beyond what our official goal is. That being said, we’re still a while off where we want to be with both server and client performance.
I am glad to hear that! I don’t want to see a game I really enjoy fall because of it.
I had a thought about how the clients on the server would be handled to better accommodate for more players.
Currently it seems like the server is on a fairly basic physics/player balancing act with the processing for each operation taking place in a linear and serial fashion, with each player adding a very linear amount of stress after you hit 10 people. What if you guys built a scheduler that spread out the workload by count of the players? It would operate as such:
- Players and their physics they create are on one thread, but only 4 players on this one thread. anything they do is synchronized with this thread. its like running a separate part of the server on this special thread for these four players. An 8C16T CPU would easily host about 56 players. Ideally an AWS machine running an EPYC7642 with 48 cores and 96 threads would be used for megaservers that host more than 350 people
- Say there are 8 players and they travel in fours, switch the players to a common thread based on distance to one-another to ensure that there is no physics desync.
- For multiple people, more than 4 in one area working together, the physics would still be separated but be synchronized by the use of a daemon that works at the root of all player interactions and makes sure that actions never interfere in a wrong way. This would be called the negotiator and can take asynchronous compute related data from all threads only to ensure smooth server operations behind all separate thread instances
- for objects that need physics when nobody around, form a new threaded class for this and dedicate this so that it cannot be interrupted by other players joining
- any object that needs physics, thrown by a player or manipulated near a player would be on their thread. I feel like 16 objects and 4 players on one thread would be about manageable, maybe?
*any non moving object stays static and unprocessed unless a force touches it, and it being touched activates physics. If it is not contacted, then nothing should happen at rest, right?
- When taking enemies and crafting into account, have the client send special packets at every game tick (only if they hit something) that have a checksum to be validated that say “this object was hit for this amount of damage and it was either not or was a critical” so that there are no more missed hits on crafting and combat if there is lag
- When more people join than the server has threads to allocate, start putting people on loaded threads as needed, but segment as much as possible to maintain a solid 45 fps on the server.
This is all an idea, and i don’t want you to feel like i’m telling you what to do, i just had this idea at work and thought i should share it. I have a strong feeling that small optimizations that will be made will push this game into the stratosphere for performance, but efficient multicore performance is what really needs to happen. Parallel compute is the future, and having a great game like this scale with large core count servers is going to be the future.
Last week’s optimization update boosted performance by an absurd degree. Props to Alta for that.
Before the update, 20 people in a server was a nightmare to experience. Now, we can play pretty decently with 30-40 people in the same server.
This game only gets better as time goes on.