不同的引擎(项目)造成卡顿的原因可能可能不同

不同的引擎(项目)造成卡顿的原因可能可能不同

游戏开发 程序厉害吗_游戏开发程序_游戏开发程序笔试题

不同的引擎(项目)造成卡顿的原因可能不同,但是对于这种人海的情况,一般有下面几个原因:

1.渲染上(一般是主要原因) 由于角色太多,而一般人形角色身上的三角面都比较多、材质丰富,所以drawcall数量很高。

解决:一般是减少三角面数据,加lod,减少材质数量,渲染实例化(如合并相同材质的drawcall)

2.物理上 现在很多游戏都用上了物理引擎(phyx,havok),题主说的这些端游也不例外。每个角色在移动的时候都在每帧不断地更新与查询物理数据游戏开发程序,如果角色的碰撞体做的复杂的话那必卡无疑了。

解决:碰撞体全都换成简单碰撞体(胶囊体,球体),如果需要可以动态开关身上模型的碰撞。在某些特殊条件下关闭物理。

3.游戏逻辑 包括AI逻辑(寻路算法,行为逻辑),动画,移动等。

解决:寻路算法优化,移动逻辑优化,减少每帧要做的计算量(如每隔几帧执行一次,用定时器等),角色分批更新(一帧或者几帧只更新部分角色)。

4.网络同步 对于网络游戏,每个npc都有一定的数据需要同步(最基本的移动数据等)。特别是对于虚幻引擎,所有的收包发包都在主线程,默认的移动同步数据量不算小,角色身上还可能有很多的replicated属性(或者rpc)。如果一个服务器上连接的客户端非常多,那么对于服务器的压力是相当大的,客户端也可能感觉npc一卡一卡的。

解决:虚幻是udp的,收包发包开多线程可能作用不大。不过,里面的一些逻辑可以通过多线程优化,比如并行处理多个链接的actor同步。如果是tcp的地图场景,肯定要用异步+回调(或者io多路复用)的方式处理。另外,根据游戏情况适当精简同步数据,比如虚幻默认同步很多移动数据技能特效,但是像旋转速度这种数据一般没必要同步。

上面列举了一些常见的情况,实际上导致卡顿的原因可能很复杂,一般需要我们具体用性能分析工具(比如英特尔的vtune)去寻找热点游戏开发程序,然后对症下药。

文章来源:http://mp.weixin.qq.com/s?src=11×tamp=1682328642&ver=4488&signature=-gK7*MXjwKOBSJg8ha6JJ0cx2QBDCyjh-kjTRjL58iyIiStTOIbFK4VhsaEExPUaS86RPyhjWlpVidL7YsVpxB*YucLNwbVbICweI-XY9yWyEV7SyShqKtu0fvlMmjtY&new=1