查看: 12015|回复: 10

[HC交流] 说下tick值与动画与动画帧数关系?

[复制链接]

28

主题

1811

帖子

3414

积分

Lv.6

Rank: 6Rank: 6Rank: 6

看到一个科普coc的帖子,里边扯到tick和动画关系,里边有错误,在这开帖说一下
1动画与大家所说得动画是两个概念,大家说的动画是视频分类,而专业上的动画其实是指cg行业里一个对象的空间变化过程,而动画由于时代技术的原因有两种,第一种是传统的手工绘画,提前设定好帧数来作画,第二种是新时代的计算机动画,只需要让动作时间符合常理即可
比如说:A打了B一巴掌,这一个过程
如果是手绘形式,就得提前设定好帧数,考虑到手工工作量与人眼识别能力,一般12帧,也就是这一个动作从开始举起手到打中B整个过程细分12段来手动绘制,帧数确定无法更改,(上学时有人试过在书本右下角画小人吧?跟那个一样)
如果是计算机动画,很简单,开始举手设定关键帧,打中B得脸设定关键帧,ok完事了,中间的过程计算机自动平均细分,这一个过程你可以无限细分,你可以将这个过程出1000帧都可以,1秒播放完1000帧。不过细分简单,渲染难,一张图如果渲染1分钟,如果用国际通用的电影帧速率24来算,1秒需要电脑渲染24分钟,最后结果就是24张图,此时的结果与手绘一样,都是图片,最后经过合成软件变成视频,上传网络,就是大家看到的网络视频,帧数确定无法更改。

注意!!!
不一样的来了,游戏是实时渲染的,画质相对影视化渲染细节上差了很多,所以才能实时渲染

也就是上边动画起始和结束帧设定好之后,这个动画源文件是无限细分得,不走影视渲染这一步直接导入游戏引擎里,那么此时只要你电脑硬件足够高,这个动作过程,你可以达到60  120  240  480甚至更高的帧速率,且这480帧每一帧都不同,是这个动作均分了480份,这点记住下边会对比
如果是手绘的12帧放到游戏引擎帧速率多少?也是480帧,但不同来了,由于源文件就是12帧,固定了,没办法细分,因此这480帧/12=40,也就此时电脑显示的前40帧实际是手绘的12张图里得第一张图,只不过显卡对着这一张图实时渲染了40次,(可以想象成你女朋友摆个pos你对着咔咔咔连续拍摄40张,她换个姿势你又咔咔咔40张),以此类推,440-480帧是手绘12张图的最后一张。
好了,手绘动画与计算机动画区别明白了吧,这也是技术带来的变革,在这个例子里,tick并没有参与,
游戏里动画是实时渲染,渲染多少帧是硬件决定的,只要大于60帧,你看到的画面都不会有什么肉眼可识别得变化,(电影大于24帧人眼就看不出变化,原因复杂不细说,而这些复杂得原因也是3d电影烧钱得一个原因,要处理24张图每一张图的仿人眼观看来达到24帧就能相对游戏60帧效果,这也造就了3D电影一秒画面一台机需要渲染两天计算成钱大概几百到上千/s的成本)

tick是数据交换的“帧数”,不影响动画本身帧速率,动画本身是无限细分得,,tick30,那么一秒数据交换就是30次,

游戏过场动画与剧情动画是限定帧速率得,游戏之间不同,常用就是24-25。

通俗来说,

就跟公交车一天12班,你来晚了来早了都坐不上,一天就这几班车,且必须在指定时间上车,,这就是tick,
而你从家里跑到公交车站这个速度,你想多快就多快,这就是动画,
而你坐上公交车了,路上堵了,并且堵了一天,你都还在车上没动一步,但是今天剩下得11班车都按时到了,堵在路上得你就是数据丢失,而马路畅通与堵塞就是网络状态,状态好你最大也就一天坐12趟,班次就12你不可能坐13趟,但是可能做小于12趟。如果马路不堵死,但是车多,就会造成你得车晚班,这就是网络延迟。
而你在路上看到得户外广告大屏幕播放的广告就是 过场动画和剧情动画,画面里的速度是设定好了无法改变。
tick可以改变,但是游戏里很多功能的tick不同的,所以改动一次基本要动很多东西,所以基本游戏设计之初就设定了tick,如果不够用直接重做一款,而上一款很多素材代码等可以用的直接拿过来修修改改就用了。比直接改装原来的快且划算,游戏更新换代很快,如果改原装游戏,可能废了老大得劲tick改成120了,游戏画面也跟不上时代了(参考某射击游戏,30tick改成120tick画面没啥改变,也没啥人玩),大家看腻了,并且一个游戏刚开始都觉得很棒,真的造出来会发现有很多缺点,下一次重做就吸取经验把上一代缺点弥补了。

