人气 300

[业界] 坚守初心,白鹭引擎七年之痒 [复制链接]

九艺网 2020-12-12 21:09:58

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
161926p01q1xf0f0nz8f00.jpg

作者:王泽
本文转载出自知乎:https://zhuanlan.zhihu.com/p/335604641

各位开发者好,我是白鹭引擎团队的王泽。

七年前的今天,我敲下了白鹭引擎的第一行代码,此时此刻我的孩子也终于要呱呱落地,即将成为一个父亲,我也有很多感慨。

这两年经常有一些朋友来找我关心白鹭的动向,因为行业环境的原因我们市场发声变少了,产品发布节奏也慢了下来,人无名则安心练剑,年关将近,作为白鹭引擎的作者,我来和大家聊一聊2020年白鹭引擎团队专注在哪些工作上,以及我们2021年的产品重心会放在哪里。

今年我们受疫情影响,取消了所有线下的开发者沙龙活动,并且也降低了市场费用,把相关人员和精力放在了针对开发者的技术支持和服务上。我们重点维护了多个核心开发者微信群,对整个文档中心和论坛进行改版,提升了针对开发者问题的响应速度和服务质量,相信许多开发者能感受到我们这一点的变化。

接下来简单和大家聊一聊今年白鹭引擎的研发团队主要为开发者做了那些新的改进。

2D引擎稳定成为中重度手游首选

首先和大家聊聊2D引擎部分。由于广州是使用白鹭引擎开发中重度2D/2.5D手游的大本营,因此我2019年有超过半年时间都在广州各大厂商长期驻场,帮助这部分开发者解决他们在使用白鹭引擎开发重度游戏时遇到的各种问题。然后在2020年的整个上半年我和团队主要的工作就是将这部分工作成果进行不断打磨,发布至 Egret 5.3 版本系列中。

161926x7uh9611rrmsjhhs.jpg

在这其中最重要的改动就是完全重写的白鹭编译器。在和这些开发者沟通之后我发现,大部分开发者都在为编译速度、生成包体积、模块拆分等工程化问题困扰。这主要是因为白鹭引擎在2014年初编写的命令行工具已经愈发无法适应动辄超过数十万行代码量规模的项目。因此我在 2020年为开发者重写了新的编译器,借助业界最流行的(也是2014年的时候还尚未出现的)Webpack 打包器以及针对白鹭项目定制的扩展,并进行了大量的向下兼容处理工作以保证现有项目可以以尽可能低的成本迁移至最新的编译器(特别感谢阿里巴巴灵犀互娱的游戏研发团队为我们团队贡献的代码以及十余家游戏开发团队在内测阶段提供的积极反馈)。通过新的编译器,这些重度游戏的增量编译速度平均从50秒降低至5秒。除此之外,我们提供的新编译器不仅可以帮助开发者大幅提升编译速度,也可以通过 tree-shaking , split-chunk 等技术改善开发者非常关心的代码尺寸问题,后续我们还会通过 custom-typescript-minifier 来进行进一步的优化。

161926y7afrffnmfa9e414.jpg

除了编译器之外,2020年我们和网易合作了网易自研的测试自动化测试工具 Airtest 的白鹭引擎侧实现,并将其应用至网易采用白鹭引擎自研的《梦幻西游网页版》中。

通过上述工程化改进,使用白鹭引擎开发的2D重度游戏可以承载更多的体量。并且随着行业的变化,在今年越来越多的开发者逐渐将原生渠道作为游戏的发行重点。而白鹭引擎团队虽然2014年就发布了支持将HTML5游戏发布到 iOS/Android 设备上,但是其性能和稳定性一直广受开发者的各种吐槽。我们在每年都在针对发布原生游戏这一项工作进行不断优化。

白鹭引擎不再是一个H5小游戏引擎,大步迈向全平台的游戏引擎

今年初 Egret Native 正式迈入 1.0 正式版本。正式版本发布之后的这一年中,我们从开发者反馈的各种问题入手,逐个针对了包括 音频系统、网络系统、输入法、文字渲染、原生渲染在内的多个模块进行逐个渐进式重构,每个版本都为开发者带来了更稳定和性能更好的新版本。除此之外,我们还紧跟苹果AppStore 和 GooglePlay 商店的上架和发布流程策略进行调整,并及时更新文档、教程与技巧,以帮助开发者快速过审。而这些开发者除了将手游发布到国内市场外,多数都会有发布到海外全球市场的需求。针对这种情况完善了多语言的支持,支持非utf-8文件加载,完善了泰文、韩文等复合文字的输入和显示。

