在团结引擎 1.10.0 中,Infinity Particle System推出 1.5.0 正式版,Infinity粒子系统正式告别"预览版"身份,作为正式版功能向所有开发者开放,对于有新项目或愿意做迁移验证的团队,现在正是评估接入的好时机。

打开网易新闻 查看精彩图片

兼容性

支持平台:

Infinity 粒子系统目前支持 Windows,Mac ,Linux,Android, iOS,OpenHarmony(开源鸿蒙),MiniGame 和 WebGL 平台。

团结版本

内置渲染管线

通用渲染管线(URP)

高清渲染管线(HDRP)

1.10.0

不兼容

兼容

兼容

实现原理

Infinity 粒子系统是团结引擎面向移动端、小游戏以及性能预算有限设备打造的高性能粒子系统。它保留了传统 Built-in 粒子系统的模块化编辑体验,同时以现代 ECS 架构重构底层模拟与渲染管线,目标是在受限平台上同时获得更高的粒子吞吐、更低 CPU 压力和更稳定的帧率表现。

Built-in 粒子系统

Infinity 粒子系统

内存结构

SoA大数组,通过Resize 的方式进行扩容

ECS架构,Archetype-based SparseTable 结构

将组件组合、共享数据和实际粒子存储分层组织

模拟调度

一个粒子系统一个线程

一个粒子系统一个 Job Schedule

定制 Job System,根据业务场景灵活选择并行粒度

ManagerJob 统一调度,一种任务一个 Job Schedule

渲染

生成 Mesh

一个粒子系统至少一个 drawcall

BatchRendererGroup GPU Instancing 渲染

跨粒子系统渲染合批

语言/发布方式

C++

引擎内置

HPC# + Burst

内置 Package 形式发布

功能

对齐内置粒子系统

Infinity 的功能效果已与内置粒子系统基本对齐,并沿袭了 Shuriken 的操作习惯,开发者几乎零学习成本即可上手。

迁移工具