最后,大家所看到的所有画面效果其实都可以不要,游戏依然运行,你按技能依然可以施放,如果有怪依然可以造成伤害,但是你看不到,只能后台看到,动画就是动画与数据只有匹配关系,没有从属关系,匹配关系就是,让你的动作速度与产生伤害的冷却一致,保证不会出现,人物刚举手怪就死亡得画面割裂感。给你显卡显示器设置4帧/s,你得技能放出去你在画面上都看不到技能,但是怪物死了,与你60帧速率打怪一个速度,只影响你观看
所以游戏里得数据探讨都别扯动画,帧速率。只考虑tick和网络延迟,
什么帧速率影响触发,影响伤害的话别说了,都不是一个东西,

一切动态静态画面只是给数据套了一层壳。否则让你对着一堆数据玩,你也提不起兴趣来。



回复

使用道具 举报

11

主题

508

帖子

2601

积分

Lv.5

Rank: 5Rank: 5

居然没人理你
回复

使用道具 举报

塑型者

32

主题

1024

帖子

7134

积分

Lv.9

Rank: 9Rank: 9Rank: 9

看懂了 又好像没看懂 不敢说话
回复

使用道具 举报

吉尔菲

3

主题

6

帖子

75

积分

Lv.2

Rank: 2Rank: 2

意思是冷却可以一直加,没有什么14到50几冷却回复是几当,14的冷却就是没有50的强,是这样吗?

点评

冷却每次增长的值足够多一次触发才有效果,否则只会影响触发的早晚。  详情 回复 发表于 2021-7-9 08:53
或者另一个说法,你不要以1秒来看,用2秒来看,那就是冷却越高触发越多总伤害就越多  详情 回复 发表于 2021-7-9 09:54
回复

使用道具 举报

塑型者

15

主题

2094

帖子

5943

积分

Lv.8

Rank: 8Rank: 8

理论上,要做得动画和伤害掉血 一致的物理引擎,是要考虑服务器计算tick,但是这会产生一个问题,如果在tick前,10ms网络延迟才上报你这边还在攻击,并且触发了暴击的投射物,那么有可能服务器那边10ms还没来得及汇总数据状态用来判断是否应该触发这个暴击动画并产生投射物,并且击中怪物降低对应的血量的动画,然后立即反馈给你。

这中间会有很多因素造成延迟问题。如果都考虑进去,画面和掉血要一致的话,就不是简单的档位能解决的问题了。会产生很多错位丢失画面。

----------------

所以服务器那边可能不是按照tick去计算档位的冷却,所有的数据都按照最初的 150ms去计算触发伤害,然后客户端这边也按150ms来一直保持呈现投射物动画,并且击中怪物。

这时候会有个错位信息,就是怪物的掉血要经过服务器tick的验证,然后报告给你才最终呈现掉血了,那么是否会出现投射物击中怪物了,但是服务器那边还没报告过来,没有呈现掉血,这个掉血的频率是否会和实际动画呈现有很大的毫秒误差,以至于每帧图像能看出差别而影响体感?这是一个需要平衡调整的过程。为了减少运算量,不可能无限接近真实物理系统,只要人眼看不出大的差别就行。而且在网络延迟很高的时候,服务器经常会汇总几次击中后的掉血给客户端呈现,所以很有可能服务器没有必要每个tick都去判断触发情况,并反馈对应的数值,只需客户端这边脱机(比如网络延迟10ms、20ms、30ms间隔)呈现动画即可。
那么投射物的角度和路线,以及和怪物碰撞的数据应该如何工作,按tick的165ms还是150ms来作为中间判断值?很显然,服务器会在投射物(按原所有应该触发的数值量)最终是否会碰撞怪物时计算伤害,这中间的暴击次数,触发次数做一个汇总判定,如果这个tick期间有收到客户端的来信,就反馈对应的掉血数据,而不是去反馈你是否打出投射物的判定,这个判定已经由客户端上报,服务器只需校验。

-------------

客户端:150ms我冷却好了,投射物动画已经放出去了。
服务器:165ms你刚才没冷却好,现在冷却好了,你可以播放动画了。
客户端:我去你大爷的,我早就放出去了,告诉我掉血动画是否合理就可以。


服务器的tick,这个我不太了解它要干什么,按我的理解,就是每个tick都会处理接收来自网络的位移变量,比如1tick接收到你的位移,触发的投射物飞行矢量,开始计算碰撞数据,并反馈。2tick接收到队友的位移变化,投射物变化,这个区间你的动作没有新的变量进来,仍然按1tick中的矢量位移来计算,并反馈。5个tick165ms后虽然你已经冷却好,没有接收到你的数据,6个tick198ms期间,接收到汇总数据说在5tick期间有一个触发,是计算还是抛弃(如果是怪已经被击败肯定要抛弃,因为已经反馈给队友),如果怪/PVP玩家 还活着是从150ms处计算(客户端的数据包),还是从165ms处(服务器要修正这个数据包?)开始计算。如果在198ms处反馈给PVP的队友,估计他看到的是有个加速动画,瞬间被多个投射物击中秒杀,也有可能。

