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

准备阶段 Statistics界面性能分析

Unity性能优化是一个系统工程,需要从渲染优化、资源加载优化、脚本性能优化和内存管理优化等多个方面综合考虑。开发者应根据项目实际情况选择合适的优化策略,并结合实际需求进行调整和优化。通过不断优化,可以显著提升游戏的运行效率和用户体验。

Unity的 Statistics (stats)

Audio

Level

单位是分贝(dB) 表示音频听声音的大小,是闪烁波动的.

DSP Load 

数字信号处理(Digital Signal Processing)负载,即用于音频效果处理的时间。如果DSP负载过高,可能意味着太多的音频效果正在被应用,或者效果处理过于复杂。

Graphics

FPS

当前游戏的帧数,计算方式是:1000毫秒除CPU main的时间得到帧数, 1000/7.1=140.7 帧,cpu main时间越少越好,游戏当前负载,每秒最多可以绘制140.7次

Main Thread

主线程,cpu渲染这一帧所耗费的时间,我们调用unity api ,游戏的业务逻辑都在这里,比如控制物体的transform信息。

Render Thread

渲染线程,提交绘制命令到显卡 , 0.8ms显卡渲染这一帧所消耗的时间.

Batches

批处理 (Batching)”可让引擎尝试将多个对象的渲染组合到一个内存块中以便减少由于资源切换而导致的 CPU 开销。
批次,绘制游戏场景,我们分几个批次提交给CPU来绘制

Batches又可以理解成Drawcall

Saved by Batching

场景中,有多少个物体是被合批绘制渲染的。
假设在有三个批次,
每个批次有25个,则为(10-1)*3=27,则Saved by Batching=27

Tris(三角形点数)

绘制的三角形的数目,又叫面数,数据越低越好

Verts

绘制的图形的顶点数,数据越低越好

Screen

屏幕分辨率大小,以及这个分辨率所消耗的内存

SetPass call

绘制一个3D物体----》渲染管道流水线-----》图像屏幕-----》pass 渲染管道。
配置渲染管道,shader配置好,切换shader的次数,这个性能消耗很高
尽可能让同一个shader物体在一起绘制,每次切换shader就会+1

Shadow casters

阴影开销,可以通过灯光界面打开和关闭阴影

Visible skineed meshes

渲染的蒙皮网格的数量, 可见的蒙皮网格数量,蒙皮网格比普通的网格消耗性能。

Animation compoents playing

animation 正在播放的数量 ,当数量很多的时候会降低帧率
animation 每一帧,都会计算我们的模型的顶点的数量,采样,所以就会比较消耗性能

Animator compoents playing

Animator 正在播放的数量,当数量很多的时候会降低帧率
Animator 每一帧,都会计算我们的模型的顶点的数量,采样,所以就会比较消耗性能

影响图形性能的主要因素

游戏的图形部分主要影响计算机的两个系统:CPU 和 GPU。找到性能问题所在是一切优化的首要法则,因为 GPU 与 CPU 的优化策略大不相同(甚至相反;例如,通常在优化 CPU 时让 GPU 做更多工作,反之亦然)。

常见瓶颈及检查方法:
  • GPU 通常受填充率或内存带宽制约。

降低显示分辨率并运行游戏。如果显示分辨率降低后游戏运行更快,表明 GPU 填充率可能是限制因素。

  • CPU 通常受到需要渲染的批次数的限制。

检查 Rendering Statistics 窗口中的“batches”。渲染的批次越多,CPU 成本越高。

不太常见的瓶颈及检查方法:
  • GPU 有太多顶点需要处理。可接受的能确保良好性能的顶点数量取决于 GPU 和顶点着色器的复杂程度。一般来说,移动端应不超过 100,000 个顶点。另一方面,即使有数百万个顶点,PC 也能管理到位,不过最好还是通过优化尽可能减少此数量。
  • CPU 有太多顶点需要处理。这些顶点可能位于蒙皮网格、布料模拟、粒子或其他游戏对象和网格中。如上所述,通常较好的做法是在不影响游戏质量的情况下尽可能降低此数量。
  • 如果渲染在 GPU 或 CPU 方面不是问题,则可能在其他地方存在问题,例如在脚本或物理系统中。请使用 Unity Profiler 找出问题。

用于提高游戏运行速度的简单核对表

  • 在针对 PC 平台进行构建时,保持顶点数量低于 200K 和 3M/帧(具体值取决于目标 GPU)。
  • 如果要使用内置着色器,请从 Mobile 或 Unlit 类别中选取。这些类别也适用于非移动平台,但它们是更复杂着色器的简化和近似版本。
  • 保持每个场景使用较少的不同材质,并尽可能在不同对象之间共享材质。
  • 在非移动对象上设置 Static 属性以便允许内部优化,如静态批处理。
  • 只有一个(最好是方向性的)pixel light 影响几何体(而不是有多个)。
  • 烘焙光照而不是使用动态光照。
  • 尽可能使用压缩纹理格式,并使用 16 位纹理而非 32 位纹理。
  • 尽可能避免使用雾效。
  • 如果复杂的静态场景具有大量遮挡,使用遮挡剔除减少可见几何体数量和绘制调用次数。设计关卡时注意遮挡剔除。
  • 使用天空盒“伪造”远处的几何体。
  • 使用像素着色器或纹理组合器来混合多个纹理而不是使用多 pass 方法。
  • 尽可能使用 half 精度变量。
  • 最大限度减少在像素着色器中使用复杂的数学运算,例如 powsin 和 cos
  • 每个片元使用更少的纹理。

今天是2024年11月20日

重复一段毒鸡汤来勉励我和你

你的对手在看书

你的仇人在磨刀

你的闺蜜在减肥

隔壁的老王在练腰

而你在干嘛?


http://www.kler.cn/a/406382.html

相关文章:

  • 如何使用ChatGPT整理和收集论文实验数据?
  • Linux|进程程序替换
  • 【1.4 Getting Started--->Support Matrix】
  • OpenCV 计算图像清晰度
  • Android 分区相关介绍
  • vue2 src_消息订阅和发布(pubsub-js)
  • uniapp H5上传图片前压缩
  • vue的class绑定,后边的类会覆盖前边类样式吗
  • 3-22 ElementPlus:表单
  • vue3 在哪些方便做了性能提升?
  • 【不墨迹系列】快速入门 XML 语言
  • SpringCloud OpenFeign用户转发在请求头中添加用户信息 微服务内部调用
  • STL-stack栈:P1981 [NOIP2013 普及组] 表达式求值
  • Cannal实现MySQL主从同步环境搭建
  • 量子神经网络
  • Java 创建不可变集合
  • 浅谈丨功能安全测试,汽车的守护者
  • 40分钟学 Go 语言高并发:sync包详解(下)
  • 如何用通义灵码助力项目开发 | OceanBase obdiag 项目共建实践
  • 【大数据学习 | Spark-Core】Spark的分区器(HashPartitioner和RangePartitioner)
  • 大数据新视界 -- 大数据大厂之 Hive 数据导入:多源数据集成的策略与实战(上)(3/ 30)
  • xiaolin coding 图解网络笔记——HTTP篇
  • Antd中的布局组件
  • RecyclerView详解——(四)缓存复用机制
  • 论文阅读——Intrusion detection systems using longshort‑term memory (LSTM)
  • 儿童玩具安全检测GB6675标准详细介绍