Hi, currently in roblox you cannot replicate 100 moving parts smoothly without writing custom replication.
Only being able to replicate a fairly limited number of parts in our games means we can’t really take advantage of roblox’s physicsy nature.
I’ve included a demo scene and video.
Please consider putting some elbow-grease into reducing the replication cost of objects as having to write our own custom replication to get good performance feels like a missed opportunity.
When you watch the server view, the balls all move as expected, with no throttling.
Bandwidth wise, we’re not even at the 50KB/s soft cap, either.
This will be a very big problem for my game. I am currently making cybernetic shooter game where you can destroy almost everything, from tables and chairs to whole buildings. I can already see the replication lags when i destroy a one building so it will be very bad when i will make a whole destroyable city. Roblox should make it possible to replicate alot of parts without hitting the network limit. It would be also cool if it was possible to change sleeping parts treshold as sometimes the parts don’t go to sleep after 10 seconds.
I agree! Roblox are planning on making lots of improvements to the physics engine (which is separate from the replication engine), and I am like “err, we’re already at the maximum of what we can replicate”
I ran this for about 5 minutes and it worked flawless the entire time. The only thing I noticed, sometimes a ball would roll fast enough to get a little stuck in another along the way, but never did they get stuck where they could not roll to each side once they stopped at each end. Of course, this is running my PC, not a public server, so expect things to work a little differently.
I changed it to try 200 objects and it also worked just fine, it gets messy with so many, but they always line up at the end and shuffle back and forth without much issue.
The fact replication “catches up” is the issue - ideally you would be able to correctly replicate 10x more stuff than this without any of it getting out of sync.
100 objects should be able to stay in sync the whole time without any of them lagging out. Heck I’d hope for 500 or so. Instead things start getting glitchy after only 60 or so.
Only being able to reliably replicate 60 parts smoothly without any throttling occuring is why this is a bug report.
Imho this is a fail case and limits the kind of experiences you can build in roblox, regardless of how good the underlaying physics might be:
I tried out 775 in the “server” only mode, no clients and as you said, everything was working and smooth in your test. The replication to the client seems to be the issue, but the 100 limit seems to be related to something else because different numbers of balls seem to result in sometimes fluid motion, other times, not. The bandwidth usage stays the same, which is odd, seems like it would either go up or down depending on how much replication is needed and how many balls you have rolling around. I believe the issue is more complicated than a static limit of 100. Hopefully the devs can figure out the issue as it’s not really a physics engine related issue on the surface.
This is expected behavior based on current replication design. Once there are enough simulated objects replicating to saturate 40KB/s on the Physics channel, we start sending some at much as possible, while others at lower frequencies.
There is a pretty significant re-design of engine-replication in flight right now, but even with that re-design you will still be able to hit a limit that eventually causes objects further away from you to replicate less frequently, causing a “latency” on how they look compared to other objects closer to you. It’s just a requirement for scalability.
Once the big rework is complete, we will start playing with potentially increasing the physics bandwidth cap away from 40KB/s but we have to do this extremely carefully as to not impact the platform as a whole.