当前位置: 首页 > news >正文

海量粒子特效解决方案:VEG

        Unity 官方除了一个 GPU 粒子特效的解决方案:Visual Effect Graph,即 VEG,能支持百万级粒子特效的播放。在性能要求高的使用场景中,这个解决方案就能完美解决原本 Particle System 性能低下的问题。关于 VEG 的基本使用方法参考官方文档和 GitHub 上的示例工程即可,这里不做介绍。这里主要介绍程序如何通过代码调用实现批量生成粒子特效的实现方法。

  • VEG官方文档:https://docs.unity3d.com/Packages/com.unity.visualeffectgraph@17.0/manual/index.html

  • VEG示例工程:https://github.com/Unity-Technologies/VisualEffectGraph-Samples


        首先,在 VEG 里面是可以同时存在多个粒子系统的。如下图所示:我这里做的 VEG 特效就是同时包含2个粒子。

        由于我们是要在游戏中批量生成粒子特效(几百上千个),所以肯定不能说每个粒子特效都生成一个实例。在 VEG 中,我们可以用 GraphicsBuffer 实现。

        在 VEG 的属性面板中增加一个GraphicsBuffer,这里将其命名为 PositionBuffer,表示每个特效所在的位置。

        然后再增加一个 int 属性,表示当前需要渲染多少个粒子,将其命名为 SpawnCount。

        还需要创建2个 Vector3 的属性,BoundCenter和BoundSize,表示这个粒子特效的渲染范围是多大。如果相机没有覆盖粒子特效的范围,则VEG会自动裁剪。

        最后属性面板如下图所示:

        之后在编辑画布中,就可以创建对应节点(通过右键创建节点或者直接从属性窗口拖到画布中)。

        SpawnCount 在粒子特效生成时就赋值,告知 VEG 当前需要绘制多少个粒子。

        在粒子初始化时,需要设置粒子特效的 Bounds 信息,如下图所示:

        注意,这里的 Capacity 也要设置为合适的数量。这里是按照单个粒子的数量计算的容量,例如一个特效,同时发生10个粒子,最多生成100个特效,这里就要填1000+。否则,超过这个数量的粒子是不会发射出来的。

        之后就是 PositionBuffer 的使用了,如下图所示:

        这里的节点设置的意思是通过当前粒子特效的 SpawnIndex 在 PositionBuffer 中取得对应下标的值(Vector3),之后就能直接将其赋值给对应粒子的 Position。

        接下来就是代码调用,这里就和传统的 GPU 直接绘制的操作差不多了:

private GraphicsBuffer m_Buffers;
public VisualEffect effect;public void SetEffectsData(NativeArray<PositionData> value, int count, Vector3 center, Vector3 size)
{m_Buffers.SetData(value);// 填充数据后绑定到 VEGeffect.SetInt(“SpawnCount”, count);effect.SetVector3(“BoundsCenter”, center);effect.SetVector3(“BoundsSize”, size);effect.SetGraphicsBuffer(“PositionBuffer”, m_Buffers);
}

        接下来就是做下测试:

100 个粒子特效,200+FPS;
10000 个特效(粒子数约10万),仍然是 200+ FPS

        可以说即便是海量的粒子特效,这套系统也不会有性能压力。同时,在表现效果上,这套粒子系统也能支持绝大多数特效(参考Unity官方的示例工程),可以说是一个完美的解决方案了。美中不足的是,使用 VEG 需要美术特效制作人员和相关程序重新学习新技术,这确实就是个不小的难点了。

http://www.xdnf.cn/news/110107.html

相关文章:

  • java六人打分
  • 高效并发编程:无锁编程
  • 字节系a_bogus补环境
  • 浏览器相关知识点
  • 路由交换实验-手动聚合与LACP
  • 自动创建 中国古代故事人物一致性图画,看看扣子的空间是否能达到你的满意,自媒体的福音?
  • 【KWDB 创作者计划】_上位机知识篇---MicroPython
  • 一,开发环境安装
  • w~大模型~合集13
  • AUTODL关闭了程序内存依然占满怎么办
  • 〖 Linux 〗掌握 Linux 共享目录:权限、管理与最佳实践
  • 防火墙事件日志及日志分析
  • Python数据清洗笔记(上)
  • 文件内容隐写
  • 面向电力变压器的声纹智能诊断系统简析
  • Springfox + Swagger 的完整配置及同类框架对比的详细说明
  • (即插即用模块-特征处理部分) 四十一、(2024) MSAA 多尺度注意力聚合模块
  • 我的独立开发技术栈
  • 未曾设想的道路1
  • Ubuntu22.04新版本谷歌无法使用搜狗输入法/中文不显示
  • 三、Python编程基础03
  • 使用Python模拟子弹与子弹的碰撞
  • 四神-华夏大地的守护神
  • 【AI】MCP,弥补Agent的缺陷
  • 一个关于相对速度的假想的故事-7
  • “该虚拟机似乎正在使用中“
  • HCIP实验二(OSPF网络配置与优化)
  • 智能指针(weak_ptr )之三
  • MySQL 8.4企业版 安装和配置审计插件
  • 大模型Agent