学习目标
你要能够解释什么
能设计一个最小图形调试器,并用它回答“谁写了这个像素”。
Interview evidence
题库练习
把这一节课的画面证据,接回 PDF 里的原题。先做一个小预测,再去题目页整理成自己的回答。
-
ShaderLab 法线 Shader
先自己猜:这道题在考什么?
参考答案:我会从 ShaderLab 的 Properties、SubShader/Pass 讲起,再说明 vertex 负责空间变换与传递,fragment 负责法线采样、TBN 变换和输出。编译通过只是起点,还要检查资源绑定、坐标空间、深度/混合状态和平台精度。
可观察证据:只改一个参数,记下画面变化,再写一句“所以它说明了什么”。
-
软遮挡与可见性
先自己猜:这道题在考什么?
参考答案:Shader 软遮挡可以读取 scene depth 与 sample depth,按深度差和 softness 生成连续可见度;传统遮挡查询通常返回整物体的可见/不可见并由 CPU/GPU 协同。软遮挡改善边缘,但不自动减少 draw call,必须分别测 overdraw 和提交成本。
可观察证据:只改一个参数,记下画面变化,再写一句“所以它说明了什么”。
-
Alpha to Coverage 与 Blend
先自己猜:这道题在考什么?
参考答案:Alpha Blend 按 alpha 连续混合颜色,适合玻璃等真正半透明,但排序和 overdraw 成本高;Alpha to Coverage 把 alpha 量化成 MSAA coverage,适合树叶等 cutout,边缘会受样本数限制。选择要看材质、MSAA、目标设备和实测,不能凭内部传闻下结论。
可观察证据:只改一个参数,记下画面变化,再写一句“所以它说明了什么”。
实验循环
按顺序做一次实验
-
Step 1
从帧结构开始
- 改什么
- Pass / draw / material
- 怎么做
- 先选择 pass,再缩小到 draw call。
- 你会看到
- 画面问题能被映射到一段有限的状态。
- 它代表
- 调试的第一步是缩小搜索空间,而不是马上改 shader。
Code anchor · graphics-debugger · frame tree
-
Step 2
冻结一个状态
- 改什么
- Freeze / isolate
- 怎么做
- 冻结相机或隔离一个材质。
- 你会看到
- 变量减少后,错误特征更稳定。
- 它代表
- 可重复性让视觉判断变成工程证据。
Code anchor · graphics-debugger · capture
-
Step 3
对照 shader 片段
- 改什么
- Source / uniform / output
- 怎么做
- 从输出颜色跳到对应 shader 区段。
- 你会看到
- 一个像素的结果可以追溯到输入 uniform 和分支。
- 它代表
- 工具最终要把画面、状态和代码放在同一条链上。
Code anchor · graphics-debugger · source map
快速复习
用三分钟找回因果链
这里没有第二套答案。以下内容直接来自上面的课程事实,方便你在面试前快速检索。
一句话核心
从 draw call、材质、深度和 shader 片段四个层次定位一个错误像素。
- 调试的第一步是缩小搜索空间,而不是马上改 shader。
画面证据:画面问题能被映射到一段有限的状态。
- 可重复性让视觉判断变成工程证据。
画面证据:变量减少后,错误特征更稳定。
- 工具最终要把画面、状态和代码放在同一条链上。
画面证据:一个像素的结果可以追溯到输入 uniform 和分支。
代码定位
- graphics-debugger · frame tree
- graphics-debugger · capture
- graphics-debugger · source map