官方提供了自动迁移工具Tools > Convert Particle System to Infinity)和详细的迁移文档(https://docs.unity.cn/cn/Packages-cn/cn.tuanjie.infinity@1.5/manual/InfinityTransfer.html)。可以很方便地将项目中的老特效迁移成 Infinity 版本。

支持 Shader Graph

目前在URP管线中,Infinity 粒子系统已经提供了对 Shader Graph 的支持。在 Graph Inspector 中,切换到 Graph Settings 标签,勾选Support Infinity Particle,可按需设置 Particle Type 为 Particle 或者 Trail。

打开网易新闻 查看精彩图片

支持 AnimationClip

Infinity 粒子系统目前已经支持通过 AnimationClip 来控制粒子系统的各种属性。在 AnimationClip 中点击Add Property>Infinity Data能够找到 Infinity 粒子系统的所有属性,暂时不支持通过 Animation 窗口中的录制功能编辑关键帧。

通过 Infinity 迁移工具迁移带 Animation 效果的 Built-in 粒子系统时也能够保留原有的动画效果,迁移时会在相关动画资产的同级目录下生成 XXX_Infinity.anim 和 XXX_Infinity.controller 的文件。

打开网易新闻 查看精彩图片

一般情况,AnimationClip修改材质属性依赖 MaterialPropertyBlock 功能,但是 MPB 本身是会打断合批的,所以 Infinity 粒子系统使用了不同的策略,来保证原本的合批不被破坏

Infinity 通过 GraphicsBuffer 上传 AnimationClip 中对材质属性的修改值,将材质属性的变化统一到粒子渲染属性的上传逻辑之中,所以需要用户额外对 Shader 进行一些修改才能正确生效。具体的修改方式在 Editor 中运行时,会出现相关 Log 进行提示,也可以参考官方文档。

打开网易新闻 查看精彩图片

InfinityAsset

Infinity 引入了 InfinityAsset 文件,允许多个粒子系统最大限度地共享配置参数。开发者能够运用 InfinityAsset,在保证粒子效果的情况下,有效降低 Infinity 粒子系统在实例化阶段的开销。

烘焙工具

在性能受限平台上,某些游戏场景中的实时粒子模拟即使经过优化,仍可能带来不可接受的 CPU 开销和帧率波动。例如大量重复特效、复杂循环环境特效,或低端设备上的高密度视觉表现,都更适合将模拟成本转移到离线阶段。

为此,Infinity 引入了 InfinityBakeTool,通过预计算粒子效果并在运行时直接播放 Instance 渲染数据,显著降低实时模拟负担。相比普通贴图烘焙或传统 VAT 方案,InfinityBakeTool 不只是“把结果烘成一张图”,而是保留粒子系统层级与渲染结构,烘焙后的 BakedInfinity 仍可保留影响合批的关键参数,使多个烘焙粒子系统继续参与跨系统合批。

目前,Infinity 烘焙工具已经支持了包括 Trail 模块在内的20个模块,暂不支持 Lights 模块 ,有限支持 SubEmitter,ExternalForce,Collision 和 Triggers 模块。BakedInfinity 运行时拥有 Play / Pause / Stop / Simulate 等控制能力。

批量烘焙

烘焙工具提供了手动烘焙和批量烘焙两种模式。当有大量粒子系统需要烘焙的时候,可以切换到Auto Bake标签,将场景中的粒子系统对象拖放到红框队列中,点击Auto Bake All即可执行批量自动烘焙。(注意:启用了 Looping(循环播放)的粒子系统,不适用批量烘焙模式)。

打开网易新闻 查看精彩图片

烘焙动画

在烘焙时启用Bake Animation in Infinity能够将 AnimationClip 对粒子系统的影响也烘焙下来。

对于 AnimationClip 修改粒子系统及其父节点 Transform ,或者 AnimationClip 修改粒子系统模块参数变化,导致粒子数量,位置,颜色等属性发生改变的情况,烘焙过程会逐帧采样 AnimationClip ,最终保存下来的粒子属性值都是受到动画影响的属性值。

对于 AnimationClip 修改粒子系统材质属性的情况,BakedInfinity 采用和 Infinity 相同的策略,在不破坏合批的前提下实现这一功能。

Effect 空间的烘焙

特效制作中经常需要用到 World 空间的模拟。例如:发射子弹,每一颗子弹后面都带着一个粒子系统制作的尾焰,尾焰粒子的模拟空间只能是 World 。

烘焙工具生成 Prefab 时会在根节点上生成一个BakedInfinityEffects脚本,也就是说,烘焙后的的 “一个 Prefab ” 等同于 “一个特效” 。目前 BakedInfinity 会额外烘焙一个 LocalToEffect 矩阵,使烘焙后的粒子数据能够处于 Effect 空间。只要 Effect 在出生后位置不再发生改变,烘焙工具就能够烘焙 SimulationSpace 为 World 的模拟效果。

性能

变体问题

变体一直是游戏开发过程中一个让人头疼的话题,更多的变体意味着繁琐的变体裁剪和收集,也意味着变体编译带来的性能开销。Infinity 粒子系统正式版中针对变体进行优化,功能逻辑层面不再引入额外的 keyword

目前只剩下两个变体不可避免:

  • UNITY_DOTS_INSTANCING_ENABLED :使用BatchRendererGroup GPU Instancing 渲染引入

  • USE_VTF :如果使用 OpenGLES,需要引入

小游戏平台包体压缩

Infinity 粒子系统基于 HPC# + Burst,而 Burst 编译器的激进内联优化在提升性能的同时,可能会导致 wasm 包体膨胀。为此,团结引擎小游戏平台针对 Burst 引入了Managed回退分支裁剪功能。开启裁剪后,在帧率无明显降低的前提下,wasm 包体大小得到有效控制。

此外,Infinity 粒子系统和 BakedInfinity 粒子系统作为两个独立的产品,会被拆分为两个独立的dll,如果用户只需要使用其中一种,在打包时只会打包这一部分的代码,也能够有效减少包体大小。

合批与半透明渲染顺序问题

Infinity 粒子系统会将材质,Mesh 和 CustomBatchKey 相同的粒子系统合批渲染,有效降低 DrawCall。

合批渲染有可能会带来半透明渲染顺序错误的问题。如果用户不希望两个相同效果的粒子系统合批,可以通过修改 CustomBatchKey 来达到目的。不同 Batch 会按照 CustomBatchKey 的值从小到大提交,通过修改这个值也能够一定程度上控制半透明粒子系统 Batch. 之间的渲染顺序。

Infinity Benchmark Suite

随着 Infinity 粒子系统的每一次更新,我们也会同步更新 Benchmark Suite(https://assetstore.u3d.cn/packages/vfx/particles/assetstore-package-20002603 或者 https://cnb.cool/tuanjie/Infinity_Benchmark_Suite),方便开发者对比 Built-in 粒子系统,Infinity 粒子系统,和 BakedInfinity 粒子系统之间的性能差异。

我们构造了七种不同类型的测试场景,代表粒子系统使用中常见的几种类型:

Test200/500/1000

单一粒子系统粒子数量少,粒子系统大量重复

打开网易新闻 查看精彩图片

TestMore

多个粒子系统粒子数量负载不均衡,少则十数,多则上万

打开网易新闻 查看精彩图片

TestMesh

渲染Mesh的粒子系统

打开网易新闻 查看精彩图片

TestSingle

单一粒子系统粒子数量大

打开网易新闻 查看精彩图片

TestLoop

每帧持续生成死亡不同的粒子系统

打开网易新闻 查看精彩图片

TestPool

测试池化场景,特效批量生成,批量死亡

打开网易新闻 查看精彩图片

TestType

粒子系统种类 100+

打开网易新闻 查看精彩图片

我们在不同机型不同芯片上进行了测试,下图表中展示的是 Built-in,Infinity,BakedInfinity 在安卓和 ios 手机上的 CPU 耗时测试结果,所有测试均取 1000 帧的平均值。可以看到,在主线程+渲染线程耗时的整体开销上,Infinity 都是快于 Built-in 的,而 BakedInfinity 更是能够达到 50% 左右的提升。

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

在 DrawCall 方面,无论是 Infinity 还是 BakedInfinity 都支持跨粒子系统的合批渲染。不同机型的 DrawCall 效果基本一致,下图表中展示的是 Built-in,Infinity,BakedInfinity 的 DrawCall 表现,所有测试均取 1000 帧的平均值,可以看到我们相比 Built-in 来说是有很大优势的。

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

调试与分析

开发者可以在 Profiler 或 Memory Profiler 中搜索搜索 “Infinity” 关键词来,来分析由 Infinity 来带的 CPU 和内存开销

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

快速体验

  1. 打开Window > Package Manager,选择Tuanjie Registry,搜索并安装Infinity Particle System

  2. Hierarchy窗口中右键单击,选择Effects > Infinity Particle System,将粒子系统添加到场景中。

  3. 选中新建的粒子系统,在Inspector窗口中点击Create an InfinityAsset,创建配置文件。

  4. Scene窗口中,通过粒子面板控制粒子系统的播放。

    您也可以通过以下 Git 地址获取官方 Demo,以查看更多示例场景和性能对比。https://cnb.cool/tuanjie/Infinity_Benchmark_Suite

Infinity 的正式落地,标志着团结引擎在粒子特效领域给出了兼顾性能、兼容性与易用性的中国方案。无论是追求极致特效的主机游戏,还是对包体和算力敏感的小游戏,它都能成为你特效管线的新基石。

立即升级团结引擎 1.10.0,体验 Infinity 粒子系统的正式版魅力吧!

Unity 官方微信

第一时间了解 Unity 引擎动向,学习进阶开发技能

每一个“点赞”、“在看”,都是我们前进的动力

打开网易新闻 查看精彩图片