帧同步技术(一)

关于帧同步技术原理及实现方案网上已经有非常多的文章介绍了,但做《月夜狂想曲》的帧同步战斗时还是有遇到很多具体的细节问题,也做了很多相关处理,在这打算分两篇文章记录一下。第一篇主要讲客户端如何保持一致性,会遇到哪些问题以及怎么处理。第二篇主要讲通过哪些改进可以让帧同步有更好的游戏体验。

帧同步的原理是,服务器只负责收集指令,然后以恒定帧率(例如30帧1秒)转发指令,真正的游戏逻辑由各个客户端各自计算,客户端要等到服务器派发的指令才能推进逻辑,没有收到指令时逻辑是暂停的(LockStep)。帧同步最重要的是确保各个客户端在不同硬件不同平台下各自计算游戏逻辑结果都是一致的。在Unity中为了达到这个目标,我们需要解决以下问题:

随机数:Unity自带的随机数因为有可能会被物理系统,粒子系统,UI系统,第三方组件等各种模块使用,我们是无法保证他在不同客户端下每次都能取到统一的随机数的。这就需要我们自己实现一套自己控制的随机数发生器,关于如何实现随机数的算法,之前写过一篇文章介绍《随机数生成算法》。在有可控的随机数发生器后,我们需要查找项目中所有用到随机数的地方,判断该流程是逻辑相关需要被统一接管的,还是表现相关可以由各个客户端自由决定的,从而使用不同的随机数发生器。 目标就是确保逻辑相关的流程下在各个客户端下都能取到同样的随机数。

Continue reading

游戏开发安全问题

这几年开发Unity手游时,陆续会针对安全问题做一些处理,在这里分享一下我们的一些做法。我将安全问题分为四大块,每一块都有很多可以深入挖掘的点,也有专门做安全的部门或第三方支持。这里更多介绍的是一些项目组会用到的安全策略。

—— 数据安全

数据安全首先需要处理的是内存安全,面对大量的内存扫描,内存修改工具,如果项目内的核心数据是裸放在内存中的话,肯定避免不了被改属性或者锁血这些问题。 内存安全我们的具体做法是把关键数据int或float的4字节随机映射到一块36字节的空间内。

Continue reading

UWA 2019

今年4月份参加了侑虎科技举办的UWA 2019大会。相对比Unite大会,UWA大会只有一个会场,不用跑来跑去,而且讲解的点都集中在优化上,更容易落实到细节,内容很实在,对于开发中的项目有很大的帮助。从过完年回来项目组一直赶版本,之前抽空去参加大会也没时间整理,趁着现在测试稳定阶段,稍微空闲一点,整理了UWA2019大会的内容,在这里简单记录一下。

Continue reading

Unite2018

去年的Unite大会在上海,同时有3个会场在进行分享,分别是国内技术专场、国外技术专场、同行分享专场。而今年的Unite大会在北京进行,今年技术专场同时有4个会场在进行,而且没有再按照分类划分。同样是两天的分享会,第一天主要是国外的技术人员分享,第二天主要是国内的技术人员和国内的开发团队分享。今年公司加上我有3个人参加,基本跟手游相关的都有涉及到,而我主要挑渲染与手游相关的分享参加,回来后大家也各自整理了相关的资料做了公司内部的分享。在此整理一下Unite2018我接触到的技术分享。

《从AAA游戏到实时渲染的动画电影》

以前的影视动画制作主要使用PathTracing技术来做渲染,画面比较真实,但耗时非常长,平均三十个小时渲染一帧。现在随着实时渲染技术的提升,越来越多的动画制作团队采用实时渲染技术来做影视动画。现阶段技术难点主要在于:材质、光源、灯光及抗锯齿。分享者是Unity全球技术艺术总监江毅冰,她分享了她自己在制作动画《WindUp》时采用的一些方案,讲解了如何处理上述4个难点,用实时渲染做出高质量的CG动画。

《Unity中的机器学习》

Unity2018自带了一套机器学习框架——MLAgent,它实际上是对GoogleTensorFlow的一个封装。运用MLAgent可以直接在Unity平台下开发机器学习相关的内容,包括训练,测试等等。MLAgent主要分为代理(Agent)、大脑(Brain)、学院(Academy)三部分。训练的方式有两种:Reinforcement Learning通过奖励学习,在不停的迭代中趋向“最优”;Imitation Learning通过模仿学习,与人实时交互,最终趋向于“拟人”。 Continue reading