Unity粒子特效工具需求文档

最近准备做一个粒子特效性能优化相关的工具,项目组大佬的需求大概如下:

项目组希望能有一个特效批量检测工具,具备以下功能

  • 批量选择多个特效文件,预估这些特效文件大批量出现时的dc数量
  • 以一个评估算法来提示这些特效文件中哪些可简化,哪些可合批(较难)
  • 可快速调整特效材质的sort_order,并实时提示避免和其他调整冲突

一、待解决的核心问题是

  • 同RenderQueue下特效穿插导致动态合批经常无法按预期进行。
    (目前公司项目粒子特效的主流实现方式都不满足开启GPU Instance的条件,暂不考虑基于GPU Instance的优化,仅针对动态合批的情况,后续有需求再考虑扩展)

  • 特效手动调整sort_order后,渲染顺序错误导致显示异常的问题。
    特效大部分都是透明的,透明度混合对渲染顺序的要求十分严格,必须从远到近进行渲染,但粒子位置发散很容易造成穿插出现显示问题。所以我们的特效中通常使用Sorting Layer/Sorting Order(Render Queue对材质的影响是全局的 通用材质不好控制)确保渲染顺序的正确。

项目组举的例子:一个特效,用了十个材质,Render Queue/Sorting Layer/Sorting Order均相等,10个炮弹同时飞行,dc最差情况能到100
针对这个例子用空场景做了验证,同个特效十个实例互相穿插,确实会造成dc暴增,调整Sorting Order后,dc数降到接近特效所使用的材质数。

对比Game视图Statistics面板中的几项关键数值

Sorting Order调整前 Sorting Order调整后
Batches 47 11
SetPassCall 47 12
SavedByBatching 63 110
耗时 6.0ms 1.8ms

(数据源于PC Editor,且不是同一帧对比,并不严谨但也能看出整体变化的趋势)

数值变化原因分析

  • 调整前
    由于Render Queue/Sorting Layer/Sorting Order相同(特效的贴图一般都是透明的,Render Queue默认3000,Sorting Layer默认default,Sorting Order默认0,美术同学开发过程中不特意调整很容易会出现这种情况),Unity会按照摄像机从远到近的顺序渲染。
    由于特效材质不同的层级间互相穿插,所以渲染过程需要反复切换材质信息,SetPassCall较高,由于切换渲染状态操作较为耗时(CPU写入数据到GPU),故整体耗时也较高
    动态合批由于材质不同被打断,导致合批无法正常进行,SavedByBatching降低,整体batches也较高
    补图补图补图补图补图补图
    补图补图补图补图补图补图
  • 调整后
    所有相同材质的渲染顺序相邻,满足动态合批条件,经动态合批自动合到一个batch处理,SetPassCall降低(基本与材质种类相当),整体耗时降低,SavedByBatching增加,batches数降低。
    补图补图补图补图补图补图
    补图补图补图补图补图补图

二、项目组提出的痛点在于

  • 评估哪些贴图能优化
  • 无法立刻测试在多个混合特效出现时的实际效果
  • 美术调整Render Queue/Sorting Layer/Sorting Order时,经常出现调完一个又和另外一个冲突的情况

三、项目组那边的临时解决方案

  • 把指定特效所有材质用到的贴图快速展示出来,点击可以直接锁定到对应节点的材质,减少美术挨个去节点翻的工作量
  • 选择可以快速隐藏显示对应贴图所有Render,让美术评估改动这个贴图对整个特效的影响
  • 支持批量通用资源替换,代替一步步改贴图,改texsheet的步骤(这一点没太弄明白 如果是理解的把贴图换成项目通用的贴图的话 好像不太好做通用)

四、工具的初步设想

做成一个场景,分为两部分,非运行时提供一系列简化Prefab修改流程的工具,运行时打印粒子特效相关的各项指标(下文详述)

