Unity ParticleSystem Trail 源码阅读笔记

Unity ParticleSystem Trail 源码阅读笔记 源码路径: 阅读目的:设计一个比 Unity 原生 ParticleSystem Trail 性能更好的 GPU 拖尾方案。 目标场景:移动端(Android/iOS/Windows/WebGL),500 条拖尾同屏,单条最多 256 点。 文件清单 | 文件 | 内容 | | | | | | 总览:Unity 两种拖尾的定位、三…


Unity ParticleSystem Trail 源码阅读笔记

源码路径:D:\Engine\Unity\trunk\Engine_2022 阅读目的:设计一个比 Unity 原生 ParticleSystem Trail 性能更好的 GPU 拖尾方案。 目标场景:移动端(Android/iOS/Windows/WebGL),500 条拖尾同屏,单条最多 256 点。

文件清单

文件 内容
01-Overview.md 总览:Unity 两种拖尾的定位、三层架构、文件导读顺序
02-ParticleTrails-DataStructure.md 数据结构:大数组 + 环形缓冲 + 寻址公式
03-TrailModule-Update.md 每帧如何追加点、淘汰过期点、平滑死亡机制
04-GeometryJob-RenderPath.md 渲染路径:拉平 → LineBuilder → VBO 的 5 个步骤
05-LineBuilder-Expansion.md Billboard 展开的 CPU 实现细节 + 能否移到 GPU 的逐项分析
06-Performance-Analysis.md ⭐ 性能瓶颈识别 + 4 个优化方向 + 方案候选对比

一句话总结

Unity 的 ParticleSystem Trail 架构是 2011 年定型 的: 为了兼容 ES 2.0,把所有展开逻辑放在 CPU(LineBuilder), GPU 只做标准顶点变换。

在现代移动端(ES 3.0+)可以把 billboard 展开环形缓冲解码 推给 GPU VS, 理论上可以做到 比 Unity 原生快 20x CPU,-66% 带宽

关键源码行号速查

模块 文件 关键行号
TrailModule::Update Modules/ParticleSystem/Modules/TrailModule.cpp L39-129
ParticleTrails 数据结构 Modules/ParticleSystem/ParticleTrails.h L19-242
AddPosition 同上 L85
PopBack 同上 L42
TrailGeometryJob::RenderJobCommon Modules/ParticleSystem/ParticleSystemGeometryJob.cpp L3277
拉平环形缓冲 同上 L3410-3426
平滑死亡 同上 L3441-3450
ConfigurePerParticleTrailParams 同上 L3687
StoreLineData Runtime/Graphics/LineBuilder.cpp L62
Calculate2DLineExtrusion Runtime/Graphics/LineBuilder.h L231
WriteLineVertex Runtime/Graphics/LineBuilder.cpp L178
Build3DLine Runtime/Graphics/LineBuilder.cpp L437
与 ScriptableRenderLoop 调度 Modules/ParticleSystem/ParticleSystemGeometryJob.cpp L2475-2814