学习目标
你要能够解释什么
能从光源视角、深度比较和采样预算三条链路解释阴影伪影。
Interview evidence
题库练习
把这一节课的画面证据,接回 PDF 里的原题。先做一个小预测,再去题目页整理成自己的回答。
-
CSM 阴影
先自己猜:这道题在考什么?
参考答案:CSM 用多个光源视锥覆盖不同距离,近处多分辨率、远处少分辨率。调参我会同时看 split lambda、shadow distance、map resolution、PCF 和 Bias 的伪影/成本,再按设备档位减少级联或降低更新频率。
可观察证据:只改一个参数,记下画面变化,再写一句“所以它说明了什么”。
实验循环
按顺序做一次实验
-
Step 1
只看光源深度图
- 改什么
- Debug = light depth
- 怎么做
- 切换到光源视角的深度可视化。
- 你会看到
- 遮挡物先于接收面写入一张灰度深度图。
- 它代表
- 阴影判断不是直接看世界坐标,而是比较同一个光空间里的深度。
Code anchor · shadow-map.frag.glsl · lightSpace
-
Step 2
调 bias 找平衡
- 改什么
- Bias 0 → 0.01
- 怎么做
- 先让 bias 为零,再缓慢增加。
- 你会看到
- acne 减少,但过大时阴影像从物体脚下脱开。
- 它代表
- bias 是数值误差与几何接触之间的折中,不是越大越好。
Code anchor · shadow-map.frag.glsl · depth compare
-
Step 3
比较 PCF 与分辨率
- 改什么
- Map 512/2048 · PCF 1/3/5
- 怎么做
- 固定 bias,只改变纹理尺寸和采样核。
- 你会看到
- 边缘锯齿、柔和度和 GPU 时间一起变化。
- 它代表
- 阴影质量是空间分辨率与采样预算的共同结果。
Code anchor · shadow-map.frag.glsl · PCF
快速复习
用三分钟找回因果链
这里没有第二套答案。以下内容直接来自上面的课程事实,方便你在面试前快速检索。
一句话核心
先理解 light-space 深度,再逐项改变 bias、分辨率和滤波,观察每个修复牺牲了什么。
- 阴影判断不是直接看世界坐标,而是比较同一个光空间里的深度。
画面证据:遮挡物先于接收面写入一张灰度深度图。
- bias 是数值误差与几何接触之间的折中,不是越大越好。
画面证据:acne 减少,但过大时阴影像从物体脚下脱开。
- 阴影质量是空间分辨率与采样预算的共同结果。
画面证据:边缘锯齿、柔和度和 GPU 时间一起变化。
代码定位
- shadow-map.frag.glsl · lightSpace
- shadow-map.frag.glsl · depth compare
- shadow-map.frag.glsl · PCF