回顾一下
是的,我又来写 2022 年的计划了。
之前 19 年刚毕业入职给自己定的计划是,跟上大部队的节奏。从自怨自艾的人生环境中暂时摆脱出来,而不是一直给自己施加压力。如果能在现在的公司拥有自己的一席之地那则是更好。
19 年开始到 20 年年中的这段时间,这段时间大概是自己成长最快的时间。其实这个时间说是成长快倒不如说是自己以前实在是太烂了,积累基础的关于 coding 的东西已经精疲力尽了。而且锻炼的方式也很简单粗暴,就是不停地揽活,做自己觉得好像担心的东西,就这样一年坐下来,基础的业务逻辑的东西感觉已经差不太多了。这个阶段结束之后,开始担心自己的成长问题,也就是所谓的"瓶颈期"。虽然现在看来那时候的想法非常可笑,那时候的水平远远没到触碰到天花板的时候,无知无畏的成分居多。但是内心的感受确实是非常真实的,就是感觉自己一直在纯粹重复着些基础的业务逻辑。
20 年开始到 21 年中的这段时间,是转变方向的一段时间。20 年中稀里糊涂地开始做所谓的主程了。首先还是从来应届生带人开始,然后整个项目组的各种东西基本都放手给我来做。这段时间其实是一个非常迷茫的时期,因为自己有太多那种非技术上的,或者是技术上的困惑了。另外也深刻感受到时间和精力的有限。从纯粹的技术执行人到需要去逐渐做一些管理的东西,其实是一个很大的转变,这其中的个中心酸怕是只有自己体会了才能明白。
这个阶段依然是给自己定的目标是比较有趣的,一部分是了解客户端,一部分是形成自己管理的体系,一部分是日常的业务逻辑给大家搭建框架,日渐精进。另外还抽空看了一些其他的,一直以来想做的东西,比如 opengl 也好,unity 也好,UE 也好。但是仅限于玩,并没有实际的战斗经验。
其实这段时间很多时候是很迷茫的,只是为了学习而学习。知道自己想要什么,但是执行起来是遇到各种困难的。但是领导说的很对,很多时候浅尝辄止快速自通的东西也是非常容易忘记的。越是经历复杂的东西,越是印象深刻。
所以那时候其实自己需要明确的一点就是,不要急。急功近利一般都会让我自己失去方向,欲速则不达。踏踏实实干好已经有的东西不去好高骛远是最重要的。
2021 年中到现在就是另一个阶段了,首先因为搬了公司,离开了住了快三年的北辰。然后,20 年是大量带新的一年。虽然是之前就被定好的目标,也是之前就做了的东西,但是今年一年几乎所有的新人都是我带的。20 年一年加起来带了 3 个人,21 年直接带了 7 个人。
一方面是公司的人数和规模发生了一个大的变化,另外我们的组织结构和工作方式也发生了一个比较大的变化。因此这个阶段我需要做的事情变得更多了。很多事情已经不是如果我做不做会不会影响自己的职业生涯评价的问题了,很多事情已经是大部分内容会维系到自己身上的。
当然这个阶段的中段,迎来了 unity 项目的机会。虽然说现在是对 unity 本身的东西其实没太多神秘感或者是期待感了。但是自己还是认为我在技术上的成熟还是需要一个从头开始的上线项目来打磨,不然自己永远只是呆在其他人设定好的框架里面慢慢摸索,提高实践的机会有限。
这个阶段刚好是距离我工作开始,三年接近结束的阶段。2022 年 3 月就是我工作三年的日子了。回头看过来,其实大概的方向是按照自己的预期执行的,而且比自己预期的结果要好很多。三年前我给自己定的目标就是能够成为公司不可或缺的一部分,自己对游戏的内容基本有大概概念,能够独当一面,努力追上以前的自己。现在看来目标已经达到了。
新的目标
其实今年新的目标非常有限,我给自己定的方向是,如果我的目标变得越少,证明我对自己需要去做的事情越清晰,简单来分大概是下面几样。
- Unity
- Cocos 引擎优化
- 图形实践
- 管理
Unity
第一块是接下来一年的工作重心。整个 Unity 的项目都会是今年决定性的一个部分。因为可能关系到接下来几年的情况。如果这个项目成功,至少在程序上成功,那么我的能力会有一个新的长足的进步。如果这个项目失败,不仅仅是我自己的问题,可能也会在其他的层面来动摇一些事情。
这块需要做的方法就是投时间进去,不停地看代码,不停地做,不停地阅读技术文章,不停地思考。有点像我最开始做功能的时候那种感觉了,只有不停地弄脏自己的手,才能真正学到东西。努力去实现一切自己想要去实现的东西。
这件事的关键结果就是 1 年以后自己对 Unity 的熟悉程度和理解力更上一个层次,至少可以独立来负责一个 Unity 的项目。具体的关键结果可以对标一个 Unity 岗位的高级 JD,也许一年之内是没办法直接达到高级的水平,但是可以把高级的一些要求来作为自己 JD 的部分。前面 4 项是必须需要的,后面的可以根据自己的需要或者项目的进程来自行拓展。
- UI 框架结构。UGUI,业务开发框架,常见的 UI 部分性能优化。
- xlua 的热更技术
- 资源管理部分
- 性能分析模块
- 动画模块,包括 Animator 和 Timeline 的 playable 脚本模块
- 客户端 SDK 代码接入
- 游戏的 build 管线流程,安卓平台和 iOS 平台
- 场景渲染烘焙模块
- AI 模块,比如 Navmesh,或者常见的寻路算法
Cocos2dx
Cocos 的引擎优化算是自己根本上的一个进阶思考。毕竟 Unity 是不开源的,但是 Cocos 可以看到很多东西,而且也是目前来说自己最熟悉的引擎,可能考虑这部分结合着带新做一些技术分享或者技术分析。
需要做的事情其实是查崩溃,看源码,像查 peer 表那样针对某个基础问题进行深入的研究。另一方面是在带新的过程中总结一下这部分的内容。另一部分项目也是需要做点东西的,但是这部分更多的是做引导,而非做具体的内容。另外进阶的就是根据其他的引擎或者其他的内容来处理相关的东西,比如说编辑器,比如说渲染管线的修改,比如某些资源内存的管理,比如说性能 profiler 的指标。
这件事的关键结果不太清晰,也暂时只是列出来了自己想要做的东西,至少要做到以下这些其中一条:
- 每个月至少解决 1 个复杂的崩溃问题,深入到不同底层的
- 补充修订版本的《我所理解的 Cocos2dx》供新人使用
- 重构 Cocos2dX 的渲染部分,为 Cocos2dx 接入新的渲染管线,比如 Vulkan
- 2dx 的 2d 编辑器系统,接入第三方平台的 FairyGUI 或者是其他东西
图形实践
这块我没有写“图形学”,而是写了图形实践。
因为对实时渲染,游戏的实时渲染来说,不弄脏自己的手来做一些具体的东西,是很难从中获得什么东西的。
从最开始的混沌的理解,到现在对各个模块有所了解,目前实时渲染需要学习的模块在我的脑子里逐渐清晰起来。但是光是自己清晰其实是没有意义的,还是要靠自己慢慢实践来理解其中的内容。
我把这部分的关键目标分为几个部分,基本都是要和自己的具体工作结合起来的。但是也必须有理论部分的学习,没有理论部分的支撑自己的这部分工作是很难做出成绩的:
实践部分,至少做到两条
- 熟悉 Unity Urp 渲染管线
- 改进 Cocos 的渲染流程,支持高帧率的全屏处理的 Shader,可以支持任意的后处理动 2D 画
- 自己的渲染器,继续写 BlueBerry 的内容。有时间可以考虑平台换成 Vulkan 或者 Dx,如果没有时间就继续 LearnOpenGL 里面所有的内容都自己在代码里实现一遍
理论部分,至少做到两条
- uwa 的渲染知识 tree 部分
- Rtr4。不需要整本书读完,如果需要看某些具体章节的实现,比如 Shadow 或者是 GI 的内容需要自己在里面做参考。至少把整本书的内容大概的概略涉猎一遍,具体做项目需要用到的核心技术研究一下,如果需要买特定的书也去买一下
- GPUGems 上一些效果的实现,或者是某些常见 Shader 效果或者是某些特效的实现方法
- Games 的入门系列,闫老师的两门渲染课程。算是做一个系统性的入门
管理
这部分是最难定义的。
这里包括两个部分,一个部分是带新人的部分,一个部分是带项目组的部分。但是这种比较抽象的工作很难用一个具体的内容来做衡量。
关键结果
- 带新体系资料
- 文档建立
- 技术交流会
- 绩效评价体系
总结
今年也 26 岁了,接下来的 5 年会是自己能力越来越成熟的时期,希望自己不要放弃,日渐精进。