- #1
looka
- 32
- 0
I'm not physicist, but a software developer. Please don’t hang up. I am building massive multiplayer online game server, and I started building it from scratch. I found that some programming issues emerged from it which had striking resemblance to quantum quirkiness, so I just wanted to share and find out what you all think about it. Possibly even inspire your thinking. Maybe. I will try to make as many analogies as I can, and not all might be most happy ones.
Few words about our game simulator itself. It is a common server centric system, even though I think it might as well have been peer to peer simulation. Idea is that each player has his own client which is used to interact to the virtual world. Every client is connected to the same server. In essence, client takes any inputs from player, sends them to server, receives world updates, and renders the world to the player. Communication is naturally done by sending messages back and forth, with finite speeds.
So already we can dare to think about words such as reality, realities, observers, messenger particles, interactions and so forth.
Now, even though client should be capable of calculating game physics and thus predicting users input impact on the world, client can’t never really be trusted to do so. Other players may have interacted with the world already, or clients can even be corrupted, or clients just don’t have that computing power. Or some players are just cheats and want to be invincible or steal all your clients credit card data. :) So all real authoritative physics is done on single server where all players interactions and conflicts are actually solved.
Let’s talk bandwidth. It costs and it’s scarce. Sending complete description of the world to each client all the time is completely out of the question, if possible at all. It is just too much data to be sent, and most of it is completely redundant. We do our best to use just the minimum amount possible. Not sure if it is analogous to minimum energy principle, but that is how it is done. So only what is needed for the player to know (see) is sent back to him. We literally use regions and entanglement lists for each client to do this. If player is not looking at the moon, we do not send moon’s data (e.g. position update) to him. For him it’s really just not there. As soon as he looks to it, server will deliver most up to date data of it and all will be well. So photons bouncing from the moon’s surface, would be a clear sign of entanglement, and server delivers. Crucial point I guess would be that entanglement comes from some minimum information principle? Not sure if it makes sense, either way, moving on.
Let’s talk lag. Every network has it. It’s time needed for messages to reach clients. It is always finite. While network message speed limit certainly has the same relativistic limit, it is of course much lower. So player actually sees old picture of the world, just as in reality we see a tiny bit older moon. Not that lag itself is quantum phenomena of course, It’s just analogous.
To reduce costs even more, we had to reduce the bandwidth even more. But when we reduced more bandwidth picture of reality for each player would start to look really ugly and illusion of the virtual world would just fall apart. By ugly I mean jerky, twitchy, inconsistent, chaotic, as if no physical rules applied at all. As if someone was showing slideshow of photos of traffic taken hours apart.
There is of course solution to this, which is well known and used in almost every simulator there is. As it turns out bandwidth can be reduced tenfold by allowing clients to do some tiny physics on their own. By allowing clients some temporary, non-authoritative, minimalistic physics calculations we could decimate bandwidth needed and keep players unaware and still completely immersed in the simulation.
Idea is to allow client to un-authoritatively take care of world changes in between authoritative messages received. It works like a charm, and sure enough, that seems to be the best way to build networked simulations for as long as they are built, which is not really that long. It even resolves a lot of issues caused by uneven and unpredictable network lag across the network. Of course there was some small inconsistency in clients here and there, but none could really be easily noticed, if at all. But lower the bandwidth we used, more common and obvious quirks were. Not that we needed to lower the bandwidth anymore, but funny things emerged when we started to cut the messages to almost a halt, effectively isolating the client from the server, leaving it in much, yes, de-coherent and delicate state. If and when single message came through all ambiguities collapsed and everything was suddenly well defined and apparently in best order. Well, just about everything.
So what were the most common quirks? Objects walking through walls. Objects existing at more than one position. Objects interfering with itself. Objects being dead and alive at same time.
So what is actually going on? Ship is sailing in the sea. Every now and then message arrives from server of ships correct position and speed vector. In between messages client updates the ship position with last known vector for each frame. All is well and coherent. Messages are frequent, and even if they are not, it does not really matter. Both client and server do the same physics and come with same results. Now stuff outside of our particular client reality tries to enter it. It’s can be a wall in our path, another ship, or incoming torpedo. As long as there are no new messages come from server, our ship is sailing “dead reckoning”. (Pun intended, that is the actual name of the this programming technique). In authoritative reality, we are stopped by the wall, or bounced to another direction by other ship or dead by the torpedo explosion. In client’s world we are still happily sailing past that point. So where are we really? Are we alive or not?
Authoritative message finally arrives to client. Time to collapse to one reality. Not an easy thing to do coding wise. Do we just jump to new reality? Maybe some smoothing, transitioning and fancy animation. That is common solution in gaming. I suppose we can identify ourselves at another place an avoid further self-interference. But, oh look, ship trails in the sea are still rendered there where ship never really was. Let’s say that is also fixable, we bluntly remove them. But what if some client messages were already sent from that alternative reality position to server? Or maybe to other clients in peer to peer communication network? Some irreparable damage has certainly been done to user experience at that point, and there is no way around it. We can just let him call it strange and believe whatever he wants.
I don’t really know where to go from here. I understand that this is nothing more really than “many worlds” going their own way until collapsing into one, I just didn’t expect to see quantum like effects to be so easily recreated, recognized and displayed in clear and plain fashion on my own screen. And I know it’s really far-fetched thinking our reality is just some imperfect implementation of rendering of multiple but interactively connected realities. But that is exactly how quantum weirdness makes most sense to me from now on.
I’m probably not the first one to come up with something like this and I know I probably should have done better online research first, so I will gladly follow any interesting and related links you may have for me. Thanks for reading, waiting for your thoughts.
Regards,
Luka
Few words about our game simulator itself. It is a common server centric system, even though I think it might as well have been peer to peer simulation. Idea is that each player has his own client which is used to interact to the virtual world. Every client is connected to the same server. In essence, client takes any inputs from player, sends them to server, receives world updates, and renders the world to the player. Communication is naturally done by sending messages back and forth, with finite speeds.
So already we can dare to think about words such as reality, realities, observers, messenger particles, interactions and so forth.
Now, even though client should be capable of calculating game physics and thus predicting users input impact on the world, client can’t never really be trusted to do so. Other players may have interacted with the world already, or clients can even be corrupted, or clients just don’t have that computing power. Or some players are just cheats and want to be invincible or steal all your clients credit card data. :) So all real authoritative physics is done on single server where all players interactions and conflicts are actually solved.
Let’s talk bandwidth. It costs and it’s scarce. Sending complete description of the world to each client all the time is completely out of the question, if possible at all. It is just too much data to be sent, and most of it is completely redundant. We do our best to use just the minimum amount possible. Not sure if it is analogous to minimum energy principle, but that is how it is done. So only what is needed for the player to know (see) is sent back to him. We literally use regions and entanglement lists for each client to do this. If player is not looking at the moon, we do not send moon’s data (e.g. position update) to him. For him it’s really just not there. As soon as he looks to it, server will deliver most up to date data of it and all will be well. So photons bouncing from the moon’s surface, would be a clear sign of entanglement, and server delivers. Crucial point I guess would be that entanglement comes from some minimum information principle? Not sure if it makes sense, either way, moving on.
Let’s talk lag. Every network has it. It’s time needed for messages to reach clients. It is always finite. While network message speed limit certainly has the same relativistic limit, it is of course much lower. So player actually sees old picture of the world, just as in reality we see a tiny bit older moon. Not that lag itself is quantum phenomena of course, It’s just analogous.
To reduce costs even more, we had to reduce the bandwidth even more. But when we reduced more bandwidth picture of reality for each player would start to look really ugly and illusion of the virtual world would just fall apart. By ugly I mean jerky, twitchy, inconsistent, chaotic, as if no physical rules applied at all. As if someone was showing slideshow of photos of traffic taken hours apart.
There is of course solution to this, which is well known and used in almost every simulator there is. As it turns out bandwidth can be reduced tenfold by allowing clients to do some tiny physics on their own. By allowing clients some temporary, non-authoritative, minimalistic physics calculations we could decimate bandwidth needed and keep players unaware and still completely immersed in the simulation.
Idea is to allow client to un-authoritatively take care of world changes in between authoritative messages received. It works like a charm, and sure enough, that seems to be the best way to build networked simulations for as long as they are built, which is not really that long. It even resolves a lot of issues caused by uneven and unpredictable network lag across the network. Of course there was some small inconsistency in clients here and there, but none could really be easily noticed, if at all. But lower the bandwidth we used, more common and obvious quirks were. Not that we needed to lower the bandwidth anymore, but funny things emerged when we started to cut the messages to almost a halt, effectively isolating the client from the server, leaving it in much, yes, de-coherent and delicate state. If and when single message came through all ambiguities collapsed and everything was suddenly well defined and apparently in best order. Well, just about everything.
So what were the most common quirks? Objects walking through walls. Objects existing at more than one position. Objects interfering with itself. Objects being dead and alive at same time.
So what is actually going on? Ship is sailing in the sea. Every now and then message arrives from server of ships correct position and speed vector. In between messages client updates the ship position with last known vector for each frame. All is well and coherent. Messages are frequent, and even if they are not, it does not really matter. Both client and server do the same physics and come with same results. Now stuff outside of our particular client reality tries to enter it. It’s can be a wall in our path, another ship, or incoming torpedo. As long as there are no new messages come from server, our ship is sailing “dead reckoning”. (Pun intended, that is the actual name of the this programming technique). In authoritative reality, we are stopped by the wall, or bounced to another direction by other ship or dead by the torpedo explosion. In client’s world we are still happily sailing past that point. So where are we really? Are we alive or not?
Authoritative message finally arrives to client. Time to collapse to one reality. Not an easy thing to do coding wise. Do we just jump to new reality? Maybe some smoothing, transitioning and fancy animation. That is common solution in gaming. I suppose we can identify ourselves at another place an avoid further self-interference. But, oh look, ship trails in the sea are still rendered there where ship never really was. Let’s say that is also fixable, we bluntly remove them. But what if some client messages were already sent from that alternative reality position to server? Or maybe to other clients in peer to peer communication network? Some irreparable damage has certainly been done to user experience at that point, and there is no way around it. We can just let him call it strange and believe whatever he wants.
I don’t really know where to go from here. I understand that this is nothing more really than “many worlds” going their own way until collapsing into one, I just didn’t expect to see quantum like effects to be so easily recreated, recognized and displayed in clear and plain fashion on my own screen. And I know it’s really far-fetched thinking our reality is just some imperfect implementation of rendering of multiple but interactively connected realities. But that is exactly how quantum weirdness makes most sense to me from now on.
I’m probably not the first one to come up with something like this and I know I probably should have done better online research first, so I will gladly follow any interesting and related links you may have for me. Thanks for reading, waiting for your thoughts.
Regards,
Luka
Last edited: