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

Unity性能优化_粒子特效(Particle System)

对CPU和GPU来讲,是一个性能消耗的大户。

以下记录一些针对移动端的优化方式与思考。

优化方式

一 限制同屏Max粒子数

数量尽可能少,推荐30-50个粒子系统,300-500个总粒子数(2021年)。

二 设计复杂度

避免粒子发射器之间的嵌套迭代,控制在1-2层。

三 面积占比

尽可能小,过大会影响像素填充率。

四 贴图
  • 降低分辨率
  • 很小的粒子,考虑去掉Alpha通道

半透将产生大量的Overdraw。一般来说,Overdraw可能是粒子特效消耗性能的最大因素。

五 Shader

发布移动端,Shader用Mobile平台的。

六 光照计算复杂度
  • 不接收阴影,不产生阴影
  • 去掉灯光相关设置
七 Render Mode

Billboard优先于Mesh类型。

对于Mesh类型:

  • DCC软件合并Mesh
  • 勾选Unity的Static选项
  • 如果骨骼,骨骼数量少于30
  • 建议同一时间不超过5个,单个顶点不超过500
  • GPU实例化(Enable Mesh GPU Instancing)
  • 取消脚本交互&物理碰撞(注意去掉Mesh Collider)

八 限制发射速率 Loop Duration

如果周期很小,就会不断的生成发射器,对CPU也有一定影响。

九 剔除&可见性更新

可以在Unity的剔除系统中嵌入CullingGroup,这样就可以使用边界球创建剔除区域。

当该区域变为可见或不可见时会发送一条通知,以便不可见时暂停粒子系统并在重新可见时恢复。

这样做的缺点是,屏幕之外的粒子会是静止的,这可能对某些效果有影响。避免这个缺点的方法是将粒子系统模拟快进一些来伪装粒子系统在不可见时仍然工作的假象。

参考:Unity小技巧:粒子系统性能-剔除(转) - 其他资源 - Powered by Discuz!

十 批处理
  • 粒子单独使用一个layer,合批的效果会更好。
  • 减少材质数量,用一个atlas纹理,便于合批,在shader中使用纹理坐标偏移。
  • 深度排序,通过修改Order in Layer减少粒子渲染的穿插从而增大合批的概率。但通常由于相机的运动、粒子系统的分散分布等原因造成粒子系统之间的穿插,能够动态拼合的数量往往都是很少的。
十一 性能分级 & LOD & AIGC

传统做法:在性能分级的时候,就是直接关闭/开启某些特效。
更理想的情况应该是Lod,但是人为预制将带来可观的工作量。
所以是否可以利用AI实时预处理呢?

Profiler指标

ParticleSystem.particleCount

可以通过此统计同屏的粒子总数。如果是不想继续产生粒子,可以在逻辑中统计,然后根据需求使用pause等方式来控制粒子继续产生。

ParticleSystem.ScheduleGeometryJobs

是指在Culling之前主线程要等待子线程计算Particle的位置,然后才能Culling。往往在战斗界面开销较高。

  • 考虑在中低端设备上尽可能降低粒子系统的复杂程度。
  • 采用剔除方式,降低不必要的粒子系统Schedule开销。
ParticleSystem.Draw

调用次数对应的是粒子系统的DrawCall数量。

  • 考虑减少粒子系统的数量。
  • 可以通过使用TextureSheetAnimation的方式,或者通过修改Order in Layer减少粒子渲染的穿插从而增大合批的概率。

更多方案

一 序列帧

考虑替换为序列帧实现,比如一些细小的蝴蝶或蜜蜂群的效果。

二 Job化 & DOTS
三 Visual Effect Graph

如果要创建包含大量粒子的视觉效果并且需要高度可自定义的行为,请使用 Visual Effect Graph 而不是内置粒子系统。

Visual Effect Graph 利用 GPU 模拟粒子行为,可模拟的粒子数量远远超过内置粒子系统。

参考

Particle systems in Unity – Unity 手册 (unity3d.com)

http://www.cnnetsun.cn/news/4242346.html

相关文章:

  • MATLAB高温防护服热传导建模实战:从数模竞赛到工程复现
  • 驳斥关于 ML-KEM 的误解
  • 蓝牙传感器开发新范式:Lynx库如何统一固件与App数据链路
  • 生物医学信号处理(北京工业大学)第二章
  • SPADE框架:可执行环境+自对弈+共进化,让AI自己生成训练环境
  • 用 Python 驱动 COMSOL 自动化仿真:6 行代码跑通
  • 刚刚,ChatGPT 开始卖广告了!
  • 什么是 SAP HANA Cloud 内置的 Property Graph Engine(属性图引擎)
  • BiliTools 开源 B站下载工具:把番剧、音乐、弹幕存到本地
  • 多模态图Transformer预训练:构建下一代推荐系统基础架构
  • E27灯座电流钳测试实战:从原理到精准测量的完整指南
  • AI服务器涨价超15%:内存成本飙升背后的工程应对之道
  • AI问答努力程度选择器实现指南:从粒度设计到前后端参数映射
  • Lodash.js核心函数实战指南:提升JavaScript工程效率
  • 医疗AI Agent执行层为何绕不开X12标准?工程实践指南
  • 零基础入门具身智能:从运动控制到ROS2工程实践
  • Win10专业版卡顿重装系统全指南:判断、备份、安装与优化
  • 临床数据建模实战:时间对齐、语义校验与诊疗逻辑嵌入
  • 用LangChain只会调包?3处源码让你从调包到掌控,效率翻倍
  • MATLAB工程师实战指南:从矩阵哲学到工业级避坑
  • 数学建模竞赛中聚类算法实战:从DBSCAN到K-Means的选型与应用
  • Matlab实战社交推荐:从协同过滤到矩阵分解的数学建模
  • 数学建模竞赛中黄河水沙数据的时空特征分析与Python实现
  • 01-python自动化测试学习路线
  • 京东商品库存监控自动下单:10分钟跑通 jd-happy 全流程?
  • DBX--开源、轻量的数据库与数据基础设施工作台
  • 华为MetaERP # Oracle EBS FA 资产业务层 —— 资产主数据完整深度解析## 前置架构边界EBS FA 分层回顾:1. **资产业务层**:资产主数据、资产事务引擎、分
  • CSP-J 初赛(以满分为目标):第十课《排序算法基础——让一群“乱站的同学”排好队》
  • 车载 ECU 信息安全入门:一文看懂安全启动(Secure Boot)原理
  • 降低aigc免费网站怎么选?知网维普万方AI降重和查重适配实测