So about 10 minutes ago I finally looked at today’s Writer’s Block and realized where all the random people I didn’t know were coming from. Unfortunately, this coincided with my exuberant posting about me being the most downloaded artist on CTG Music, which is not exactly the journal entry I’d want the hundred or so people that clicked on the submitted by link to see.
Man that’s an insane coincidence. And not one I’m particularly happy about either. I somehow doubt that many people on here are Techno fans, so don’t bother listening to my music :P
Player Controlled Avatar Interpolation - The standard method of interpolation, being that given a packet from the server about object x’s location, we can place that object back to where it was at the point in time the packet was constructed, freeze the entire simulation, interpolate that physics island forward until the present, disregarding any initial collisions, does not work for client-controlled objects. In my situation, almost the entire world is server-controlled anyway, so for the vast majority of things its a matter of just sending the client updated physics pathways. This works for the creation of new objects too, since we can create the object where it was supposed to be 150 ms ago, then interpolate it forward to the present.
However, the stick in the spokes for this problem is the very fact that player’s can move. Because a player avatar’s position must be, by definition, at an undefined location at the time that a packet is sent, we have one of two options:
- Given the updated information on what the player was doing, rewind the player object backwards and re-simulate it.
- Let the player give us their current position and rotation
The former is computationally expensive, but the latter is prone to hacking. The best solution is to allow both. While the default should be a massively optimized re-simulation, if people are having a LAN party or just hosting their own server, they probably won’t have to worry about hackers in the first place and can disable it to save CPU time. On the other hand, if its a dedicated server, chances are it can afford to make those additional calculations anyway.