也有可能实行两种机制,国际服的按实际冷却来触发,因为我们玩的时候,网络延迟仍然可以动(动画时空是线性的),只是没有反馈,反馈来的时候,会加速动画。而国服要等到反馈才能动,就有可能是165ms这种机制,虽然也有加速多个TICK动画的情况出现。国服为什么刚开始时和国际服一样,后来搞成需要反馈才能动?也许是因为国服的小霸王需要休息间隔也不一定的。


本帖最后于  2021-7-9 12:51 编辑

点评

蒽,动画什么的还有触发都在客户端计算和播放,服务器就是判断。这也是有时候突然断网,你人物依然可以走可以放技能,啥都可以干,但是怪不掉血, 而服务器处理你上报的数据1秒最多处理30次,会有一点点偏移但是你肉  详情 回复 发表于 2021-7-9 09:17
回复

使用道具 举报

派蒂

29

主题

640

帖子

4082

积分

Lv.7

Rank: 7Rank: 7Rank: 7Rank: 7

Poe不知道,但d3 游戏帧数是玩家实测出来的,而且经过不断测试得出档位确实存在。
当然,poe没有伤害数字显示,能不能测,有没有人测我就不知道了。
回复

使用道具 举报

28

主题

1811

帖子

3414

积分

Lv.6

Rank: 6Rank: 6Rank: 6

发表于 2021-7-9 03:19
意思是冷却可以一直加,没有什么14到50几冷却回复是几当,14的冷却就是没有50的强,是这样吗? ...

冷却每次增长的值足够多一次触发才有效果,否则只会影响触发的早晚。
回复

使用道具 举报

28

主题

1811

帖子

3414

积分

Lv.6

Rank: 6Rank: 6Rank: 6

发表于 2021-7-9 05:08
理论上,要做得动画和伤害掉血 一致的物理引擎,是要考虑服务器计算tick,但是这会产生一个问题,如果在tic ...

蒽,动画什么的还有触发都在客户端计算和播放,服务器就是判断。这也是有时候突然断网,你人物依然可以走可以放技能,啥都可以干,但是怪不掉血,
而服务器处理你上报的数据1秒最多处理30次,会有一点点偏移但是你肉眼看不出来,
还有交易,捡东西 扔东西 说话等
简单来说,所有的你能看到的画面过程全是客户端在计算和播放,客户端就是你电脑这边,不然30g客户端干嘛的?里边包含了所有游戏内容,里边有猎手等各种极品道具,就说时装。其实你客户端里边已经有了,你只要充值,点击购买,就给你看,不充值不给你看到。

你这边看到的所有画面效果都有对应不断上传给服务器如果没问题就返回结果,返回值就是1,因此不会有延迟,因为一个1太小了,就是1g网络也是瞬间传回,所有判定扔到服务器都是0/1,0就是不通过,1通过,这个好处就是信息处理非常快,就一个字节,1秒能处理30次,这30次指的是同一个数据反复上报,比如你1秒用一个技能30次,它都能判断成功,但是你1秒按了31次,抱歉有一次它没接到。
并不是说1秒只能处理30个不同问题,服务器很厉害的核心很多,可以同时处理超级多数据,
回复

使用道具 举报

多米诺斯

12

主题

218

帖子

943

积分

Lv.3

Rank: 3Rank: 3Rank: 3

假如档位存在,我觉得有三中场景。
1.档位存在于游戏的后端,我不理解服务器为什么是周期性的处理,而且周期是1/30(帧)=0.033秒,就服务器而言,33ms是相当长的一段时间了。从硬件的角度上看,每33毫秒一个处理数据的波峰,对硬件也是一个挑战。
2.档位存在于前端。游戏开发我是外行,我有个疑问,假设档位存在,它解决了什么问题。
3.档位存在于前后端。基本是前两点的总和。
回复

使用道具 举报

28

主题

1811

帖子

3414

积分

Lv.6

Rank: 6Rank: 6Rank: 6

发表于 2021-7-9 03:19
意思是冷却可以一直加,没有什么14到50几冷却回复是几当,14的冷却就是没有50的强,是这样吗? ...

或者另一个说法,你不要以1秒来看,用2秒来看,那就是冷却越高触发越多总伤害就越多
回复

使用道具 举报

3

主题

204

帖子

1445

积分

Lv.4

Rank: 4

coc的档位本来我就个人看不明白,跟服务器都扯上关系了,无非是延迟,延迟不就是来的晚一些,处理后发的晚一些,个人理解就是你攻击间隔要比技能冷却要稍微慢一些,每次攻击可以保证技能已经冷却好了,这样才能保证每次攻击可以有效匹配上技能释放,如果技能cd比攻击间隔慢,就会导致第一次攻击触发技能,第二次攻击因为cd还在冷却就会丢失一次攻击频率,这样不就降低了输出
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

论坛合作、疑问请点击给我发信息 点击链接加入群聊【17173有料社区】