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 |