里程碑级更新!全方位大幅进化的 Cocos Creator 3.6,开启 3D/2D 创作新篇章
直播预告
Cocos 官方 B 站明后天17:30两场连播,引擎研发团队全面解读 v3.6!
从 v3.0 的 2D 和 3D 融合开始至今,开发者陪伴我们一起经历了六个大版本。这其中加入重要的平台伙伴,如 HarmonyOS 全球首家和 Nintendo Switch 国内首家支持;优化了光照模型,支持了移动端延迟渲染管线;增加了一些必要的 3D 功能特性如 Marionette 动画图系统;针对 2D 项目的开发体验提升和性能优化。积跬步、至千里,我们相信这一步一步的进化将使引擎日益走向成熟与强大。
在 Cocos 团队内部,我们一直将 Cocos Creator 3.6 视作 v3.0 合并版本之后最重要的里程碑版本。v3.6 是迄今为止迭代周期最长的一个版本,在多个方面大幅进化,让 Cocos 引擎在 3D & 2D 开发上体验更好、性能更高、效果更出众。
去年 v3.3 发布之后,原生化团队就开始了针对 v3.6 版本目标的开发工作。商业引擎服务于全行业的特殊性,决定了它既要紧跟硬件发展,不断挑战最好的性能、最优秀的画面表现力,也要在生产端不断提升生产效率,保持对项目的兼容性和对不同硬件环境的伸缩性适配。这些挑战意味着引擎需要对底层框架进行持续的迭代和重构,这个过程需要较长的周期,有时候是破坏性的,比如从 2D 引擎进化为 3D 引擎,而大多数时候这种迭代则是延续性的,比如我们在 v3.6 的原生化进展。
尽管花费了一年时间,进行了多个阶段和多个模块的重构,原生层代码增加了两倍多,但我们仍然在大幅度优化性能的基础上做到了对老项目的兼容。这样的底层重构一方面带来了可见的性能和表现力提升,另一方面,也为了未来的进一步迭代扫清障碍、做好准备。从 v3.6 的研发与诞生,大家也可以看到引擎开发永恒的命题:持续不断地自我变革,以适应硬件的更新和用户需求的变化。
v3.6 还有一个非常重要的、开发者都很关心的提升,那就是 v3.6 在 2D 渲染性能上达到了和 v2.x 同样的水准,这意味着 v2.x 用户如果有 3D 或持续迭代的需求可以放心升级到 v3.x。
在底层原生化的基础之上,我们进一步将 2D 渲染数据结构、2D 合批管理器和渲染流程都原生化了,让 2D 合批和提交渲染的流程都在原生进行,以达到类似 v2.x 的性能表现。当然,现阶段还有部分遗留工作没有全部完成,比如 Spine 的合批支持,这也代表着在原生化的基础之上,v3.x 的 2D 渲染性能还有更高的天花板等待我们去突破。
>> 滑动查看更多
>> 滑动查看更多
而在版本进化方面,v3.6 带来了新的界面设计、新的材质 API、新的导入体验,以及动画嵌入播放器、粒子噪声图等新功能。从用户角度来说,这些变化意味着什么呢?
首先是编辑器的 UI 和交互体验进化,数百个细节修改后,开发者一定能直观地感受到编辑器看起来更舒适了,使用体验更好了;其次是光照模型和渲染算法上的一系列新特性将让你的游戏画面媲美现代移动端游戏品质,尤其是下文将展示的级联阴影和各向异性材质,一定会让你眼前一亮。最后,v3.6 中有多项功能是产品驱动开发,从用户需求出发去拆解需求、设计功能,功能实现后还会进行产品侧的审核和验证。基于这一流程我们完成了多语言编辑器工具、动画嵌入播放器、编辑器预览、粒子噪声图等功能,相信产品驱动开发的模式将会让引擎未来提供的各项能力更加成熟易用。
以下是 v3.6 的部分重要更新,完整更新内容请前往官网查看。
图形渲染
Surface Shader 自定义材质
Surface Shader 使用统一渲染流程和结构,可以让用户以简洁的代码创建表面材质信息,指定用于组合的光照和着色模型。相比旧版(Legacy Shader),它的优点是更易书写和维护,有更好的版本兼容性,也更不容易产生渲染错误,并且可以从统一流程中获取很多公共特性,如统一的全场景光照和 Debug View 调试功能等。
基于此,Cocos Creator 将更易扩展出多种常见的复杂材质提供给用户,未来还将支持 Shader Graph 自动生成 Effect 代码,大幅提高 Shader 开发效率。
Rendering Debug View 模式
多种自定义的显示模式,将帮助用户更快定位各种材质、光照、阴影显示问题,方便用户查看更清晰的特定场景信息,帮助用户做出优化决定。
CSM 级联阴影
普通的阴影贴图有一个致命弱点:当投影面积较大时,对阴影贴图分辨率的需求会超出硬件承载极限。如果不提高分辨率会导致阴影锯齿严重、形状缺失、不清晰,但减小投影面积又会导致阴影可视距离非常短。阴影可视距离和阴影效果的平衡调整是一个非常令人头痛的问题。
CSM 级联阴影将视锥按远近顺序划分为多块,近处投影范围更小而远处投影范围更大,相当于一个自适应的阴影贴图,从而数倍提高贴图利用率。它可以在较大的阴影可视距离上依然具备精细的阴影效果,开发者无需再把精力花费在参数调校上。
GGX 环境反射卷积图
AutoGen Mip(上)vs
GGX Convolution(下)
GGX(左)vs dir(中)vs mip(右)
由于精确光源的高光都是使用 GGX 的 BRDF 分布,对于环境光源而言也必须使用同样的 BRDF 做球面卷积才可以让两种光源的光照效果对应。此外不同粗糙度的反射光照是存储在对应的 Mip 中,相比于自动生成的 Mip 数据,卷积计算可以修复以下问题:
环境高光的泛光和拖尾现象被极大削减;
与 Substaince 的标准 PBR 材质工作流效果对不上;
平行光高光和环境光高光效果对不上。
各向异性光照模型
通过 Surface Shader 带来的好处,我们可以充分扩展 PBR 光照模型。v3.6 完整支持了在精确光源和环境光源下,各向同性和各向异性的材质与光照模型,我们可以对接 Substaince PBR 材质库,制作拉丝纹路的金属、头发、丝绸等等。
编辑器 UI 全面升级
v3.6 启用了全新的编辑器 UI,围绕「更协调」的视觉系统、「更科学」的视觉反馈、「更沉浸」的交互感受,对 UI 和交互进行了一次全方位的梳理。我们希望通过交互来改善视觉感受,通过视觉来影响交互体验,从这两个层面进一步提高用户体验。
未来我们将继续基于 Cocos 的设计目标、设计系统、设计原则进行规范化设计,持续更新迭代,优化核心交互和工作流程。
支持编辑器预览模式
开发效率是 Cocos Creator 非常重视的一项核心优势,在 v3.6 中这项优势得到了进一步提升。除了网页预览和模拟器预览,现在开发者还可以使用「编辑器预览」来运行游戏。「编辑器预览」将在场景管理器中直接执行游戏逻辑,并且可以实时调试游戏场景,带来更无缝的预览体验,同时补足原先在调试方面的短板。
此功能目前处于实验性阶段,欢迎大家在使用过程中给我们更多反馈。未来我们也将持续关注研发效率,在脚本编译、项目调试、构建发布环节持续提升用户体验。
动画嵌入播放器
动画编辑器新增了嵌入播放器功能,支持在任意动画中嵌入其他粒子和动画,并用类似视频剪辑软件轨道的方式进行编排,自由调整时长和播放位置。
在完成编辑之后,嵌入播放器的内容会伴随此条动画剪辑(AnimationClip)一起播放,在 Animation 组件和动画图系统中均有支持。此外,动画嵌入播放器支持添加到 FBX 导入的动画上,可以实现更灵活的特效控制,解决了导入动画难以二次编辑的问题。
目前 v3.6 提供了粒子和动画两种播放器,可以在实验室设置中启用。
集成多语言支持
为了更好地服务开发者出海,v3.6 新增内置多语言工具 Localization Editor(L10n),目前支持文本翻译和资源替换。L10n 与 Cocos Creator 深度集成,通过高自动化提高翻译效率,并且以无代码的方式降低使用门槛,实现「开箱即用」。其核心功能包括:
支持机器翻译,目前接入了 Google、有道翻译。
支持一键提取各类需要翻译的内容。
支持 Excel、csv、po 文件批量导入导出。
支持多语言实时预览及资源替换。
Localization Editor(L10n)目前处于实验性阶段,未来将提供更丰富的游戏本地化能力,欢迎大家使用并提供反馈。
其他更新
动画图(Marionette)
支持动画预览。
支持变量和 Layer 重命名。
支持过渡线的排序。
增加了「终点起始时间」属性,允许过渡的目标动画从指定位置开始播放。
动画图现在可以将某个过渡配置为可中断的,以允许指定的过渡被其它的过渡中断。该功能可在实验室设置中启用。
编辑器构建
构建面板可以在界面上自由组合相关任务一起执行。
资源服务地址已作为全平台共用参数,支持一键使用构建内置服务器,方便本地开发测试。
优化了构建内编译引擎与编译脚本的任务调度,独立进程执行,降低构建进程对内存的占用。
允许在偏好设置里关闭构建纹理压缩、引擎、自动图集对缓存的使用。
粒子系统
支持粒子噪声图。v3.6 的粒子系统新增了 Noise 模组,为粒子带来更自然、更可控的随机运动效果。
支持 Instanced Mesh,提升发射器的性能。
修复粒子编辑面板不支持 Undo 的问题,方便调试。
支持子节点树的组合粒子预览控制。
不再默认拆分模型
由于 uniform 的限制,当骨骼数量超过一定值后,无法一次性提交给显卡渲染,此时就需要做特殊处理。
常见的处理方法有两种:
拆分模型和骨骼,分批提交。
使用纹理传输骨骼动画数据。
在 v3.6 之前,模型拆分功能默认是开启的。这是考虑到,当模型骨骼未超出 uniform 限制时,直接使用 uniform 传递骨骼动画数据所需的性能会高于使用纹理传输骨骼动画数据。很多用户反馈说自己的一个人物模型会占用多个 DrawCall,主要原因就是这里被自动拆分了,但开发者并不知情。
v3.6 对这一问题做了策略优化:
默认情况下不再拆分模型,不对导入的模型数据做修改。
如果骨骼数量未超过限制,直接使用 uniform 传递。
如果骨骼数量超过限制,则使用纹理传递。
使用纹理传递骨骼动画数据的方式需要在顶点着色器中访问纹理,这一特性最低支持为 OpenGL ES 3.0,WebGL 2.0。但依靠 GL 扩展,在仅支持 OpenGL ES 2.0 和 WebGL 1.0 设备上,几乎已达到 100% 的覆盖率,所以无需担心兼容问题。目前保留此选项应该只是为了保持旧项目的兼容性,在适当的时候会考虑移除。
场景编辑器
支持表面吸附和顶点吸附。
表面吸附(Surface Snapping)
顶点吸附(Vertex Snapping)
支持框选功能,可以批量选中多个物体。
已知问题与升级提示
移除 Win32 支持,仅保留 Win64 发布。
iOS 最低版本支持从 iOS 10 变更为 iOS 11(为了使用 C++ 17)。
内置材质的命名和编辑器中的命名保持统一,因此 EffectAsset.get、Material.initialize 中使用内置 Effect 时通常需要加上「builtin-」前缀。
构建模板中 application.js, game.js, index.js 等文件被更新了,如果有在项目或者构建插件中自定义过模板,请重新生成并做相应修改。详见升级文档[1]。
settings.json 格式发生修改,对这个文件做了定制化处理的插件可能会无法使用。详见升级文档[1]。
mask 下现在存在一个渲染 mask 内容的子节点,这会造成 mask 下的用户子节点的索引与用户可见的节点树不一致,建议不直接使用硬编码来获取索引位置的子节点以免与预期不一致。
参考链接
[1] 升级文档
https://docs.cocos.com/creator/manual/zh/release-notes/build-template-settings-upgrade-guide-v3.6.html
v3.6 还修复了引擎编辑器的一些已知问题,优化了用户体验。欢迎点击文末【阅读原文】前往官网查看完整更新内容,下载并体验 Cocos Creator 3.6。再次感谢开发者的支持!
Cocos B 站直播间
http://live.bilibili.com/21811345