Massively multiplayer games where there are 500-1000 player characters in a 100m x 100m virtual area are impossible with the current engine out of the box according to some testing an acquaintance of mine has been doing. Apparently UE can handle 150 player characters max in the same area due to CPU usage client side.
Dark Age of Camelot is a game that supported 500+ people in the same area although after 500 it started to get a bit laggy client side. For a demo of this game in action simply search Twitch for Dark Age of Camelot and you might see a large battle take place.
To examine code behind DAoC servers you can examine the Dawn of Light server emulation project (freeshard server program) which while not an official server, is a just as capable version of it.
I’m sure you’re aware of this limitation with UE as I’ve heard that Ashes of Creation devs had to do a lot of optimization work and so you probably also heard this. Also Mortal Online 2 devs encountered player count performance issues back in February 2022 and their total server population dived from 7000 to 900. I’m not sure of the exact nature of their issues though. Their issues might be server CPU bound.
It might be a good idea if you started on a project to create an optimized version of your engine that is aimed at supporting up to 1000 player characters in the same area / zone within an MMORPG.
I’m no C++ expert but this might involve creating a new version of your GAS functionality, your character movement component or the whole ACharacter and AActor classes.
Exposing Replication Graph to Blueprint would also be a nice feature for those of us who would prefer to avoid C++.
thank you very much for the heads-up re the prototype tests.
Could you perhaps elaborate a bit how he made those tests? Was it real clients he was using, or did he manage to connect “virtual clients” to the server?
Also, if you say that there is a hard cut for having a lot of units in a small area, how much room is there for model optimization in his scenario? What would be the best way to reduce those bottlenecks?
What about 200-300 player characters?
And how would you proceed if you wanted to set up an instance of UEngine 5.x with larger player numbers in a small space in mind?
This kind of benchmark is not particularly helpful, unless you also have a profile of where the CPU usage is going.
Is it physical simulation?
Is it animation calculation?
Is it driving the graphics card/rendering?
Is it debug mode code?
Anyway, Unreal can physically simulate and render 500 spheres on the screen, so if you’re OK with characters whose collision hulls are spheres, you should be able to get this going.
However, if you use advanced animations, character skinning, and so on, expect those features to have a runtime cost on each client.
It’s kind of weird to compare to Asheron’s Call, because that used a much simplified rendering and simulation mechanism. Unreal probably can’t scale down that far in fidelity, so you’re going to have to pay something for the modern facilities, if that’s what you want.
Typically, you’d want to use a single skinned mesh component per player, and you’d want to subclass Pawn directly, rather than using Character (which is tuned for a different use case.) Make your Pawn subclass use a simple sphere, and make the skinned mesh play a single animation. If you need a different behavior, change which animation asset is being played. Also, make sure your mesh isn’t using the full Unreal skeleton size, but instead limit yourself to maybe 30 bones.
Thank you very much for your reply. A lot of food for thought … and even more, it sounds like the only real way to find these parameters out would be trial and error prototyping.
Spherical objects do not cut it when it comes to a milsim/tactical shooter category, but I think it is a good idea to get things working and a feeling for the network requirements and data processing power needed.
I am starting to wonder how much these spherical objects translate into more complex player characters in terms of workload. If you are saying that the fidelity of Asherons Call characters is so low that it does not justify the unreal engine overhead, what kind of basic character fidelity would you use?
- pick up some basic soldier models and integrate them into a basic multiplayer prototype
- launch the server that see if the client can handle N objects
How would I emulate player connections in order to measure network status dependent on player number, networked objects and player actions?
I need to do some homework here!