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

建议顺序 03 · 性能与移动管线

Shadow Mapping:先把光的眼睛摆对

阴影 acne、Peter Panning 和 PCF 都能从一张深度图追溯。

先理解 light-space 深度,再逐项改变 bias、分辨率和滤波,观察每个修复牺牲了什么。

未完成

这一课的入口

按你现在的状态开始

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

直接看代码

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

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

引导学习 · 故障诊断

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

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

学习目标

你要能够解释什么

能从光源视角、深度比较和采样预算三条链路解释阴影伪影。

Interview evidence

题库练习

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

  • Q39 shader

    CSM 阴影

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

    参考答案:CSM 用多个光源视锥覆盖不同距离,近处多分辨率、远处少分辨率。调参我会同时看 split lambda、shadow distance、map resolution、PCF 和 Bias 的伪影/成本,再按设备档位减少级联或降低更新频率。

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

实验循环

按顺序做一次实验

  1. Step 1

    只看光源深度图

    改什么
    Debug = light depth
    怎么做
    切换到光源视角的深度可视化。
    你会看到
    遮挡物先于接收面写入一张灰度深度图。
    它代表
    阴影判断不是直接看世界坐标,而是比较同一个光空间里的深度。

    Code anchor · shadow-map.frag.glsl · lightSpace

  2. Step 2

    调 bias 找平衡

    改什么
    Bias 0 → 0.01
    怎么做
    先让 bias 为零,再缓慢增加。
    你会看到
    acne 减少,但过大时阴影像从物体脚下脱开。
    它代表
    bias 是数值误差与几何接触之间的折中,不是越大越好。

    Code anchor · shadow-map.frag.glsl · depth compare

  3. Step 3

    比较 PCF 与分辨率

    改什么
    Map 512/2048 · PCF 1/3/5
    怎么做
    固定 bias,只改变纹理尺寸和采样核。
    你会看到
    边缘锯齿、柔和度和 GPU 时间一起变化。
    它代表
    阴影质量是空间分辨率与采样预算的共同结果。

    Code anchor · shadow-map.frag.glsl · PCF

快速复习

用三分钟找回因果链

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

一句话核心

先理解 light-space 深度,再逐项改变 bias、分辨率和滤波,观察每个修复牺牲了什么。

  1. 阴影判断不是直接看世界坐标,而是比较同一个光空间里的深度。

    画面证据:遮挡物先于接收面写入一张灰度深度图。

  2. bias 是数值误差与几何接触之间的折中,不是越大越好。

    画面证据:acne 减少,但过大时阴影像从物体脚下脱开。

  3. 阴影质量是空间分辨率与采样预算的共同结果。

    画面证据:边缘锯齿、柔和度和 GPU 时间一起变化。

代码定位

  • shadow-map.frag.glsl · lightSpace
  • shadow-map.frag.glsl · depth compare
  • shadow-map.frag.glsl · PCF
打开代码页