跳到主要内容
graphics-debugger · 课程
从引导学习开始

建议顺序 12 · Shader 与材质

Graphics Debugger:把渲染状态变成证据

调试视图不是附属 UI,而是帮助你缩短假设到证据的路径。

从 draw call、材质、深度和 shader 片段四个层次定位一个错误像素。

未完成

这一课的入口

按你现在的状态开始

内容只有一份。入口只改变阅读顺序,不会把技术结论拆成“简单版”和“专家版”。

直接看代码

故障诊断 · 从症状提出竞争假设,用一次能区分它们的检查缩小范围。

  • 看症状
  • 列假设
  • 做检查
  • 排原因
  • 验修复

引导学习 · 故障诊断

从症状提出竞争假设,用一次能区分它们的检查缩小范围。

  1. 01 看症状
  2. 02 列假设
  3. 03 做检查
  4. 04 排原因
  5. 05 验修复

学习目标

你要能够解释什么

能设计一个最小图形调试器,并用它回答“谁写了这个像素”。

Interview evidence

题库练习

把这一节课的画面证据,接回 PDF 里的原题。先做一个小预测,再去题目页整理成自己的回答。

  • Q10 shader

    ShaderLab 法线 Shader

    先自己猜:这道题在考什么?

    参考答案:我会从 ShaderLab 的 Properties、SubShader/Pass 讲起,再说明 vertex 负责空间变换与传递,fragment 负责法线采样、TBN 变换和输出。编译通过只是起点,还要检查资源绑定、坐标空间、深度/混合状态和平台精度。

    可观察证据:只改一个参数,记下画面变化,再写一句“所以它说明了什么”。

  • Q11 shader

    软遮挡与可见性

    先自己猜:这道题在考什么?

    参考答案:Shader 软遮挡可以读取 scene depth 与 sample depth,按深度差和 softness 生成连续可见度;传统遮挡查询通常返回整物体的可见/不可见并由 CPU/GPU 协同。软遮挡改善边缘,但不自动减少 draw call,必须分别测 overdraw 和提交成本。

    可观察证据:只改一个参数,记下画面变化,再写一句“所以它说明了什么”。

  • Q12 shader

    Alpha to Coverage 与 Blend

    先自己猜:这道题在考什么?

    参考答案:Alpha Blend 按 alpha 连续混合颜色,适合玻璃等真正半透明,但排序和 overdraw 成本高;Alpha to Coverage 把 alpha 量化成 MSAA coverage,适合树叶等 cutout,边缘会受样本数限制。选择要看材质、MSAA、目标设备和实测,不能凭内部传闻下结论。

    可观察证据:只改一个参数,记下画面变化,再写一句“所以它说明了什么”。

实验循环

按顺序做一次实验

  1. Step 1

    从帧结构开始

    改什么
    Pass / draw / material
    怎么做
    先选择 pass,再缩小到 draw call。
    你会看到
    画面问题能被映射到一段有限的状态。
    它代表
    调试的第一步是缩小搜索空间,而不是马上改 shader。

    Code anchor · graphics-debugger · frame tree

  2. Step 2

    冻结一个状态

    改什么
    Freeze / isolate
    怎么做
    冻结相机或隔离一个材质。
    你会看到
    变量减少后,错误特征更稳定。
    它代表
    可重复性让视觉判断变成工程证据。

    Code anchor · graphics-debugger · capture

  3. Step 3

    对照 shader 片段

    改什么
    Source / uniform / output
    怎么做
    从输出颜色跳到对应 shader 区段。
    你会看到
    一个像素的结果可以追溯到输入 uniform 和分支。
    它代表
    工具最终要把画面、状态和代码放在同一条链上。

    Code anchor · graphics-debugger · source map

快速复习

用三分钟找回因果链

这里没有第二套答案。以下内容直接来自上面的课程事实,方便你在面试前快速检索。

一句话核心

从 draw call、材质、深度和 shader 片段四个层次定位一个错误像素。

  1. 调试的第一步是缩小搜索空间,而不是马上改 shader。

    画面证据:画面问题能被映射到一段有限的状态。

  2. 可重复性让视觉判断变成工程证据。

    画面证据:变量减少后,错误特征更稳定。

  3. 工具最终要把画面、状态和代码放在同一条链上。

    画面证据:一个像素的结果可以追溯到输入 uniform 和分支。

代码定位

  • graphics-debugger · frame tree
  • graphics-debugger · capture
  • graphics-debugger · source map
打开代码页