非运行时
  • Hierarchy扩展

    • 快速修改渲染层级
      在Hierarchy面板含有Particle System的组件名字右侧,提供Render Queue/Sorting Layer/Sorting Order的快速修改入口(具体显示几项可配置 不知道特效同事的操作习惯 感觉一般调Sorting Order就够了)及可以快速隐藏显示对应贴图所有Render的按钮
      特效transform层级一般比较多,Inspector面板也需要展开ParticleSystem/Render,确实操作比较繁琐,节省美术同事一层层查找修改的时间
    • 同渲染层级警告
      同时如果场景中其他特效存在满足Render Queue/Sorting Layer/Sorting Order均相等的情况 显示警告图标
      提示渲染层级一致,如果位置穿插就会出现问题

(这里后来想了想,运行时也支持修改保存到预设应该体验会更好,实现过程中再决定)

运行时

将场景中的特效实例化n(n支持配置)份,微调position,刻意造成特效间的穿插,循环播放,方便观察性能数据情况和游戏画面显示情况(是否显示顺序有异常)

打印出运行时粒子特效相关的各项指标,包含数据项如下

  • 特效播放时Overdraw情况

    • 特效预计填充顶点数
    • 特效实际填充顶点数
    • 填充率 (填充率 = (特效实际填充顶点数 - 特效预计填充顶点数) / 特效预计填充顶点数)
  • 特效播放时DrawCall(batches)情况
    • 当前batches
    • 最高batches
  • 特效总贴图情况
    • 贴图内存
    • 贴图数量
  • 特效运行时包含的ParticleSystem组件数量
  • 播放特效时最大粒子数量

一套可配置的标准数值,实际数值与标准数值的大小情况会影响实际数值的显示颜色

  • 运行时数值 > 标准数值
    显示红色 提醒已经超出标准
  • 运行时数值 > 标准数值 * 0.7
    显示橙色 提醒即将超出标准
  • 运行时数值 < 标准数值
    显示绿色 处于安全范围
难点

上述非运行时功能有之前UI代码生成工具做Hierarchy扩展的基础,运行时部分各项数值的算法找到了可以参考的开源的工具,就是后来被UWA收编进本地资源检测工具的那个,从单种特效改到支持多种即可,实现上应该没有太大问题。

比较难的地方应该是第二点以一个评估算法来提示这些特效文件中哪些可简化,哪些可合批

美术同事做优化时的操作规律

  • 占画面小的减少贴图大小
  • 如果贴图又小,出现频率又高的就合并到一个图集作为通用资源

如何将这种行为用代码模拟,提示哪些Particle System可优化?

  • 提示贴图可缩减

    • 画面中的占比可以用填充率的算法按照占屏幕像素的比例获取,屏幕占比和贴图大小的关系给一套推荐数值?
  • 提示贴图建议合并
    • 贴图大小较小的都提示?
参考的一些截图

西山居特效开发环境(UWA2020分享)

Unity特效性能分析工具

开源库链接:
https://lab.uwa4d.com/lab/5c4e1e4c72745c25a802aa8a
作者Github:
https://github.com/sunbrando

