极限杀戮还有谁?《逆战》前端技术大揭秘 -- 《论道》课堂笔记

发表于2016-05-26
评论0 2.6k浏览

本文未经授权不得转载!

 


  钟建斌 : 《逆战》客户端的主程序;2010年加入《逆战》项目组,主要从事PVE模式开发、性能优化以及客户端稳定性维护等方面的工作。


 


  5月18日晚,由Gad-腾讯游戏开发者平台与腾讯游戏频道共同推出了《论道》栏目。本次活动将于大家一起深入探讨《逆战》前端技术。揭秘虚幻引擎技术如何强大先进?逆战玩法内容迭代如何做到快速敏捷?

 

  精华摘要: 

  问:对于逆战的位置同步和普通的MMO有什么特殊处理?对于敏感类数据如何防外挂?

  钟建斌 : 逆战是CS架构的网游,它的移动同步逻辑应该跟大部分MMO差不多。

  l  客户端在移动的同时把移动趋势告诉服务器;

  l  服务器执行相同的移动逻辑,然后把新的位置和速度发给客户端;

  l  客户端根据服务器下发的位置和速度进行平滑或者拉扯等处理调整;

  l  逆战是CS架构的网游,大部分的游戏逻辑都是在服务器端执行,这种架构本身就有很强的防外挂的特点,不过逆战由于要做更好的射击体验,所以客户端也会执行一些本地的开火逻辑并上传给服务器使用,服务器必须怀疑一切客户端上报的数据,并做好严密的逻辑校验。

 

  问:作为游戏初学者,如何更好的学习前端游戏开发?

  钟建斌 : 每个人的知识、经历不一样,且工作和学习环境也不一样,在这里,我将分享一下自己游戏开发的历程,希望大家可以从中得到一些启发。

  l  首先,基本功学习是非常有必要的。做逆战前,我花了大概3个月的时间,一边完成当前工作,一边抽时间来学习虚幻3引擎。当时我把虚幻3官网的视频教程完完整整地学了一遍。(我觉得这一次基本功的学习很重要,让我对游戏开发和虚幻3引擎有了初步的比较全面的了解);

  l  独立地做事情,它对快速提高个人能力有很大的帮助,没人能依赖的时候才能把人的潜力给逼出来;

  l  经过了2年的PVE模式开发,我感觉从逻辑层面上已经很难让自己的技术能力有更进一步的突破。我开始全面的学习引擎的底层技术,每半年都会制定一些引擎底层模块的学习计划,每天都会花时间去系统地学习引擎某个模块的内容,比如文件系统、内存管理、脚本编译和执行原理、碰撞检测、网络同步、渲染等等,一边学习一边做笔记、做分享ppt。这种习惯一直坚持到现在,只要游戏模式内容开发进度不紧,我都会坚持每天学习。

 

  问:逆战的性能优化点都在哪些地方?自动更新的机制是什么样的,以及线上修复bug是一个什么样的流程?    

  钟建斌 :

  性能优化点主要集中在:

  l  客户端的GPUCPU、内存优化;

  l  游戏服务器的CPU、内存优化;

  l  逆战用的是腾讯公司端游的统一登录组件(TCLS)来实现版本的自动更新;

  由于逆战是CS架构的网游,大部分决策性的游戏逻辑都在服务器执行

  l  如果游戏逻辑出了bug,我们都尽量在服务器上直接修复、测试然后后台发布;

  l  如果是客户端出了比较严重的问题,就只能通过发布客户端版本进行自动更新来修复bug


  问:请问FPS、大地图类MMO以及DOTAMOBA在状态同步方式方面最重要的差别是什么?逆战在对状态同步方式进行技术选型时,有作哪些考量?

  钟建斌 : 网络游戏中,游戏服务的架构大致可以分为2种模式,分别是CS模式和P2P模式:

  l  CS模式下,游戏状态服务器只有一个,客户端没有自己的游戏状态,所以不存在游戏状态同步的问题,但服务器可能会同时服务很多的玩家。由于受到机器性能和网络带宽等硬件资源限制,大部分情况下都无法进行非常严格的检查和处理;

  l  P2P模式下,每个客户端有自己的游戏状态,所以需要进行游戏状态的同步。由于采用端对端的通信方式,随着玩家数量的增加,通信量会呈指数级增长,所以同时接入的玩家数量会有限制,只适合少量玩家的竞技类游戏。同时由于玩家数量少,可以进行比较精细的计算,可以实现高精度的打击体验。

  l  P2P模式在实现方案上也大致分3种:

n  无主机:方案简单公平但体验容易受限

n  有主机:能保证玩家体验,但安全性较低

n  服务器主机:结构上已经脱离了P2P的设计,安全性高,保证玩家体验,但对服务器负载有较高的要求

  l  FPS游戏对安全性有很高的要求,大多数采用的是CS模式;而且在玩家数量不多的情况下能保证较高的精准度。

  l  大地图类MMO由于要承载大量的玩家,基本上只能使用CS模式。

  l  DOTA类MOBA在方案上有较多的选择,CS模式和P2P模式都可以。

  l  逆战是典型的CS模式,而且虚幻3引擎本身就是用这种同步方式。


  问:在PVP里面客户端和服务端非瞬发型弹道如何做校验?服务器压力如何? 

  钟建斌 :

  l  非顺发型弹道在服务器创建本体,在客户端创建副本;

  l  两端分别执行相同的运动逻辑;

  l  对于非直线型的运动轨迹,服务器会每帧下发位置和速度来矫正客户端的运动轨迹;

  l  服务器压力还好,非瞬发非直线型的弹道轨迹不多。


  问: CF手游生存模式,怪物同时出现有几十只,怎么做的优化,可以使得手机支持这么多角色的呢?蒙皮开销怎么优化的呢?

  钟建斌 : 我本身不是做CF手游的,但大致了解过移动端的一些性能瓶颈

  l  在移动端上,DrawCall数量是影响性能的最主要的因素;

  l  减少场景和UIDrawCall数量:

  1 有时候整个场景就是一个独立的模型

  2 UI尽量合并批次

  l  每个角色只用一个DrawCall

  l  蒙皮方面的开销,我想到的就是尽量减少骨骼数量、减少骨骼影响的点的数量,多采用SIMD方式来并行化处理,或者采用GPU蒙皮

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引