Cocos Creator 3.1 携多线程渲染架构和 PhysX 物理支持强势登场

Hi,各位开发者们。v3.0 过后,引擎组就投入了 Cocos Creator 3.1 的开发,终于在今天顺利发布啦。

3.0 版本的推出标志着 Creator 迈向了一个全新的征程,而 Creator 3.1 就是征途上的第一块基石。

此次版本更新带来大量非常棒的新特性,包含华为海思团队贡献的延迟渲染管线、PhysX 物理后端的支持等等。

同时,相对 3.0 版本,各方面的性能也得到了优化,例如帧动画性能、加载性能、包体等等,相信大家能感受到我们的诚意。

接下去我们会继续在 3.x 的基础上深耕,踏实地完善产品体验,普惠所有开发者。欢迎所有开发者使用与体验!

升级前请做好相关文件备份喔,以下是详细更新内容,欢迎阅读。

What's new

  • 新增延迟渲染管线(感谢华为海思团队的贡献),可在项目设置中选择延迟渲染管线
  • 引入多线程渲染架构。在原生平台上,传统的单线程架构已无法满足大规模场景的渲染,因此,Creator 在 v3.1 中将传统的单线程架构初步拆分为了渲染线程和设备线程两个主线程。除了主线程的拆分外,Creator 还将 command buffers 的提交过程并行化,加快渲染效率。多线程渲染架构图如下:
  • 增加 PhysX 物理支持,目前支持除了安卓 x86 之外的原生平台,在 iOS 上有 100% 以上的性能提升(若需要在 web 平台上预览可以参考 example-3d 里面的 physics-3d 工程,主要修改内容在 preview-template 文件夹中)
  • 编辑器支持骨骼八面体展示,可以直观看到模型骨骼的分布状态
  • 支持在 FBX/glTF 资源的 Inspector 上预览动画
  • 开放新版曲线编辑器,支持分别编辑左右斜率,支持直接显示曲线的循环模式
  • 安卓平台支持构建 x86_64 架构
  • 支持在 Prefab 实例上添加/删除组件
  • Mac 构建新增 支持 M1 选项,用于更好地对一些已知的引擎模块在 Apple M1(Silicon)架构的设备上的支持问题做提示
  • 添加场景即时缓存的实验室功能,默认开启,可在场景异常退出后恢复数据
  • 编辑器添加 ui-curve、ui-curve-editor 组件,插件开发者可在插件中直接使用

Improvement

  • 提升引擎原生平台运行性能
  • 提升引擎帧动画运行性能
  • 提升运行时资源加载速度(构建模式)
  • 优化动画编辑器在编辑大数量关键帧时的卡顿问题
  • 自动图集面板新增针对 Bundle 内使用自动图集的优化选项,共增加三个选项,用于自动图集在 Bundle 内时的一些不必须信息剔除,优化包体
  • 优化自动图集被多个 Bundle 引用导致图片被复制的问题,减少包体
  • Shadow Map 支持了线性深度,深度图压缩(与线性深度功能互斥),自阴影效果,以及 normal bias 参数设置
  • Lighting Map 支持 RGBE 格式

Editor

  • 优化动画编辑器的事件编辑面板,避免产生空函数数据
  • 构建的输出地址修改为支持协议头的路径
  • 构建导出配置支持跨版本导入使用
  • 构建面板添加校验机制,数据填写错误时将无法构建
  • 优化部分小游戏平台打包 rpk 的输出日志
  • 优化构建输出 log 信息,修复日志丢失问题
  • 优化资源丢失处理,可以在资源恢复后自动还原
  • 新建 Button 默认对 Label 节点上锁,方便在场景中选中
  • 修复从 Prefab 退出可能引起的场景数据问题
  • FBX 导入时可选择动画烘焙速率
  • 解决部分 FBX 导入会导致编辑器卡死的问题
  • FBX/glTF 增加导入选项“提升单一根结点”
  • 修复了 TiledMap 导入 .tmx 资源时丢失问题

Engine

  • 修复了 TiledMap 动画失效问题
  • 修复了 Spine 在原生下预乘不生效的问题
  • 修复了 Spine 开启预乘下设置透明度显示异常问题
  • 修复了部分机型 Vulkan 驱动不兼容问题
  • 修复 Metal 相关平台 Shadow Map 显示错乱问题。

Breaking Changes

  • 移除了 AudioClip 的播放接口,并且不支持 started 事件监听,AudioClip 现在是纯音频资源类型
  • effect 资源中不能再直接调用 CCStandardShading 函数,统一封装进 CC_STANDARD_SURFACE_ENTRY 宏定义,建议只在 surface 函数中做自定义逻辑
  • GFX 模块改名,去掉 GFX 前缀,统一使用 import { gfx } from 'cc';
  • 构建面板上移除了自动图集、压缩纹理开关,项目在配置了自动图集与压缩纹理后将会直接处理
  • 弃用 cc-fog 头文件,改用 cc-fog-vs 和 cc-fog-fs
  • 移除了 sys 下的部分常量 sys.LINUX,sys.BLACKBERRY,sys.EMSCRIPTEN,sys.TIZEN,sys.WINRT,sys.WP8,sys.QQ_PLAY,sys.FB_PLAYABLE_ADS

