7.Profiler窗口 Rendering

7.Unity性能分析工具-Rendering


7.1 知识点

Rendering是什么

Rendering(渲染)模块用于显示一帧渲染时的数据量(批次数、顶点数等)。它更像一个“渲染统计面板”,能帮助我们快速判断:当前帧是不是因为 DrawCall / 材质切换 / 几何量 等渲染因素导致性能压力变大。

在游戏中如果出现以下问题时,可以着重观察这里的内容:

  1. 怀疑是因为 DrawCall 过高导致 CPU 性能问题(卡顿、掉帧)
  2. 在中低端手机上发热严重、掉电快
  3. 开启大量实时光照、粒子、动态对象后出现掉帧
  4. 画面复杂卡顿、简单不卡顿时
  5. 等等等等

Rendering中各参数功能的含义和作用

渲染(Rendering)分析窗口

在这里显示有关 CPU、GPU 和渲染相关的统计信息。常用指标:

  • Batches Count(批处理数):该帧内批处理数量(Draw Call 次数)
    • 值越高,CPU 压力越大。推荐合批优化
  • SetPass Calls Count(SetPass 调用次数):该帧内着色器渲染通道(Pass)调用次数
    • 也就是每帧需要切换 Shader/材质状态的次数
    • 值越高,状态切换越频繁,容易阻碍批处理。尽量减少材质数量与 Pass 数量
  • Triangles Count(三角形数量):该帧渲染了多少个三角形(网格面数量)
    • 影响 GPU 处理负荷,移动端尤其要控制
  • Vertices Count(顶点数量):该帧渲染了多少个顶点
    • 影响 GPU 顶点处理性能

详细参数

  • SetPass Calls:渲染通道(Pass)调用次数,即该帧向 GPU 提交的材质状态切换次数
  • Draw Calls:该帧从 CPU 发起的绘制命令总次数(包含非批处理和动态/静态批处理绘制调用)
  • Batches:该帧实际合并成的渲染批次数
  • Triangles / Vertices:该帧渲染的三角形/顶点数量
  • Dynamic Batching / Static Batching / Instancing:动态批处理 / 静态批处理 / GPU Instancing(同一网格多个实例共享)
  • Batched Draw Calls / Batches / Triangles / Vertices / Time:合批相关统计与处理时间
  • Used Textures:该帧使用的 Unity 纹理数量与纹理占用内存量
  • Render Textures:该帧使用的渲染纹理数量与内存量
  • Render Textures Changes:该帧设置渲染纹理为渲染目标的次数
  • Used Buffers:GPU 缓冲区和内存总数(包括顶点/索引/计算缓冲区以及渲染所需内部缓冲)
  • Vertex Buffer Upload In Frame:CPU 在该帧上传到 GPU 的几何数据量(顶点、法线、纹理数据)
  • Index Buffer Upload In Frame:CPU 在该帧上传到 GPU 的三角形索引数据
  • Shadow Casters:该帧中投射阴影的游戏对象数量(一个物体受多个光源影响时会重复计入)

使用建议(着重关注)

  1. Draw Calls 数量:CPU 发给 GPU 的绘制命令数量
    • 高了 CPU 开销大、容易成为瓶颈
    • 优化方向:合批(静态、动态合批、GPU Instancing),材质合并等
  2. SetPass Calls 数量:提交材质/着色器状态的次数
    • 高了状态切换频繁,会阻碍批处理
    • 优化方向:减少材质和 Shader 变体数量、合并材质等
  3. Batches 数量:合批后的实际批次数,理论上越低越好
    • 可用于评估合批优化是否生效
  4. Triangles / Vertices 数量:实际渲染的面数和顶点数
    • 移动设备建议控制在适当范围(例如低端机每帧不超过 50w 三角形,具体看设备)
  5. Render Textures:当前帧中创建/使用的渲染纹理数量与内存
    • 如果高了,意味着内存开销大,频繁切换也会影响性能
    • 尽量复用 RenderTexture,减少临时对象创建
  6. 等等等等

Rendering对于我们的意义

Rendering 可以帮助我们:

  1. 定位 CPU 渲染压力的关键依据
    • 批处理次数多 → DrawCall 高 → CPU 消耗高
    • 材质切换次数多 → CPU 频繁设置材质 → 可能带来批处理失败
  2. 判断 GPU 处理压力是否过大
    • 三角形面数、顶点数都会直接影响 GPU 渲染耗时
    • 数据量过大往往是因为模型太复杂、粒子特效过多、动态对象过多
  3. 判断画面复杂度对性能的影响
    • 进入不同场景、摄像机角度变化、特效显示/隐藏都可能带来数据变化
    • 这些数据能让性能下降“有据可查”
  4. 分析批处理的策略是否生效
    • 看看使用了静态/动态批处理后,相关参数是否仍然很高
  5. 等等等等

7.2 知识点代码

Lesson07_Unity性能分析工具_Rendering.cs

public class Lesson07_Unity性能分析工具_Rendering
{
    #region 知识点一 Rendering是什么

    /*
     * Rendering(渲染)模块
     * - 用于显示一帧渲染时的数据量(批次数、顶点数等)
     *
     * 在游戏中如果出现以下问题时,可以着重观察这里的内容:
     * 1. 怀疑是因为 DrawCall 过高导致 CPU 性能问题(卡顿、掉帧)
     * 2. 在中低端手机上发热严重、掉电快
     * 3. 开启大量实时光照、粒子、动态对象后出现掉帧
     * 4. 画面复杂卡顿、简单不卡顿时
     * ……等等
     */

    #endregion

    #region 知识点二 Rendering中各参数功能的含义和作用

    /*
     * Rendering 中各参数功能的含义和作用:
     * - 详见笔记正文(Rendering 分析窗口、详细参数与使用建议)
     */

    #endregion

    #region 知识点三 Rendering对于我们的意义

    /*
     * Rendering 可以帮助我们:
     * 1. 定位 CPU 渲染压力的关键依据(DrawCall/SetPass 等)
     * 2. 判断 GPU 处理压力是否过大(三角形/顶点等)
     * 3. 判断画面复杂度对性能的影响(不同场景/角度/特效开关)
     * 4. 分析批处理策略是否生效(静态/动态批处理、Instancing)
     * ……等等
     */

    #endregion
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