Non-Determinism in Multiplatform Networking Physics

Please don't post Bullet support questions here, use the above forums instead.
User avatar
Erwin Coumans
Site Admin
Posts: 4221
Joined: Sun Jun 26, 2005 6:43 pm
Location: California, USA

Non-Determinism in Multiplatform Networking Physics

Post by Erwin Coumans »

Due to lots of reasons a physics simulation can be non-deterministic, or in other words the simulation results will be different with the same starting conditions (*). In multiplatform networked games like massive multiplayer online games (MMO) this has to be dealt with.

0) How do you deal with multiplatform networking physics and non-determinism ? Do networking-clients just mis-predict the physics state over time, and the server keeps everything in sync by correcting the clients ?
1) What about save-games ? Are they just non-portable ?

Any practical solutions, ideas, papers or links on this topic ?

(*) On one platform it is possible to guarantee deterministic behaviour, although when using debug/release builds some care must be taken, and use of _controlfp() might be necessary to force 24 bit mantissa, so accuracy on both builds are the same.
Erin Catto
Posts: 316
Joined: Fri Jul 01, 2005 5:29 am
Location: Irvine

Post by Erin Catto »

Determinism is only important for physical objects that affect gameplay. In a multiplayer setting, this may be a small subset of the objects in the world. In an online FPS, one of the biggest problem is cover: was the opponent guarded by that crate or not? I'm guessing it would piss off a player if they got shot when they thought they were safe.

On the other hand, things like ragdolls and explosions don't need to be deterministic. Also, how important is determinism for other types of game play, such as co-op?

BTW, debug/release builds will almost always have a different outcome because the numerical operations happen in a different order, leading to different round off errors.
ro4tub
Posts: 1
Joined: Thu Sep 08, 2005 11:34 am

Post by ro4tub »

Yes,it's a problem!
Recently , we do a Real Time Strategy Game (Tank Online), it has NPCs ,and now i solve the problem is that i detect the collision and then sending packets to Client,i just send *START* and *STOP* instructions,but when i test it, the Server overload,so i think i will move the NPCs processing from server to client,but how to make NPCs in different client same, it's a big problem!

Do u have any suggestion? i'm glad to hear it!
Thank u in advance!