你可以直接这样回答
CSM 用多个光源视锥覆盖不同距离,近处多分辨率、远处少分辨率。调参我会同时看 split lambda、shadow distance、map resolution、PCF 和 Bias 的伪影/成本,再按设备档位减少级联或降低更新频率。
这道题真正想听什么?
先确认比较对象和回答边界,再决定要不要展开公式、工程实现或性能取舍。
CSM 不是“级联越多越好”。它考切分距离、每级 texel 密度、阴影更新频率、PCF 采样和 Bias 如何互相牵制。近处需要清晰,远处可以更粗;Bias 太小会 acne,太大又会 peter-panning。先说可见性和画质边界,再说成本,并为超预算设备准备减少级联的 fallback 验证。
把答案讲到 2 分钟面试必答 · 约 2 分钟 · 补足因果、输入和取舍
先固定灯光和相机,做 1/2/4 cascade 对照;检查切分处闪烁、texel 密度、acne 和 peter-panning。动态物体可降低更新频率或缓存静态阴影,PCF 与分辨率按目标 GPU 预算调整。所有优化都要复测接触阴影和镜头路径。
面试官可能继续追问什么?补充自测 · 约 3 分钟 · 检查自己是不是真的懂了
- 问:为什么要近处多分辨率? 答:屏幕上近物占比大,错误更容易被看见;远处只需保持轮廓和接触感。
- 问:Bias 越大越安全吗? 答:不是。它会消除 acne,却可能把阴影推离接收面;应在 acne/peter-panning 之间找边界。
- 因果链: 级联切分 → 光空间投影 → depth compare/PCF → 阴影边缘与稳定性 → GPU/显存预算。
如果概念还是悬空,就去做实验关键证据 · 约 5–15 分钟 · 预测 → 单变量 → 观察
实验不是第二份答案,它只负责证明答案
如果上面的解释已经听懂,可以直接跳过。卡住时,再沿着这三步把抽象词变成画面证据。
- 先猜 这份数据从哪里进入 Shader,经过哪一步,最后改变哪个像素?
- 去取证 固定其他条件,只改一个参数。先写下变化,不用“更真实”“更高级”这种空词代替证据。
- 再追问为什么 是哪一步造成这个结果?如果结果相反,先检查输入、空间、算法,还是显示输出?
我完全没头绪,给我一个起点
先截下默认状态,只动页面当前开放的那个参数。你只需要说清楚“原来怎样 → 改了什么 → 现在怎样”。
1. 先预测
打开 Shadow Mapping Lab,切 cascadeCount=1、shadowDistance=18、mapResolution=512、splitLambda=0.65,再切 debugMode=cascade-index。预测从 1 级到 4 级会让近处分辨率更稳定,但阴影贴图和更新成本增加;增大距离会摊薄 texel 密度。输入 → 变化 → 输出: camera distance/切分 → 每级光源相机与深度图 → cascade index、边缘稳定性、Bias/PCF 成本。
老师追问
先别急着查答案: 先追一条数据从输入到像素:它经过哪一步计算,哪一个中间通道会先暴露问题?
为什么: 你刚才的预测依赖哪个前提?如果把“CSM 阴影”里最关键的变量或约束关掉,画面/输出会先坏在哪里?
如果结果相反: 先排除哪一层,再谈结论?这个规则的边界是什么?
2. 再动手
固定模型和灯光,只改变 cascadeCount=1/2/4;第二轮固定级联,只改 splitLambda 和 shadowDistance;第三轮只改 constantBias、slopeBias、normalBias、pcfKernel。打开 cascade-index、acne、bias、depth-map,记录每次的边缘、acne/peter-panning、贴图分辨率和估算成本。
3. 最后对证据
cascade-index 会显示相机所在的级联段;depth-map/receiver-depth 帮你确认比较空间。级联数、分辨率和 PCF kernel 增大通常提高成本;Bias 变化先影响伪影,不是免费画质。WebGL Lab 是教学实现,真实引擎还要检查稳定投影、阴影缓存、透明物体和移动端 tile 带宽。
答案在代码哪里发生?实现定位 · 约 3 分钟 · 变量、函数和关键行
完整 5 分钟版本面试扩展 · 约 5 分钟 · 项目边界、验证与降级
大场景会按角色/环境重要度拆阴影策略:主角近处高质量,远景使用低级联、接触 AO 或烘焙。对移动端限制阴影距离、级联数和 kernel,必要时只保留主光源;把阴影缓存失效、灯光移动和动态 caster 写进回归用例。Lab 的参数是可观察模型,不是某项目的硬件结论。
哪些说法最容易答歪?必看陷阱 · 约 1 分钟 · 面试前最后检查
- 只说“增加 CSM 级数”,不说 split 与 texel 密度。
- 用 Bias 把所有 acne/peter-panning 问题压掉。
- 只看静态截图,不走相机路径。
- 忽略 PCF 深度读取、阴影缓存和移动端带宽。