I'm looking for a basic to intermediate understanding of how movement in SL works, and what affects it.
My current understanding is that it is done by a physics engine, and that movement is the result of forces. Is this correct? I presume pressing a key on the keyboard generates forces, but I have no idea how the standardized maximum velocities of walking and running avatars arise from this process - what exactly happens when you press a key that makes your avatar move, and why is the standard voluntary walking speed a constant 3.2 m/s? If there was a constant force on an avatar, it would accelerate indefinitely, which would be unphysical, and is not what actually happens.
I know movement enhancers exist, they seem to use llSetForce and llApplyImpulse commands. And llPushObject can move avatars. Collisions with objects (physical and nonphysical) can also affect movement. Is there anything else that affects movement?
On a related note, assuming some of the above is correct, where are the calculations performed? What calculations are done by the client, and what calculations are done by the host? And what mechanism synchronizes the position of the avatar in the client and the position of the avatar in the host? I'm pretty sure the two get out of synch, this results in a "rubberbanding" effect, I've seen in world, but I'm puzzled about the details.