In a new feature, Roblox's physics and networking lead, Kevin He, writes how the online game's tech "allows us to scale to an almost infinite number of physically simulated bodies without degrading physics performance."
In 2010, the online game -- which has some similarities to Lego and allows players to build large physics objects from blocks and even write Lua scripts to interact with them -- shifted to a distributed physics model.
"While a centralized model works on a small scale -- meaning few players, few physics calculations or few simulated parts -- Roblox's implementation wasn't made to stack up against our growth and increasingly complex physics," writes He.
In the new version of the tech, the server offloads computation of physics objects to nearby players while retaining control over the simulation of objects they aren't near.
"Such distributed architecture allows us to scale to an almost infinite number of physically simulated bodies without degrading physics performance," He writes.
How does it work? "We implemented load-balancing algorithms to shrink or grow the region size of each player, based on their computation power and network bandwidth. Players with slow machines or internet connections will generally simulate fewer physical objects; the opposite is true for players with fast connections and hefty rigs," writes He.
The full feature contains the details of how this system was implemented, along with other solutions for online physics, and is live now on Gamasutra.
Coming from a gamer background... I'm wondering how you would incorporate integrity checking into such a system.
What prevents someone from hacking their client, and abusing the simulation? I'm not familiar with the actual product, so it's entirely possible that there's no real benefit to doing so, thus it's unlikely anyone would bother... but if, for example, you wanted to use such techniques in a game where 'cheating' could provide benefits...
Great question. Security is always a challenge to distributed simulation. In general we want to do client side simulation for rendering the animation details and server side validation for key metrics such as player move speed and position. For validation you do not need do it at high frequency and only a subset of physics properties need to be validated.
It's a very good question, however if the architecture supports arbitrary task allocation to other players then it's not too hard to put sanity checking and verification into the algorithm. Particularly with physics calculations that are going on every frame, you don't need to check all of them, just a randomly determined subset. This can flag up unexpected results pretty fast.
What prevents someone from hacking their client, and abusing the simulation? I'm not familiar with the actual product, so it's entirely possible that there's no real benefit to doing so, thus it's unlikely anyone would bother... but if, for example, you wanted to use such techniques in a game where 'cheating' could provide benefits...
It's a very good question, however if the architecture supports arbitrary task allocation to other players then it's not too hard to put sanity checking and verification into the algorithm. Particularly with physics calculations that are going on every frame, you don't need to check all of them, just a randomly determined subset. This can flag up unexpected results pretty fast.