在网易游戏的第二年——Jerish的2020总结
共 6213字,需浏览 13分钟
·
2021-02-09 18:32
各位读者朋友好,我是Jerish!不知不觉又是一年春节来临,在这里先预祝各位新年快乐,一切顺利!
2020年是风云变幻的一年,疫情对我所在的游戏行业造成了不小的冲击和影响。但这一年也发生了许多振奋人心的大事,次时代引擎虚幻5的公布、XBOX和PS的新主机相继亮相、国产游戏黑神话悟空轰动游戏圈...作为一个普通的游戏开发者,我既是历史的见证者,同时也在以微小的力量推动着历史前行。
按照惯例,这篇文章是我对这一年学习工作的复盘和反思,希望这个习惯能够持续地引导我在2021年继续成长,也希望这些成果和经验能给大家带来些许的启发和帮助。
一、这一年我做了什么
作为一名还在成长中的游戏开发者,我这一年的核心主要还是在项目经验的积累和专业技能的学习上。
1.输出《细谈网络同步在游戏历史中的发展变化》系列文章
2020年初的时候,我受邀撰写网络同步相关的技术文章。起初只打算写一篇总结性的文章来发布,然而随着不断的学习和深耕,我发现对很多问题的理解有不足或出入,于是便一遍遍地看论文和视频反复学习,最终花了接近半年的业余时间完成了整个系列。可以说,这是我目前所有输出里质量最高的一个系列,既客观完整地梳理了网络同步的发展历史,也总结涵盖了几乎所有同步相关的技术,算是为游戏行业的专业领域添补了一点点空白。为了方便大家阅读,我做了适当的补充和调整并将其整理成了PDF(竟然70多页,可以考虑丰富一下细节出书了),年后会免费给大家放出。
2.个人成长与工作瓶颈的突破
我在知乎上将自己定位为一名Gameplay程序,主攻同步、回放、角色、技能、3C(关于3C后面我会出一篇科普文)这些与游戏玩法高度相关的内容。技术上涉及网络同步、动画、物理、材质、资源加载、性能优化、UI、多线程、GC、Lua、C++、Socket、Http,Linux,Nginx,Php等。
Gameplay这一块深入来看还是比较复杂的,或者说比大部分游戏开发者想象中要难,比如FPS与MOBA的网络同步、Minecraft的地形生成与销毁、ACT的战斗系统。拿Unreal引擎来说,它的GAS(GameplayAbility)可以在商业化项目中解决技能、Buff等因为网络不同步导致的表现异常的问题,而与GAS同等质量的技能系统鲜有项目可以自己搞出来。
工作之余,今年也看了不少专业书籍与资料来扎实基础。书籍方面,有《网络多人游戏架构与编程》、《游戏编程精粹》(部分章节)、《Lua程序设计》、《大型多人游戏在线开发》、《深入理解计算机原理》(重新完整地看了一遍,依然有新的理解和收获);语言方面,零零碎碎地看了一些C++模板(研究了一些虚幻内置的数据结构)、多线程编程、反汇编、C++11、Lua等语言基础相关的文章;游戏开发方面,通过阅读文档及源码的方式进一步了解了ECS架构,虚幻引擎的动画系统(IK、Rootmotion),物理引擎架构等。此外,在撰写网络同步系列期间顺便梳理了一波游戏服务器框架,并在简单了解了微服务和ServicMesh的基础上对比了与部分游戏服务器框架的异同。
得益于这些积累与收获,工作上的个人瓶颈也有了一定程度的突破,独立/协作完成了不少功能开发和优化,实现了理论与实践的良性循环。
PS:我比较爱逛知乎,看到好的文章基本上会在当周消化(不排除有一些太肝了,就在收藏夹吃灰了)。这里列举一些,大家自取所需
计算机基础:
如何设计内存池?https://www.zhihu.com/question/25527491/answer/56571062
Lua 的速度为什么比Python快? https://www.zhihu.com/question/25307289/answer/104643646
Cache的基本原理 https://zhuanlan.zhihu.com/p/102293437
网络相关:
某百万DAU游戏的服务端优化工作 https://zhuanlan.zhihu.com/p/341855913
网络游戏开发中的通讯杂谈 https://zhuanlan.zhihu.com/p/347389861
端游、手游服务端常用的架构是什么样的?https://www.zhihu.com/question/29779732/answer/45791817
网络游戏同步技术概述 https://zhuanlan.zhihu.com/p/56923109
帧同步(LockStep)该如何反外挂 https://zhuanlan.zhihu.com/p/34014063
微服务架构是什么?https://www.zhihu.com/question/65502802/answer/802678798
美国人如果把根域名服务器封了,中国将会从网络上消失?https://zhuanlan.zhihu.com/p/185674120
物理:
【物理引擎系列】开篇 https://zhuanlan.zhihu.com/p/42669063
游戏破坏系统简介 https://zhuanlan.zhihu.com/p/346846195
游戏物理模拟简史 https://zhuanlan.zhihu.com/p/106977617
我们需要怎样的物理引擎?https://zhuanlan.zhihu.com/p/132681462
如何入门物理引擎? https://www.zhihu.com/question/28838464/answer/754834794
引擎:
UE4 关于主循环的资料 https://zhuanlan.zhihu.com/p/225465983
多线程渲染 https://zhuanlan.zhihu.com/p/44116722
动画/Gameplay:
Motion Matching技术介绍和实现 https://zhuanlan.zhihu.com/p/136971426
游戏动画技术总结 https://zhuanlan.zhihu.com/p/340313373
我开发的角色动作系统 战斗3C相关 https://zhuanlan.zhihu.com/p/67143501
战争迷雾机制考据 https://zhuanlan.zhihu.com/p/24828925
如何实现一个强大的MMO技能系统——BUFF https://zhuanlan.zhihu.com/p/150812545
3.在自媒体上持续输出并提升自我影响力
目前我知乎的粉丝数约为2万,CSND的阅读量111万,公众号近期的平均阅读量也由原来的300左右上升到1000左右。公众号有44篇原创,涵盖游戏科普、游戏开发、C++、面试总结(面试经验分享视频)、对行业的思考和总结等。其中《使用虚幻引擎4年,我想再谈谈它的网络架构》一文在CSDN、GameRes等多个媒体上被大量转载,仅在微信平台上就收获了超过3万的阅读量。
实事求是地说,相比于其他公众号我的更新频率并不高,关注的粉丝也不算多。一方面是因为我希望尽量在不影响身体和工作的前提下保持高质量的输出,毕竟一个人的知识储备有限,文章的质量需要足够多的时间进行输入和学习才能保证。另一方面,游戏开发的圈子相对较小,很多技术又比较精专,受众自然有限。所以看到不少做互联网基础知识的公众号半年多就有1万粉丝我还是很羡慕的。虽然在公众号领域,游戏开发这一块还有很多空白(大多数为娱乐化内容),但我相信随着游戏行业的发展和从业人员水平的提高,这些空白会越来越少。
此外,今年有接到一些广告合作的邀约,教程推广类偏多。除了考虑读者的观感,我也对教程难度与粉丝的契合度进行了评估,并尽可能地保证每篇文章都有足够多的干货。今后我会选择性地进行推广,并控制好质量和频率。因为我始终相信号主与粉丝在广告植入这件事上是可以做到双赢的,比如我在B站关注的不少优质Up主,“盗月社食遇记”,“老师好我叫何同学”,“兔叭咯”等,他们的广告很有创意、与视频内容结合的也很好,我真的可以笑着看完。
二、我的收获有哪些?
1.项目
在去年年终总结的文章里谈到了游戏项目的分工和管理,介绍了游戏开发的一些基本规范并强调了流水线的重要性(简单可以概括为CI/CD持续集成系统)。通过这一年的学习和成长,我对大型项目的推进流程有了更为清晰的认识,也了解不少项目在发展中容易面临的问题。
我认为项目推进的核心有三点:一是做好内容,二是减少错误,三是提高效率。好的内容需要优秀的参与者来产出,而减少错误和提高效率需要制作辅助工具并建立工作规范。很多时候减少错误甚至比做好内容还要重要,因为方向错了再好的内容也就失去了价值。有统计得出,程序员每产出1000行代码就会出现70个bug,工作时间的75%其实都在修Bug(扎心但真实)。既然任何团队/个人都无法避免错误的出现,那么通过提高效率来容错就显得尤为重要。
这里简单列举一些项目中可能用到的规范,
文档平台:通用的工作流程,比如环境搭建、资源提交规范等,这些内容成文之后甚至新人都可以直接上手。有的团队直接使用Gitlab作为文档平台,也有的团队使用石墨文档、Confluence等。
打包流程规范:考虑到程序代码和资源可能会互相依赖,因此程序要保证提交的代码不影响当前资源,并且新的依赖性资源需在代码合入后再提交。
资源管理规范:资源分为美术资源、配置资源、引擎特殊资源等多种类型,每种资源都有特定的规范。比如美术提交的文件大小、骨骼数量、文件格式、面数要符合程序给出的要求,配置文件要按照固定格式CRUD,引擎资源的修改与删除流程要按照指定流程。很多时候一个不经意的操作就可能直接引发崩溃从而影响所有人的工作,因此遵守流程上的规范能够最大程度地使程序避免代码/工具上的人为错误。
UI规范:要规定好不同类型UI的制作流程及使用场景。一个优秀的UI系统,要有完善的UI管理模块、易用的编辑器、合适的层级配置机制以及通用且可复用的缓存。从开发上来说,写UI逻辑不难,但管理好UI系统却并不容易。UI的特点是频繁的删除和创建,很容易因为内存泄露、内存占用过大、GC开销、加载卡顿、对象数量太多、分类不清晰等造成各种Bug。
对于大型的团队,最好要有完善的可查询可追溯的辅助信息系统,这可以极大的提高工作效率。对于个人来说,在调试指令,编辑器工具,配表工具等效率优化方面多做尝试也容易在工作中展露锋芒。
工作了这么多年,我发现经验与视野真的非常宝贵。即使你技术很强,基础很好,没有经验一样会浪费许多无意义的时间/金钱。比如国内很多团队做过MMO,但在其他游戏类型方面的经验几乎为0,这样的团队闷头设计的第一版甚至第二第三版FPS/ACT关卡大概率是没法玩的(除非抄袭)。类似的,有一些新的UE4团队很容易因为信息闭塞在错误的方向上不断摸索,技能系统搞了许久,Bug却越来越多,然而换成GAS就可以解决很多问题,一步到位。因此,项目在实施具体方案前一定要向有经验的团队取取经,能直接沟通学习最好、联系不到也要广泛了解同一类型游戏的实现方案,避免走错方向,南辕北辙。
2.通用能力
通过这段时间文章的撰写,我掌握了资料查询的能力。B站做科普的Up主们都看似无所不知,其实在发布作品前他们对目标内容的了解可能也相当有限,需要靠大量的相关调研做支撑。不过有经验的团队大多数都已经形成了相对完善的调研流程,从网上获取各种参考资料自不必多说,实地考察,咨询专业人士等都是非常有效的手段。其实即使只通过互联网,资料的丰富程度也已经远超你的想象。如果你研究的领域有比较经典的书籍,那一定不要错过,同时书籍后面的Reference,都是比较经典的论文、官方文档,按图索骥就一定能获得更多丰富的内容。
此外,在自媒体经营上,我的文笔和排版布局审美确实都有了一定的提升,也掌握了一些运营的基础知识。任何一个领域都有很深的门道,公众号经营的难度虽算不上多高(很多做技术的朋友可能不以为意),但是想做好也并不容易。
3.技术
首先,得益于按照CSAPP这本书的内容重新梳理了计算机体系架构,我个人的知识体系更加完善和扎实,也对各种游戏技术有了更深的理解。其次,通过工作上的锻炼和实践,我解决问题的能力有了不小的提升,无论是从未见过的问题还是全新的知识领域,我都可以从容地面对了。然而有些问题确实很难在书本上找到答案,所以我平时会将工作中遇到的一些疑难杂症进行总结和分析,从而将其转化为自己的经验。
如果说在哪一个具体的技术方向有所成长,那无疑就是研究了大半年的“网络同步”了。现在的我已经可以清晰地描述帧同步/Lockstep/快照同步/状态同步的异同并分析各种同步优化手段的优劣了。
4.其他
身体方面,通过坚持不断的有氧、健身、拉伸等运动,今年我的身体状况以及精神状态相比之前好了许多。所以强烈建议大家保持运动、注意休息,我们需要一个健康抗造的身体去应对未来几十年的学习、工作以及各种变化。
心态方面,之前逛知乎很容易被各种大佬的炫技打击到,但现在已经不太在意了。大家都是普通人,离开自己的专业领域可能并无优势可言。你所在的位置与你的价值自然是相匹配的,找到自己可以学习的目标并为之努力即可,与超出你水平很多的人相比只会徒增烦恼。人为什么不开心?就是因为想的太多。
三、结语
我会在2021年完成我的C++面试经验系列,并继续做游戏技术科普(包括外挂相关、游戏发展历史等)和游戏技术分享。如果读者们有想看的内容或建议,也可以评论或私信我。此外我还有个微信群和一个QQ群供大家进行游戏技术讨论,可以扫码添加。
最后再次祝大家新年快乐,事业和学业都蒸蒸日上。
——Jerish
往期文章推荐
虚幻引擎技术系列【使用虚幻引擎4年,我想再谈谈他的网络架构】
游戏科普系列【盘点游戏中那些“欺骗玩家眼睛的开发技巧”】
C++面试系列【史上最全的C++/游戏开发面试经验总结】
校招求职系列
游戏开发技术系列【想做游戏开发,我应该会点啥?】
游戏开发那些事
我是Jerish,网易游戏客户端开发工程师,
这里会定期输出技术干货和游戏科普的文章
回复"gamebook",获取游戏开发书籍
回复"C++面试",获取C++/游戏面试经验
回复"操作系统",获取操作系统经典书籍
游戏开发交流群(875867499)