在团结引擎 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 和内存开销
![]()
![]()
快速体验
打开Window > Package Manager,选择Tuanjie Registry,搜索并安装Infinity Particle System。
在Hierarchy窗口中右键单击,选择Effects > Infinity Particle System,将粒子系统添加到场景中。
选中新建的粒子系统,在Inspector窗口中点击Create an InfinityAsset,创建配置文件。
在Scene窗口中,通过粒子面板控制粒子系统的播放。
您也可以通过以下 Git 地址获取官方 Demo,以查看更多示例场景和性能对比。https://cnb.cool/tuanjie/Infinity_Benchmark_Suite
Infinity 的正式落地,标志着团结引擎在粒子特效领域给出了兼顾性能、兼容性与易用性的中国方案。无论是追求极致特效的主机游戏,还是对包体和算力敏感的小游戏,它都能成为你特效管线的新基石。
立即升级团结引擎 1.10.0,体验 Infinity 粒子系统的正式版魅力吧!
Unity 官方微信
第一时间了解 Unity 引擎动向,学习进阶开发技能
每一个“点赞”、“在看”,都是我们前进的动力
![]()
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.