Known Issues

  • 微信 PC 端的键盘和鼠标适配有问题,我们将在 v3.1.1 里修复这个问题,你可以手动合并此 PR 修复 #8626
  • SafeArea 组件暂时无法正常使用,我们将在 v3.1.1 里修复这个问题,你可以通过手动合并此 PR 来解决此问题 #8652
  • 在 Sprite 设置完 RenderTexture 后需要手动调用下 Sprite.updateMaterial 函数,否则在某些平台下可能出来图像翻转

升级说明

从 < 3.1.0 版本升级

  •  UITransform 组件的 priority 属性从 3.1 开始不建议使用, 设置 priority 属性来排布节点顺序的方法弃用,请使用 setSiblingIndex 方法改变节点树顺序。通过代码创建添加并依赖此属性的节点可能会遇到节点树表现和之前不一致的问题,请手动调整。
  • RenderTexture 在不同平台上会出现正反不一致的效果,Creator 为 effect 新增了 SAMPLE_FROM_RT 宏,当需要使用 RenderTexture 时,需要设置 SAMPLE_FROM_RT 宏为true,此时各后端会统一适配至正确的效果。

从 < 2.4.5 版本升级

Cocos Creator 3.x 版本已经正式发布,2.4 版本将做为 LTS(长期支持)版本,提供后续两年的持续更新!在 2021 年,2.4 将继续更新版本,提供缺陷修复和新的小游戏平台支持,保障大家的项目成功上线;在 2022 年我们还将为开发者持续提供 2.4 的关键问题修复,保障已上线的游戏平稳运营!因此,

  • 现有的 2.x 项目可以安心继续开发,无需强制升级 3.0
  • 现有的 2.x 项目因项目需求如想升级到 3.x,可以使用 Creator 提供的 2.x 资源导入工具。此工具将支持旧项目资源完美导入,以及代码的辅助导入。代码辅助导入会把 js 转换成 ts,添加组件类型声明、属性声明及函数声明,组件在场景中的引用都会得到保留,并且函数内部的代码会以注释的形式导入进来,可以减轻开发者的升级难度。详细的升级说明请参考 升级指南
  • 新项目则建议使用 3.0 版本开发,我们会不断优化 3.0 的开发体验和运行效率,支撑好 2D、3D 等不同品类的重度游戏顺利上线。

Cocos Creator 对项目的升级操作是不可逆的,请在升级前提交或备份旧版项目。绝大多数项目通常都能自动升级,但因为项目难免存在特殊性,开发者应该根据项目自身需求,提前对新版本引擎进行试用和评估。

此外,出于稳定性考虑,建议即将上线或已上线的项目谨慎升级。如果开发者们在升级中遇到困难,欢迎向我们反馈,我们会尽力协助。

4赞

沙发!!!! 给力!!!

超级给力!!!请问下PhysX的角色控制器有没有导出,对应的文档在哪里?

https://docs.nvidia.com/gameworks/content/gameworkslibrary/physx/guide/Manual/CharacterControllers.html

另外,我之前看了下github上的代码
https://github.com/cocos-creator/engine-native/blob/develop/cocos/renderer/pipeline/SceneCulling.cpp

理论上sceneCulling越快并发度越高处理大场景的能力会越强,想了下这块可能应该是类似map-reduce那样,并发的map生成几个RenderObjectList确保没有data race,最后再由一个线程合并为一个RenderObjectList。

曾想过自己动手弄,实现上可能改动比较小的方案是用openmp让那个大循环并行化,但不确定相关函数(getNode, getWorldBounds, merge, aabbFrustum…)是否都是线程安全的

参考这个: https://stackoverflow.com/questions/11773115/parallel-for-loop-in-openmp

PhysX 物理 对小游戏平台有没有实际的好处???还是单单针对原生平台???

2赞

帖子置顶一下

想知道关于原生平台运行性能提升的更多信息,2d部分相比2.4.5表现如何

2赞

发现了奇怪的问题,3.1编辑器里做添加组件的操作变得好慢

延迟渲染管线 的具体作用可以说说嘛?不懂是干嘛用的,和其他渲染管线有啥区别和提升

只针对原生

延迟渲染应该是在多灯光的那种场景里才能发挥能力

1赞

2个脚本 互相 @property 并挂到一个节点上 还是有问题
2d碰撞系统没了 只剩2d物理系统了
有的项目真的 就只用个碰撞系统完全够了

前排 挺好 再成熟一点 项目就敢用了

曲线编辑器是干啥用的

给力,另外物理系统多多完善哈

Cocos Creator 创建空项目,没有生成tsconfig.json文件,导致无法识别cc

赞!引擎组加油,让Cocos Creator变得更好~

setSiblingIndex使用很麻烦呀,我这边游戏战斗的时候,有几十个物体一直移动要根据y轴变换层级的,之前直接设置priority就好了。现在得先一遍for循环根据y轴把子节点应该在节点树的index算出来,然后再for循环一次每个子节点都setSiblingIndex一次。每帧都这么调用的话,性能吃不消的吧。

比如,角色控制器 character control,关节,布娃娃系统。大大们有时间多多完善哈,真心蛮重要的

是的,没有tsconfig,应该是引擎疏忽了,尝试其他版本的tsconfig.json 拷进来就没问题了

tsconfig.zip (274 字节)
上传一个tsconfig.json 方便其他人使用

还有网格导航