游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3319|回复: 8

那位大哥给我介绍一下预测插值,越详细越好!谢了

[复制链接]

1

主题

4

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2005-6-16 17:53:00 | 显示全部楼层 |阅读模式
时时性特强的网络游戏,同步真难呀!

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-6-16 22:01:00 | 显示全部楼层

Re:那位大哥给我介绍一下预测插值,越详细越好!谢了

其实实时的强度的描叙要看用户间的交互强不强。
如果只是像赛车那种要求速度感,而用户间的交互并不强的话,对同步也没有什么特殊的要求。而如果是像CS那种竞技类型的,即使是运动的时候十分少,对同步的要求也是十分严格的。主要的做法还是服务器保留到每个连接的延迟,然后根据收到的数据配合延迟来给出一个比较公平的比较,而不是根据谁的数据先到就按照谁的来。

具体的做法就是服务器本身也需要带一定的逻辑,也就是说服务器自身需要跑一个主循环,收到的消息按照延迟排序之后插入一个队列,然后每一帧来处理这些消息,这样就可以获得比较公平的判断。

至于平常的走路或者其他动作的传输到没有什么特别需要注意的地方,稍微注意一下就能想到解决方案的。

54

主题

2916

帖子

3765

积分

论坛元老

Rank: 8Rank: 8

积分
3765
QQ
发表于 2005-6-17 09:36:00 | 显示全部楼层

Re:那位大哥给我介绍一下预测插值,越详细越好!谢了

CS的延迟很严重,因此我一向讨厌在网络上打CS。

8

主题

239

帖子

239

积分

中级会员

Rank: 3Rank: 3

积分
239
发表于 2005-6-17 16:25:00 | 显示全部楼层

Re:那位大哥给我介绍一下预测插值,越详细越好!谢了

数值分析里讲了一堆插值方法,可以借鉴,但都是2D的,kkk,我不会推导到3D上

7

主题

136

帖子

136

积分

注册会员

Rank: 2

积分
136
发表于 2005-6-19 19:20:00 | 显示全部楼层

Re:那位大哥给我介绍一下预测插值,越详细越好!谢了

做过一个3D网游项目的插值预测是我负责的.和大家分享一下经验.
具体的项目我不方便透露,但是,其要求实时性是比较高的.
插值和预测是两样的东西.
插值是对已有的几个点做BEIZER曲线插值或者球形插值.以达到平滑的目的.
而预测是在已有的几个点的位置情况下,预测出下个点的位置.
具体的过程是先预测,再插值.由于预测本身不是最准,所以,当服务器下次发来准确的位置时得修正位置.
先说下预测。我们可以利用到的资源是,前几次服务器发来的位置信息。每个点位置的速度和加速度。
假设,上一次收到的信息是 Pos0,Vel0,Acc0 分别表示位置,速度和加速度,那么下一次的的位置可能是Pos0+(vel0+acc0)*deltatime其中deltatime表示UPDATE间隔。但是你直接使用的话,结果是很惨的,人物会在预测位置和修正位置间来回的“跳跃”,因为这样的预测并不是想象中的那么准确。因为下一次服务器来的信息这段时间间隔内,速度和加速度都在改变,这是由玩家控制的,完全离散的信息。
但是我们可以根据速度和加速度的历史来得知速度是加快了还是变慢了。(加速度一般是个固定数)
速度的方向是大致上是哪个方位。这样,我们可以对速度进行第2层的预测。预测方法和以上类似。
如果判断出,速度是正在下降的。那么可以判断下一次的速度是vel-acc逐步下降。如果是上升的那么可
以判断是vel+acc速度逐渐上升。根据这个情况可以初步得到一个预测速度 Vel1
现在总可以加到Pos0上去了吧?且慢!等你以插值的方式移动到那个点的时候,服务器会无情的发给你真正的当前位置,如果你直接过去,也会发生“跳跃”。考虑到这点,Vel1必须缩小。
我的做法是缩小0.8,还有0.2让服务器的位置来的时候看上去不至于太“跳跃”直接修正。然后,我们把这个Scale过的Vel1向量放到World里进行COLLISION,来防止角色“穿墙”,最后得到Vel2.
下一个预测位置就是Pos1=Pos0+Vel2.你将Pos1放到插值队列里,进行中间的插值然后每次Update时候移动过去,就行了~~

个人经验,和和欢迎探讨

1

主题

18

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2005-6-20 00:10:00 | 显示全部楼层

Re:那位大哥给我介绍一下预测插值,越详细越好!谢了

我是游戏学院的学生,只是个新人学习时间不长所以以下只是我的猜想:
比如说CS,CS有几种速度,如速度是5加速度是1(拿冲锋枪),拿手枪时速度是5加速度是1.1,所以有两种移动方式.5*1和5*1.1,这就是两种我的移动速度,因为两种相差不大所以是否可以只预测最大加速度后的速度就行了,也可以说只预测5*1.1,如果有最终速度大于5*1.2速度,那么服务器是否就可以检测到呢?比如加速外挂,当接受到的速度大于一个值的时候就......
那么每次预测的时候只需要预测最大的加速度就行了,对同步要求很高的游戏也许可以这样?

对于位置预测,即然每次移动都是前进的加和后退的减的过程,那么预测的时候是不是可以做两种预测呢?一个人物移动的时候同时预测加和减,插值的时候也是一样?当然计算量会大一些,不过如果是CS这种最多32人服务器的游戏的话......
可能有许多说的不对的地方所以再次声明,我学习时间并不长.

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-6-20 09:17:00 | 显示全部楼层

Re:那位大哥给我介绍一下预测插值,越详细越好!谢了

CS里没有预测,是基于刷帧的。也就是说,每帧固定频率的更新自己的位置而已。

7

主题

136

帖子

136

积分

注册会员

Rank: 2

积分
136
发表于 2005-6-20 21:48:00 | 显示全部楼层

Re:那位大哥给我介绍一下预测插值,越详细越好!谢了

楼上,我已经说了,这样一来做会"卡"的

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-6-21 10:33:00 | 显示全部楼层

Re:那位大哥给我介绍一下预测插值,越详细越好!谢了

对于局域网来说这个是不成问题的,包括所有的RTS游戏都是用的刷帧的方法。
另外你的插值的方法有很多情况值得改进,比如说角速度和影响,以及基于轨道模型的修正方法等等,我的关于网络同步的一系列文章中都有提到过。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-26 02:12

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表