Hello there! I really enjoy BeamNG.drive and thought it would be great to have multiplayer! I know this has been disussed before but i recently had an idea how it could maybe done. Ist not perfect but i think its at least worth sharing As shown in the Image I think the vehicles should be synced between the Clients and Server at low rates like 20fps while the Simulation itself can remain at 2000fps. The vehicle interaction with the world is normally done by the Client which sends it at low rates and highly compressed to the server so it needs less network speed. If vehicles of different Clients come too near each other and might Crash, the Server detects that and simulates the collision at the usual 2000fps (or just at 20fps i'm not sure if it would make any difference to the clients) but sends it at 20fps to the clients. To illustrate it i made an Image you can see under attachments.(i know it doesnt look that great...) Since this is my first post, i've not much experience writing about those things. I hope you find it interesting and maybe you have your own ideas which i would like to read!
Good to see people talk about the subject, I made a little thread if you care to have a look from my perspective https://www.beamng.com/threads/multiplayer-theory.51413/ Though I have some questions about your suggestion. The idea of sending low refresh rate seems counterintuitive imo, usually when it comes to multiplayer you'd want high refresh rates, yielding more accuracy to my understanding. Unless your saying to smooth that information out and let the client fill in the gaps, just might put more strain on the clients system if for example they cant even render 2 cars on their system. The angle I'm approaching from would be to make a system that would highly simplify the complex soft body cars so there's 1/10th the information to send. Send smaller packets of data at High update rates. Performance over quality.
Im glad somone cares about ideas I would prefer quality to Performance, but 20fps are actually pretty low. The best thing would be to compress the packets as strong as possible and send them slower than they are simulated. The better it is compressed the higher the refresh rate can be. The reason why I thought of rates as low as 20fps is that i didnt expect the compression to be that good. But since i have no idea of what compression is possible nor how big the packeer would normally be ist hard to tell how fast if could refresh. To make the packets smaller the vehicles far from the Player could be ignored by the local Simulation and just be "fake-animated". So you couldnt see any crashes just with local Simulation. After thinking a bit further i think it could refresh much faster but again i have no idea what the real numbers would look like. oof. Problem in my concept: If the crashes are completely simulated by the Server, you wont get 2000fps with your own car. But i cant really think of a soultution since otherwise you would get crashes at even lower Performance and lag (if they are simulated by the other player) or you could get teleported (if each of the Players simulate it and another Simulation preferred to yours)
I really recommend you reading this article. https://gafferongames.com/post/introduction_to_networked_physics/ It basically explains how the most complex physics can be networked by only sending the player input between clients. This way you avoid the need of sending all node orientation, velocity, acceleration etc. The biggest problem that makes it currently impossible for beamng is... That the smallest difference in any single number that affects the simulation (which happens because every processor has a different rounding error) causes everything to go out of sync. Also, the developers thought about this before. But according to the developers it's extremely hard to make beamng physics deterministic because of how the physics engine works.