查看原文
其他

“明星插件”是如何诞生的?Shader Editor 超硬核开发日志

SuperSuRaccoon COCOS 2022-06-10

今年 4 月,Cocos Store 官方商城上线了一款超硬核插件——

地址:https://store.cocos.com/app/detail/2749
Shader Editor 是一款用 Cocos Creator 制作的可视化 Shader 编辑器,内置上百个基础组件和特效组件,不仅能以插件方式运行,同时支持在网页中运行,方便随时使用。
Shader Editor 的作者、Cocos 引擎 10 年老用户 SuperSuRaccoon,在 Cocos2d-x 时代便萌生出了开发这款插件的想法,2020 年底,他着手用 Cocos Creator 正式开始编写,耗时 5 个多月,成品上线。
今天,SuperSuRaccoon 将和我们分享 Shader Editor 的开发历程,揭开这款“明星插件”从构思到上线的背后故事。


1

起点

最初想要做编辑器,还是在 Cocos2d-x v2.x 的时期。那时候刚开始用游戏引擎不久,经常看到有大佬在论坛分享一些酷炫的 Shader 特效。对于当时的自己来说,这种东西就像是看天书一样。随着开始逐渐熟悉引擎,有了一些基础后,开始挑战阅读引擎底层渲染和 Shader 相关部分的实现。反复阅读、折腾,有了入门的感觉后,Shader 也慢慢地能看懂个大概,能简单地修改下其中的一些参数变量。

缺陷

Cocos2d-x 时期,Shader 的编写、修改、运行,整个流程都是相当繁琐的。Shader 本身无法像普通程序代码那样轻松地断点或是打印调试,再加上 C++ 需要编译运行才能看实际的效果,这就给入门带来了更多的不便。

2

初试

转机来自于 Cocos2d-x 的进化版 Cocos 2d-js 。

从编译语言进化到脚本语言,从终端进化到浏览器,这使得游戏的调试、开发变得更加方便快捷。

最重要的是,借助浏览器,可以更方便地制作类似编辑器这样的软件

自己是软件工程专业出身,一直喜欢写一些软件工具,Cocos2d-x 用来做软件很不方便,部署发布更是麻烦。

但是进入了 JS 时代,借助 electron , node-webkit 的帮助,使得软件开发后的部署发布,也变得更加简单。

正巧那时候开始写 Shader 相关的一些东西 。开始只是一个封装了各种 API 的类,接着发展到简单的框架:

然后是实现了各种特效的特效集合:

最后发展到编辑器,因为在编写了很多特效后发现,只有用搭积木式的方式,来组装各种各样的特效,才是自己真正想要的东西:

于是就有了最初的 Cocos 2d-js  版本的  Shader   编辑器。

中断

Cocos 2d-js 的编辑器虽然也做到了一定的完成度,但是那时候 Creator 开始流行,越来越多的开发者开始转战 Creator,另一方面由于当时项目忙,业余时间比较少,于是编辑器的开发也就中断了。

3

重启

虽然工作中主要使用 Cocos 2d-js,但是业余时间,自己还是会用 Creator 尝试做一些东西。早期 v1 还不是很稳定,因此并没有深入地去研究。到了v2 时期,引擎编辑器各方面开始稳定,于是就开始想着是否有可能把之前做的 Shader 编辑器带到 Creator 中。当然在这之前,还需要进一步地熟悉引擎,才有可能做到,毕竟做一个编辑器不是一件容易的事情。


4

难点

在熟悉 Creator 的同时,还有几个较大的难点挡在制作编辑器面前。


插件模式选择

Creator + Cocos 2d-js

最初的想法,是将之前用 Cocos 2d-js 做的编辑器,以插件的形式嵌入 Creator 中:

虽然基本是实现了,Cocos 2d-js 开发的项目,嵌入 Creator 插件系统,但是问题其实也不少,最主要是插件和编辑器相互之前存在兼容性的问题。

Creator + Creator