161927d88p1a8zfutsv89s.gif

根据工具端的统计,目前已有超过4000款白鹭引擎的游戏被打包上传到AppStore和Taptap渠道发行。

通过 Egret2D 和 Egret Native 在这一年的 改善,我相信如果您想要开发一款包含大量复杂UI和动画的2D/2.5D重度游戏的话,白鹭引擎将是您的最佳选择。

3D引擎日渐成熟且编辑器已稳定迭代

除了2D之外,我们今年对引擎的3D部分终于开始了稳定的迭代和进步,而不像前几年那样几乎每一年半都推翻自己重来一次。

现在回想起来,如果说白鹭引擎在设计时最大的问题是什么,我觉得就是他是一款以程序员为核心的开发工具,而非以游戏设计师(策划)为核心的创作工具。虽然白鹭引擎中也有可视化的工具,但是整体的产品设计思想都是围绕着程序员这一工种进行的,当然这也和我们中国游戏行业在特定年代工业化不成熟的局限性相关。

最近看了一篇文章,心动游戏CEO黄一孟提到,心动联合创始人戴云杰的企业微信签名是「2D游戏的策划用Excel做游戏,3D游戏的策划用引擎做游戏」。这篇文章看完之后我感到感慨万千,Egret3D 经历在2016年和2017年分别经历了两次失败的研发过程。第一次是按照做2D渲染框架的思路去开发一款3D引擎,第二次则是参考 Unity 的API 设计,但是仍然仅仅是一套代码库而已,本质上都是围绕着程序员为中心,把游戏策划作为一个“填excel表”的工种,而不是引擎的直接用户。这种做法使得我们的之前开发的3D引擎虽然可以做出产品,但是用户的使用门槛非常高,相比其他主流3D游戏引擎(比如Unity,Unreal)在开发效率上存在巨大差距。这些惨痛的经历对我们团队也是很深刻的教训,让我意识到了一款优秀的3D引擎必须首先是运行时与可视化编辑器一体化的产品,并且其运行时在开发前就应充分考虑编辑器需求而去设计。

在 Egret3D 经历了2016年和2017年连续两次的失败之后,我们第三次从头出发,打磨三年,在2019年底发布了可视化3D编辑器 EgretPro 。它代表着我们对一个真正的游戏引擎该有的样子的初步描绘,即采用了组件实体系统架构,这种架构强调以数据为中心,将业务逻辑和数据进行分离,而这也是近两年国内外游戏引擎设计方向上的一个趋势。就实践项目来看,使用这种组件实体系统架构存在几个优势,一是方便进行跨编程语言引擎的设计,二是关注点分离,方便数据在不同业务场景下的差异化进行横向复用而非传统的纵向复用。

161927dkomo6zzy69key0e.jpg

EgretPro作为白鹭新研发的3D编辑器,底层的包含了我们这两年新研发的基于 WebGL 1.0 的渲染器。目前EgretPro比较适合开发两种类型的游戏,一类是轻度休闲3D游戏,另一类是在现有重度2D游戏中添加3D场景和人物等元素。我们今年针对这两种场景分别做了详细的视频教程,不少开发者都表示看完教程之后直接下载示例Demo就可以快速上手。

在EgretPro发布之后有不少开发者向我询问,什么时候可以比肩Unity,Unreal这样的画质效果。我认为这一步对白鹭来说还需要很长的路要走,并且在2021年也不是白鹭的既定目标,我想借这个机会也和各位开发者说说我的想法。

Egret Pro 3D功能演示

首先,我认为一款优秀的游戏引擎应该发挥其优势,而不是盲目的去和市面上其他竞品比较。白鹭引擎既然目前定位在 Web平台(包括小游戏平台)并逐步向原生手游平台扩展这一目标,就应更务实的去设计这些平台所能承载的运行时功能。说的直白一些,如果只是单纯的去实现 Unity/Unreal有的而白鹭没有的功能,那这样的话开发者为何不直接使用Unity/Unreal呢?除此之外,一些高级光效渲染基本都需要WebGL 2.0 的支持,但是苹果已经三年没有在这项标准上有任何动作(反而搞了一个未必能成为Web标准的WebGPU接口),另一些功能(比如复杂3D物理)完全不是 JavaScript 可以承载的体量,目前来看必须采用 WebAssembly实现,但是 WebAssembly的现实问题又是 JS-WASM的调用过程开销仍然巨大,所以HTML5游戏的最终答案应该是所有逻辑均采用WebAssembly实现。因此我们后续实现 WebAssembly化而继续努力,而不是把精力放在使用JavaScript 实现高级3D功能上。

