8.帧调试器
8.1 知识点
帧调试器的作用
利用 Unity 自带的帧调试工具,我们可以查看游戏图像的某一帧是如何一步步渲染出来的。该工具可以通过 Window(窗口)→ Analysis(分析)→ Frame Debugger(帧调试) 来打开,使我们能够直观地了解渲染流程。
帧调试器的使用
工具栏
Enable/Disable
该按钮可以控制帧调试窗口是否处于启用状态。启用后,我们可以查看整个渲染过程;如果在运行时点击启用,则会暂停游戏。
Editor
Editor 模式可以帮助我们利用帧选择器进行远程调试。但在发布项目时,必须勾选 Development Build(开发模式构建)和 Run In Background(在后台运行)选项。
拖动条部分
拖动条以及左右箭头按钮允许我们逐步查看该帧的渲染步骤,从而了解这一帧是如何一点一点被渲染出来的。
渲染调用列表
这是帧调试工具的核心部分,列出了当前渲染帧中所有的渲染调用(Draw Calls)以及类似清空帧缓存等操作。每个条目都表示一个渲染步骤,我们可以在这里选择任意渲染步骤来查看相关信息。在该树状列表中,每一个叶子节点都是一个事件,而每个父节点右侧显示的则是该节点下的事件数目。
我们可以从事件的名字了解该事件的主要功能,例如:
- UpdateDepthTexture:更新深度纹理
- Drawing:绘图
- Render Shadow Map:渲染阴影贴图
- Collect Shadows:收集阴影
- ImageEffects:图像效果(屏幕后处理效果)
通过这些名字,我们可以清楚地知道各个步骤(事件)所执行的操作。
渲染事件详细信息
A:顶部工具栏
- 可以让我们为 Game 窗口当前状态隔离 RGBA 的颜色通道;
- 右侧的 Levels 等级滑动条可以根据亮度级别隔离试图区域;
- RT0:
- RT 代表 Render Target(渲染目标),表示当前帧的第几个渲染目标;
- RT0 一般指颜色缓冲区,即渲染场景得到的最终图像;
- 在一些复杂的渲染管线(如延迟渲染、后处理、阴影渲染等)中,可能存在多个渲染目标;
- 我们看到的 RT0 通常指代第一个输出图像。
- ALL、R、G、B、A:
- 用于选择查看渲染目标中具体通道的数据;
- 如果只选择其中一个,某个通道的值将单独提取出来,显示为灰度图像,让我们直观感受到该颜色通道的变化;
- 主要作用是当对某个颜色通道的数据特别感兴趣(如调试纹理、材质或透明度问题)时,可选择查看单一颜色通道。
- Levels:
- 用于调整渲染目标的色彩范围显示;
- RGBA 的范围通常是 0~1;
- Levels 允许我们调整这个范围的映射,因为有时渲染结果的颜色分量可能代表深度、法线或其他非标准颜色信息,数值可能非常接近 0 或 1。调整 Levels 可将细节拉升出来,更容易看出数据变化。
B:Output/Mesh
- Output 显示当前渲染调用的输出信息,包括渲染的目标图像、纹理或者缓冲区;
- Mesh 显示当前渲染调用所用的网格信息(即 3D 模型的顶点数据)。如果该调用渲染了物体的网格,可在此查看该网格的具体数据。
C:Details
- 显示当前渲染调用的详细信息,如渲染状态、材质、着色器、渲染目标等,这些信息有助于深入了解渲染的具体参数,确保每个渲染步骤都按照预期执行;
- 在此页签中,我们可以看到诸如剔除模式、所用 Shader、Pass、混合模式、深度测试是否开启、光照模式等信息,这些有助于排查渲染问题。
D:Keywords
显示当前渲染调用中所用的着色器关键词,这些关键词控制着色器中的条件编译,决定了哪些部分的着色器代码会被启用。
E:Textures
显示当前渲染调用使用的纹理数据。你可以查看与当前渲染相关的所有纹理,例如漫反射纹理、法线纹理、镜面反射纹理等。
F:Ints
显示当前渲染调用中传递到着色器的整数数据。这些数据通常作为着色器常量(如材质参数、场景配置等)传入。
G:Floats
显示当前渲染调用中传递到着色器的浮点数数据。浮点数通常用于表示诸如颜色值、材质属性、光照强度等浮动数据。
H:Vectors
显示当前渲染调用中传递到着色器的向量数据。向量通常用于存储坐标、法线、颜色(例如 RGB 颜色值)或其他方向性数据。
I:Matrices
显示当前渲染调用中传递到着色器的矩阵数据。在 3D 渲染中,矩阵通常用于变换(如模型矩阵、视图矩阵、投影矩阵)或表示变换数据。
J:Buffers
显示当前渲染调用使用的缓冲区数据。缓冲区可能是顶点缓冲区(存储模型的顶点数据)、索引缓冲区(存储模型的索引数据)等。
K:Constant Buffers
显示当前渲染调用中传递给着色器的常量缓冲区数据。常量缓冲区通常用于传递一些不常变化的值(例如视图矩阵、世界矩阵、光照参数等)。
总结
帧调试器是一个非常强大的工具,特别在渲染调试、优化和效果分析方面具有重要意义。它可以帮助我们:
- 精准调试渲染问题,逐步查看渲染调用;
- 优化性能,通过分析渲染调用找出性能瓶颈并进行优化;
- 调试材质、纹理和着色器,快速定位渲染时使用的材质、纹理和参数问题;
- 可视化渲染过程,通过查看渲染目标和中间结果,深入了解整个渲染流程。
这些功能使得帧调试器成为开发者在调试和优化渲染流程时不可或缺的工具。
8.2 知识点代码
Lesson08_帧调试器.cs
using UnityEngine;
public class Lesson08_帧调试器 : MonoBehaviour
{
void Start()
{
#region 知识点一 帧调试器的作用
//我们可以利用Unity自带的帧调试工具
//看到游戏图像的某一帧是如何一步步渲染出来的
//我们可以在 Window(窗口)——>Analysis(分析)——>Frame Debugger(帧调试) 中打开帧调试工具
#endregion
#region 知识点二 帧调试器的使用
//要使用帧调试器
//我们必须要认识该窗口上各部分有什么作用
#endregion
#region 总结
//帧调试器是一个非常强大的工具
//特别是在渲染调试、优化和效果分析方面有着重要的意义
//它可以帮助我们
//1.精准调试渲染问题,可以逐步查看渲染调用
//2.有助于优化性能,通过分析渲染调用,找出性能瓶颈并优化
//3.有助于调试材质、纹理和着色器,可以查看渲染时使用的材质、纹理和参数、快速定位问题
//4.可视化渲染过程,可以通过查看渲染目标和中间结果,深入了解渲染过程
//等等
#endregion
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com