另一个选择,自然是用 Creator 开发编辑器,然后再将其作为 插件 嵌入到 Creator 编辑器里。

最大的难点,是如何做到在不修改任何引擎本体代码,仅通过各种外部搭桥手术,实现 Creator 导出项目完美融合进 Creator 插件系统

这确实是一个比较困难的点,但是得益于引擎开源的这一特性,在阅读源码、反复进行一些尝试后,终于算是比较成功地突破了这一难点 (虽然暂时在插件 dock 状态下会报错的问题还没有解决)。


Shader 实时预览


Cocos 2d-js 的 Shader 实现流程相对 Creator 更加简单,并且暴露的接口也更多,实现 实时预览 也很方便。

但是 Creator 对于 Shader 的实现相对复杂,而且有一些接口藏得比较深,再加上自己坚持要在不修改一行引擎代码的基础上,实现编辑器的功能,这一点更加大了难度。

但是这对于最终的插件来说十分重要,因为魔改引擎是很方便,但是对于用户的使用、升级,都是极其不友好的。

这一块做了非常久,非常多的尝试,从源码的阅读,到material + effect + pass + ...... 各种重要技术点的逐个尝试,最终还是找到了一条实现需求的路。

这样一来,两个最大难点,就基本得到了突破,接下来,就可以开始编辑器的制作。


5

突破

在一开始,使用 Creator 再来重写一遍编辑器,我是非常拒绝的。

写编辑器虽然和写游戏不一样,但是难度其实也是丝毫不低。

但是在动手写了几天后,不得不说,真香

比起 Cocos 2d-js 时期盲人式的 UI 编写方式,Creator 用来编写 UI 的效率简直是高了太多太多,再配合上 Prefab 的使用, 将之前编辑器的功能 (主要是 UI 这块),用 Creator 实现一遍,是非常快速且高效的。

熟悉了 Creator 的一些常规套路后,编辑器的开发也就变得相对顺利了。

功能的推进还是相当顺利的,当然期间趟过的坑肯定也是不在少数。


6

里程碑

2021.04.03 编辑器初版正式上线:

对自己来说,算是一个里程碑。虽然就像文章开头提到的,初版还存在相当多的 Bug,以及基础功能的缺失,但是已有功能的完成度还是相当高的。


编辑器的一些特点

1.对引擎无侵入式修改,完全纯净

2.支持 Creator 原生插件模式同时提供网页版的 Cloud / 云 模式,使用方便;

3.大量内置特效组件, (目前多为基础组件,后续会添加更多复杂组件);

4.制作后导出特效为 Creator 原生支持的 .mlt + .effect 文件,因此可以方便地使用在各种平台上;

5.全中文化(双语切换),编辑器所有功能全部中文化,包括所有组件的说明,文档;

6.完整、丰富的在线文档,同时编辑器中内置同样完整的文档,包括大量演示视频及示例工程项目(可直接下载运行)。


7

挑战

好的编辑器(软件)一定是在不停地使用、不停地优化中完善的。除了认真听取用户反馈,自己也坚持使用编辑器制作特效,这样可以在实际的使用中,体会到编辑器需要改进的地方。除了使用编辑器制作特效,自己也尝试使用导出的 Shader 特效,在实际的游戏 Demo 中进行使用。这里正好安利一下自己早期写的一个 FBO 组件 :当初在写这个组件的时候,就提到过,它最大的用处,就是配合各种 Shader ,来实现一些原本做不到的、更加酷炫的特效。比如让骨骼动画使用 UV 依赖的 Shader 特效、实现屏幕后期特效、实现屏幕局部后期特效等等。现在有了 Shader 编辑器,这个组件也终于可以更好的发挥它的作用了。


8

计划

从最初开始构思编辑器,到如今终于在 Creator 做出成品并上线,经历了很长的时间,也花了很多的精力,也是因为很想把这个编辑器做到最好。因此后续的更新计划,也有很多。


Bug 持续修复

这个不用多说,是软件都会有 Bug ,随着功能的增加 Bug 也会持续地出现,因此 Bug 的修复是在整个软件的生命周期里都会持续的事情。