关于2021年的研发方向

上面提到了一些白鹭引擎在2021年不会重点做的事,接下来我也想说一下我们2021年的重点会放在哪里。

回顾2020年,整个引擎都是处于围绕当前的核心开发者群体进行不断完善的过程,并没有跨越性的新功能,但这并不意味着我们内部没有尝试。我们接下来会围绕着以下几个问题进行进一步的完善:

1. 将 Egret Engine(即 JavaScript运行时库和编译器)和 Egret Native 进行产品一体化,重点为原生游戏开发带来更强大的开发调试功能以及性能和稳定性提升,逐步完成从HTML5游戏引擎到全平台游戏引擎的转变。

2. EgretPro 的ECS架构为白鹭引擎的后续计划打下了一个非常优秀的基础,明年我们会尝试在白鹭引擎中充分利用 ECS 的数据与行为逻辑分离的特性,实现JS-WASM的跨语言调用框架,然后渐进式的将引擎部分功能逐步从 JavaScript 向 WebAssembly 迁移,并探索解决如何让 TypeScript 开发者可以直接开发 WebAssembly应用的编译工具链。目前我们已经在一个实验性项目中实现了 DragonBones 的WebAssebmly化,后续我们会在版本优化完善后逐步发布。

3. 在今年我们发现目前在游戏之外,白鹭引擎也存在着不少应用场景,比如经常有开发者向我询问是否可以把白鹭引擎在微信小程序而非小游戏容器中渲染,以解决他们需要在小程序中引入更多游戏化内容的需求。虽然现在通过一些dirty-hack也可以实现这些功能,但我们明年准备将这些需求纳入白鹭的直接支持目标。

4. 同时我们也发现了其他行业的一些强烈需求,特别是在线教育领域,今年有超过20家创业公司来寻求技术支持,他们已经基于白鹭引擎做出了自己的产品,我们将深度支持这类客户,并推出完整的解决方案。

写在最后

七年前的这个时候,和我的搭档与老板陈书艺已经一起做了五六年的游戏研发,从2008年我们在PC页游上采用JS开发出当年校内和51榜首的《新同居时代》,到11年3月我们孵化盘辰工作室探索HTML5游戏的捕鱼类产品,再到12年我们成为业内第一个采用Cocos2d-x JSB/H5完整开发出手游《一二三国》和《鹿鼎游》,2013年我也在Cocos开发者大会上做了关于FLash技术转型和HTML5探索的公开分享,但很遗憾的是我们一直没有找到可以让自己满意的超高效率开发解决方案。

老板是一个理想化的人,在我和研发团队不断吐槽下,2013年底书艺问我,有没有可能基于公司这些年在HTML5游戏开发过程中积累下来的经验自己开发一个游戏引擎? 至少可以满足跟我们一样有需求的开发者,解决它们的痛点。当时的我正在没日没夜的与 iPhone 4和小米1的内置浏览器搏斗了半年,我并没有信心能够做出一个让所有人满意的作品,但基于现实的需求和痛点,我写下了第一行代码。

老板为我们的引擎起了一个优雅的名字,白鹭引擎。寓意是像白鹭鸟一样优美、轻便,又是完全属于我们国产原创的作品。

在这很也许有些轻率的决定后,已经过了整整坚持七年的时间。现在回想起那个时刻,真的是感觉自己“初生牛犊不怕虎”,一脚踏入游戏引擎开发这个“无底洞”,在这个过程中经历了无数的波折,有位于事业顶峰的轻狂,也有被人质疑的困窘,在这七年里我亲眼见证了上百家公司使用白鹭引擎开发游戏日进斗金,也见证了许多研发同事因为开发白鹭引擎不如用白鹭引擎做游戏挣钱而被游戏公司高薪挖走。

尽管如此,作为白鹭的003号员工和白鹭引擎的作者,我仍然坚定的为我和我的团队感到自豪,因为前面还有更多的挑战和开创性的工作等着我们去探索。

三十而立,我的孩子也将在这两周出生,我相信再过十年后,我可以眉飞色舞的和他炫耀他老爸完成了一段令人羡慕的人生旅程。

王泽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )

GMT+8, 2024-4-27 04:26 , Processed in 0.154904 second(s), 27 queries .

Powered by Discuz! X3.4  © 2001-2017 Discuz Team.