自我总结
快照压缩技术的要点为 :
- 压缩Orientation数据 : 利用四元数的”最小的三个分量”性质:x^2+y^2+z^2+w^2 = 1 来在传输的时候丢弃一个分量并在网络的另外一端对整个四元数进行重建
- 压缩线性速度和Postion数据 : 把他们限制在某个范围内, 就可以用这个范围的最大值所占用的比特位数来保存这两种数据了, 而不用一个超大的数来保证可以保存他们的最大值了(占用超多bit位)
- 增量压缩
. . .
快照插值这种游戏同步技术的要点为 :
. . .
帧同步要点如下 :
. . .
Hi, I’m Glenn Fiedler and welcome to the first article in Networked Physics.
In this article series we’re going to network a physics simulation three different ways: deterministic lockstep, snapshot interpolation and state synchronization.
But before we get to this, let’s spend some time exploring the physics simulation we’re going to network in this article series:
Here I’ve setup a simple simulation of a cube in the open source physics engine ODE. The player moves around by applying forces at its center of mass. The physics simulation takes this linear motion and calculates friction as the cube collides with the ground, inducing a rolling and tumbling motion.
This is why I chose a cube instead a sphere. I want this complex, unpredictable motion because rigid bodies in general move in interesting ways according to their shape.
Networked physics get interesting when the player interacts with other physically simulated objects, especially when those objects push back and affect the motion of the player.
So let’s add some more cubes to the simulation:
When the player interacts with a cube it turns red. When that cube comes to rest it turns back to grey (non-interacting).
While it’s cool to roll around and interact with other cubes, what I really wanted was a way to push lots of cubes around. What I came up with is this:
As you can see, interactions aren’t just direct. Red cubes pushed around by the player turn other cubes they touch red as well. This way, interactions fan out to cover all affected objects.
I also wanted a very complex coupled motion between the player and non-player cubes such they become one system: a group of rigid bodies joined together by constraints.
To implement this I thought it would be cool if the player could roll around and create a ball of cubes, like in one of my favorite games Katamari Damacy.
Cubes within a certain distance of the player have a force applied towards the center of the cube. These cubes remain physically simulated while in the katamari ball, they are not just “stuck” to the player like in the original game.
This is a very difficult situation for networked physics!
译者:陈敬凤(nunu) 审校:崔国军(飞扬971)
大家好,我是格伦·菲德勒,是一位来自洛杉矶的职业游戏开发者。
我作为一名职业游戏开发者已经有15年了。而在这其中的十年时光里,我都是专门做网络编程的。在这期间我大部分的业余时间一直致力于研究网络物理模拟方面的问题。在这个系列文章中我的目标是分享我已经知道的一切有关网络物理模拟方面的知识。
写这些文章是一个工作量很大的工作,而且我完全是在我的业余时间里面来做这些事情的。如果有了你们的支持,我可以找时间来继续写这个系列的文章。如果可以的话,请通过 patreon 支持我的工作。
网络物理部分的入门是相当困难的。你可能想知道你的物理模拟是否需要确定性以便可以进行网络传输和通信?你应该通过网络来发送物体的物理状态么?或者你应该通过网络来发送一些诸如碰撞时间或者物体相互作用力这些东西么?你到底是应该通过UDP还是TCP来传送数据?你应该使用客户端/服务器通信模型还是点对点的通信模型? 你是否需要一个专门的服务器?如何隐藏播放动作的时候的延迟?如何不让玩家作弊?
人们经常问我这些问题。大多数情况下这些问题的正确答案依赖于他们所选用的网络模型。你可能甚至不知道你正在使用或计划使用的网络模型是什么,但事实是你必须选择一个网络模型并且你选择的这个网络模型会使某些事情变得容易,并使得另外一些事情变得困难。
在这个系列文章中我们将使用三种不同的方式来构建一个网络物理模拟的例子,并通过这些例子来对不同的网络模型展开一个讨论。我把这些基本技术称为“同步策略”。他们是:《确定性的帧同步》、《快照插值》和《状态同步》。
带宽是网络物理部分的另外一个重要方面。我该怎么做才能对所有这些对象进行同步状态?因此,我们打算花一整篇文章来进行介绍一个带宽优化的案例,向你展示如何将快照插值技术的带宽从每秒18m减少到每秒256k。
在选择了合适的同步策略以及合理的优化完带宽以后,我们现在准备讨论客户机/服务器与点对点对等网络之间的优劣性了。除了讨论利弊以外,我还将分享在艰苦的发布使用客户机/服务器网络模型的游戏和点对点对等网络模型的游戏的过程中学到的那些经验和教训。这篇文章会有你在其他地方找不到的非常具体、务实的信息。
最后,我们讨论构建在基本同步策略上的不同网络模型,这些网络模型的细节各有不同。在这里。你会发现你的网络物理模拟可以有许多不同的选择:《确定性帧同步网络模型》、《分布式权威网络模型》和《带有客户端预测的服务器仲裁网络模型》。
所以系上安全带准备出发了。我们还有一大堆材料需要学习!
接下来的这篇文章是:《物理模拟》
为什么格伦·菲德勒在Patreon上寻求自助?
嘿,大家好,我是格伦·菲德勒,网站gafferongames.com的作者。在过去的10年,我给大家分享了许多游戏开发方面的文章:《如何解决你的时间戳》、《整合基础》、《UDP与TCP》、《每个程序员都需要了解游戏开发网络方面的知识》以及其他一些文章。我还分享了《物理编程技巧》、《网络游戏编程的基础知识》和我的个人项目虚拟围棋。我想继续新的系列文章《网络物理模拟》以及《构建一个游戏网络协议》,但是我需要你的帮助!托管代码和文章需要费用,写这些文章需要花费大量的时间去研究和写作。如果你喜欢gafferongames.com上面的文章,请向我展现出你对我的支持并鼓励我写更多的文章并开放更多的源代码!
【版权声明】
原文作者未做权利声明,视为共享知识产权进入公共领域,自动获得授权。
如果你觉得这篇文章有价值,请在 patreon 上支持原作者。