优化体验

在用户的很多反馈中,可以看到,有些功能使用目前的编辑是可以实现的,但是实现的过程可能十分痛苦,这就是一些操作体验的不可理喻所造成的,体验的优化也是非常重要的,毕竟软件是拿来用的,用得方便与否也是十分重要的事情,比如键鼠快捷操作、工具栏操作、组件菜单操作等,都是需要优化的地方。

3D

这个一些论坛的朋友也询问过我,是否考虑制作 Creator 3D 对应的编辑器。

首先把现有的这个编辑器,转换成 TS ,再改成配合 Creator 3D 插件工作流的形式,再改成 3D Shader 制作的方式,至少现在看来是不会去考虑的。

一个原因是目前 2D 功能还很不完善,如何把 2D 的编辑器功能做到 100%,才是第一优先的事情。

另一个原因是自己对 TS 和 3D 开发完全没有任何的接触,所以对于一些技术可行性也完全不清楚。

当然,在制作 2D 编辑器的时候, 曾经尝试过将编辑器制作好的特效,导出为 Creator 3D 可用的格式,这可能是一个比较可行的选择。


特效社区

这次的编辑器还加入了 Cloud 的功能,虽然现在功能还很基础,但后续随着编辑器的完善和用户的增加,希望可以在此之上,做出方便所有用户提问、交流、共享、解决问题的社区。

当然这些内容都是和 Shader 紧密相关的。

因为一直以来,很多用户都对 Shader 有各种问题,或是对某些特效有需求,但是没有一个针对性的地方,可以得到帮助或是获取这些资源,而是只能去论坛发帖或是搜索寻找以前的帖子,碰碰运气。

如果能紧密结合编辑器的功能,提供这样的一个功能简单却有针对性的特效社区,对用户来说,应该也是一个非常好的消息。


9

结语

现在想来,最初做这个东西的目的,就是为了能够用更简单的方式,做出酷炫的特效。并且在制作的同时,可以实时地、直观地学习 Shader 中的各种命令,看到每个函数所起到的是什么样的功能——在 UV 上做个乘法起到了什么效果?给色彩 RGBA 来个减法,又能起到什么样的效果?这些在编辑器中,都可以一目了然。
从 Cocos2d-iphone 时期开始,自己就做过各式各样的 Demo、功能、模块、框架……这次的编辑器也是有了这些积累,才得以初步完成。后面也会努力地去继续更新、维护下去,希望各位开发者可以支持。
先定个小目标,希望一年后的今天,能再发一篇周年回顾的文章,希望那时候的编辑器,已经变得比现在更强大。
想做的东西还有很多,现在只是迈出了第一步,下一个版本会变得更好。

文章来源:SuperSuRaccoon个人公众号



📢📢📢!!Cocos 现向全体开发者征集 Creator 3.x 官方文档内容修改建议,登录 Cocos 官方论坛说出你的想法吧!
地址:https://forum.cocos.org/t/topic/114798



Cocos 开发者沙龙来了!6 月 19 日,我们将来到上海,与各位开发者齐聚一堂!


引擎体重 & 技术担当 Panda、 CTO & 周边收集狂林顺、首席客服王哲及技术团队将一起空降上海,为大家详解 Cocos Creator 3.x 最新功能及宝藏技术。

 

更有华为海思麒麟团队图形渲染工程师杜鹏程以及华为工程师夏敏言、《江南百景图》小游戏版负责人大城小胖、乐府资深 Cocos 开发专家夏凯强、TopOn 广告产品专家余国强等一众大佬强势加盟,带来超多干货分享!


此外,我们为大家带来了硬核现场一对一技术支持,限额 5 个团队。


是的,你没有看错,我们引擎团队核心成员将全程驻场,你可以携带自己的作品和问题同他们进行一对一技术交流,名额有限,赶快扫描下方二维码报名吧!



点击【阅读原文】跳转至报名入口,期待你的加入!


往期精彩

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存