Unity粒子特效工具需求文档相关推荐

  1. 好用的需求文档管理工具Telelogic DOORS

    Telelogic DOORS 是需求文档管理市场上的领先工具.使用DOORS,用户可以编辑.跟踪和管理项目中建立起来的所有需求,以保证最终产品符合所有定义的客户需求. 变更和配置管理. Telelo ...

  2. 产品经理基础——需求文档

    了解市场→了解需求→产品设计→产品运营 产品设计:产品理念,产品方案及规划,产品架构设计,交互设计,原型及需求,项目管理,验收及发布,用户体验,实战点评. 综述:01.产品规划 产品设计理念:02.产 ...

  3. 怎样快速查看文档是否统一_开发到底喜欢看怎样的需求文档

    ​一份好的需求文档不仅能提高开发效率,还能避免需求误解导致的返工. 开发喜欢看怎样的需求文档?我总结了以下7点. 目录 需求文档必备的基本要素 分工要明细,避免多人看同一份文档 逻辑要清晰,避免口口相 ...

  4. 开发到底喜欢看怎样的需求文档?

    一份好的需求文档不仅能提高开发效率,还能避免需求误解导致的返工. 开发喜欢看怎样的需求文档?我总结了以下7点. -1- 需求文档必备的基本要素 需求迭代.需求优先级.需求产品负责人.需求开发人员.需求 ...

  5. 程序员到底需要什么样的需求文档?

    PMCAFF(www.pmcaff.com):互联网产品社区,是百度,腾讯,阿里等产品经理的学习交流平台.定期出品深度产品观察,互联产品研究首选. 外包大师(www.waibaodashi.com): ...

  6. 产品需求文档的10步

    作者:风到月来 做好产品需求文档的这十步,是经过长期的实践经验和反复验证而得到的.可能这里描述的不是很全面,但他已经足够让你做一个成功的产品需求文档.做好这几步花费的时间要以项目的大小.复杂程度.个体 ...

  7. 产品需求文档 PRD

    第一轮: 1,文档使用方:UI设计师 2.内容:       根据战略层定义出来产品功能范围,       说明此产品的目的,方便UI设计人员更好的理解产品       产品基本流程       详细 ...

  8. 开发到底喜欢看怎样的需求文档

    一份好的需求文档不仅能提高开发效率,还能避免需求误解导致的返工. 开发喜欢看怎样的需求文档?我总结了以下7点. 目录 需求文档必备的基本要素 分工要明细,避免多人看同一份文档 逻辑要清晰,避免口口相传 ...

  9. PRD:「FITLIFE」小程序产品需求文档(用户端)

    这是我们私密学员写的的一个文档,拿出来和大家分享一下. Hi~最近在对自己参与过的项目进行总结,希望可以和大家分享学习交流.输出内容是检视自己的方式,所以我就来吸取经验了. 通过研读各位优秀作者的精品 ...

  10. Android APP开发需求文档范本

    Android  APP开发需求文档范本 软件需求文档格式的标准写法 1.引言 1.1 编写目的 • 阐明开发本软件的目的: 1.2 项目背景 • 标识待开发软件产品的名称.代码: • 列出本项目的任 ...

最新文章

  1. java学习与总结:多线程与并发
  2. 【NLP】Task3:特征选择
  3. Vscode解决Setting.json报警告:Problems loading reference ... Unable to load schema from ...
  4. FFMPEG结构体分析之AVPacket
  5. 友盟分享小程序_在线学习应用“小打卡”小程序分享
  6. 对No Starch Press出版的《Python Playground》一书的书评及其作者访谈录
  7. Lampp Xampp配置SSL及自动http重定向https
  8. 蓝桥杯 ADV-74 算法提高 计算整数因子
  9. mysql如何用sql增加字段和注释?
  10. 多页pdf怎样合并成一页?
  11. Android之NDK开发入门
  12. softmax函数反向传播
  13. Qt 绘制炫彩滚动文本
  14. 《这本书能让你睡得好》 阅读笔记与思考
  15. C# dotnet 获取某个字符所在 Unicode 字符平面映射
  16. 命中有时终须有,命中无时莫强求--命理理论
  17. 「雕爷学编程」Arduino动手做(17)---人体感应模块
  18. 【Linux】定时任务 | crontab定时任务
  19. 深入理解grpc(二):grpc原理
  20. P5.js之数组使用——绘制水墨画笔,实现跟随鼠标移动的效果

热门文章

  1. ifix与mysql_基于ODBC技术实现iFix组态软件与关系数据库通讯接口
  2. Netty权威指南2.2伪异步IO,Demo代码
  3. 嵌入式系统之CMSIS学习笔记
  4. 关于STM32F107RCT6使用8M晶振串口波特率错误的问题
  5. SQL数据库置疑的解决办法
  6. JAVA管理信息系统答辩ppt,个人信息管理系统答辩ppt
  7. 双目相机计算稠密深度点云详解教程
  8. 别总写代码,这130个网站比涨工资都重要
  9. python实现最长公共子串
  10. Anaconda python版本降级