想象你是一名城市路灯管理员,负责照亮从市中心广场到郊区高速路口的一条长街。如果你用同一款路灯照亮每一段路——近处和远处都用同样的亮度、同样的灯杆间距——那么近处的路面会被照得刺眼,而远方的道路却在黑暗中模糊不清。更糟的是,整条街的电费高得惊人。聪明的做法是什么?把街道分成几段:离你最近的 100 米,安装又密又亮的灯;接下来 500 米,灯间距拉大一些、亮度调低一点;再往远处几公里,只需偶尔几盏昏黄的灯,保证有个大致轮廓就行。 这套思路,正是计算机图形学中解决“大场景阴影渲染”问题的核心技术——级联阴影(Cascaded Shadow Maps, CSM)。 在实际渲染中,阴影贴图就像一张“路灯分布图”。传统方法用一整张贴图覆盖整个场景,就像给整条长街装同样间距的灯:近处细节糊成一片,远处资源白白浪费。CSM 则把相机的视锥体沿纵深切成几段“灯区”,每段用独立的分辨率去渲染阴影。近处用高精度,远处用低精度,从而用可控的代价换来了“近处清晰锐利、远处自然柔和”的阴影效果。它既是一套资源分配哲学,也是一套精密的工程结构。

岗位关联

对于 AI 和图形学从业者而言,CSM 是理解大规模渲染性能与画质平衡的必修课。掌握它,你就能读懂主流引擎的阴影方案,也能在真实项目中精准地调优质量与帧率。

目录
  1. 可视化演示
  2. 场景之困
  3. 核心思想
  4. 视锥分层
  5. 贴图渲染
  6. 级联采样
  7. 工程优化
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

动态演示级联阴影的核心机制,通过全局/局部/动态/静态四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

级联阴影:CSM级 CSM级联分层的动机与基本原理 级联分割策略:对数分割与手动分 核心机制可视化 级联阴影整体架构与关键组件

场景之困

路灯管理员一开始,只想用一盏“超级路灯”照亮整条街。他把一根极高的灯杆立在广场中央,灯泡亮度调到最大——结果呢?近处的路面白茫茫一片,远处的人影却只有朦胧一团。你加大功率,只是让近处更刺眼;你换更大功率的灯泡,电费成倍上涨,远方该看不清还是看不清。

传统阴影贴图技术正是这位天真的管理员。它的做法很简单:从光源视角看向整个场景,把“深度远近”记录到一张二维纹理里。这张纹理就是阴影贴图。现实世界里有成千上万个物体,纹理的分辨率却有限——通常只有 1024×1024 或 2048×2048 个像素。当你把这么大的世界塞进一张固定大小的图里,每一寸深度信息都像被压缩的面团,摊得越开,单个面团片就越薄。

于是问题出现了:近在主角脚下的地面,阴影锯齿明显、边缘抖动,因为分配给这块区域的纹理像素太少;而远处那一整片森林,阴影糊成一团灰色,几乎看不出形状。与此同时,另一片阴影贴图的像素被浪费在根本没人注意的远山上。这就是大场景阴影渲染的典型困境——一张贴图,顾得了近处就顾不了远处,顾得了均匀就顾不了精细。

核心思想

路灯管理员终于想通了。他回到办公室,摊开城市地图,把主干道划成三段:近段——广场到第一个十字路口,他安装高亮度的 LED 灯,每隔 20 米一盏,确保路面的每一道裂缝都清晰可见;中段——十字路口到高架桥入口,换成标准钠灯,间隔 50 米,颜色略暖,细节降一档;远段——高架桥到郊区收费站,每隔 120 米装一盏节能灯,只求看清道路走向,不追求任何细节。

这套“分段照明”方案,就是 CSM 的核心。对应到渲染管线中,相机的视锥体是一个从近裁剪面延伸到远裁剪面的四棱锥。我们把这条纵深方向的“锥形街道”切成若干段——每一段叫一个级联(Cascade)。每个级联拥有一张独立的阴影贴图,分辨率都由我们自由设定。

注意,三个级联的阴影贴图分辨率可以相同(比如都是 1024),但因为覆盖的空间范围不同,近处级联只覆盖眼前 20 米,每个贴图像素对应半根手指的宽度;远处级联覆盖 500 米,每个像素对应一辆卡车。同样的 1024 个像素,近处用在了刀刃上,远处则只是铺个底。这就是 CSM 最大的智慧:不是所有阴影都被平等对待,距离越近,越值得精细。

这套机制像极了三维版本的 LOD(细节层次)模型。LOD 是为模型的几何精度分级,CSM 则是为阴影贴图的分辨率分级。它让渲染器把有限的 GPU 算力,花在人眼最敏感的地方。

text3 行
级联 1(最近处)  ██████ 高精度 2048×2048级联 2(中间段)  ████   中精度 1024×1024级联 3(最远处)  ██     低精度 512×512

视锥分层

分段照明不是随手一划,路灯管理员需要精确计算每段路灯的间隔,才能让行人从广场走向郊区时,感知到亮度是平滑变化的,而不是突然“掉档”。CSM 同样需要一套精密的数学工具来切分视锥体——这门手艺叫视锥分割。

最简单的切法是均匀切分:把 100 米视锥体切成 4 段,每段 25 米。但透视会骗人——距离相机 1 米到 26 米的范围,在屏幕上占了巨大的面积,而 76 米到 101 米只占了屏幕上方一条细缝。如果平均用力,近处级联的贴图像素依然不够用。此时需要引入对数分割:按距离的比例关系切分,让每一级联在屏幕空间的贡献大致相当。对数分割的近处段很短很精细,远处段很长很粗糙,和路灯管理员“近密远疏”的直觉完美吻合。不过纯对数分割在远处切换时的跳变感会稍强,工程上通常把对数与线性分割做加权混合:

实际项目中还会加入一个线性分量做混合,用参数 λ 控制“对数倾向”的强度。λ 越接近 1,分割越偏对数,近处越精细;λ 越接近 0,分割越平均,各级别大小更均匀。默认取 0.5,兼顾两者。

当路灯管理员最终在图纸上画出分割线时,他发现近处的三个灯位间距 15 米、60 米、180 米,呈等比增长——人眼对近处的亮度变化最敏感,所以灯要密;远处的灯再密也看不出区别,所以拉大间距完全无损体验。

ni=n×(fn)im,fi=n×(fn)i+1m\displaystyle n_i = n \times \left( \frac{f}{n} \right)^{\frac{i}{m}}, \quad f_i = n \times \left( \frac{f}{n} \right)^{\frac{i+1}{m}}
这是工程中更常用的混合分割公式:“对数 + 线性”按系数混合,兼顾近处精度与切换平滑度。
  1. 前项——对数分割将深度按比例等比压缩,让近处级联更短更精细。
    λ×n×(fn)im\displaystyle \lambda \times n \times \left( \frac{f}{n} \right)^{\frac{i}{m}}
  2. 后项——线性分割将深度平均分段,保证远处级联跨度不过于夸张。
    (1−λ)×(n+im×(f−n))\displaystyle (1 - \lambda) \times \left( n + \frac{i}{m} \times (f - n) \right)
  3. λ——混合系数取 0.5 时两者五五开;取 1 时全对数;取 0 时全线性。
    λ∈[0,1]\displaystyle \lambda \in [0, 1]

贴图渲染

分割好路灯段落后,管理员要定制每一段的“灯具”:近段用小而亮的聚光灯,中段用中等功率的投光灯,远段用宽泛的泛光灯。CSM 的“灯具”就是每个级联的阴影贴图渲染器。这一阶段要解决一个关键问题:每个级联应该从哪个角度、覆盖多大范围去渲染深度图?

阴影贴图天然的视角是光源。假设一个平行光(比如太阳)从正上方偏右 45° 照射,那么渲染阴影贴图时,相机要移到太阳的位置,朝地面看。但注意:这个“光源相机”投影方向是正交投影,因为平行光没有近大远小的效果。CSM 为每个级联构造一个包围盒,把该级联覆盖的世界空间范围框进去,然后用正交矩阵把包围盒映射到纹理坐标:

渲染完 3 张深度图后,GPU 显存里就有了三份“路灯亮度分布图”:近层精确到 2048 像素、中层次之、远处 1024。它们共享一张纹理数组,通过 slice 索引访问,既节省显存带宽,又能让采样器快速切换。

Mlight=Ortho(l,r,b,t,nlight,flight)\displaystyle M_{\text{light}} = \text{Ortho}(l, r, b, t, n_{\text{light}}, f_{\text{light}})
这个矩阵定义了“太阳视角”下,该级联对应的阴影贴图能看到哪一块空间。
  1. l, r——左右边界光源视角下包围盒的 x 范围。
    l=min⁡(x),r=max⁡(x)\displaystyle l = \min(x), \quad r = \max(x)
  2. b, t——下上边界光源视角下包围盒的 y 范围。
    b=min⁡(y),t=max⁡(y)\displaystyle b = \min(y), \quad t = \max(y)
  3. n_light, f_light——光源近远平面沿光线方向的深度范围。
    nlight=min⁡(z),flight=max⁡(z)\displaystyle n_{\text{light}} = \min(z), \quad f_{\text{light}} = \max(z)
  4. Ortho——正交投影矩阵把上述范围线性映射到 NDC 立方体。
    Ortho=[2r−l00002t−b00002flight−nlight00001]\displaystyle \text{Ortho} = \begin{bmatrix} \frac{2}{r-l} & 0 & 0 & 0 \\ 0 & \frac{2}{t-b} & 0 & 0 \\ 0 & 0 & \frac{2}{f_{\text{light}}-n_{\text{light}}} & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}

级联采样

现在是夜晚,行人从广场出发,沿着大道前进。当他位于近段灯区时,头顶是明亮的路灯,脚下的每一处阴影都清晰锐利;当他跨过第 100 个灯杆、进入中段灯区时,灯光变得温和,阴影边缘开始有些柔化。CSM 的应用阶段要做的,就是判断“当前这个像素属于哪一段灯区”,然后去对应的阴影贴图里查询。

这个判断依据,是像素在相机空间里的深度值 z。如果我们把视锥体分割出了 4 个级联,那么 z 落在哪一级联的 [n_i, f_i] 区间,像素就采样哪一张贴图。这种选择在渲染管线的像素着色器(Fragment Shader)里逐像素完成。但有一个问题:如果两个相邻级联的贴图分辨率差异过大,像素在级联边界处剧烈跳变,画面会出现明显的“断层感”或阴影接缝。

接缝问题在 CSM 中几乎不可避免。其根源可以用一个类比理解:照片放大后会出现像素块,两张不同精度的照片拼在一起,边界处一定不匹配。现代引擎通常采用级联混合(Cascade Blending):在两个级联的边界附近,对两张贴图的采样结果做几像素宽度的线性插值,让阴影从“清晰模式”平滑过渡到“粗略模式”。这与多分辨率纹理的 MipMap 过渡如出一辙。混合区域的权重计算如下:

w=clamp(z−nifi−ni×m−i,  0.0,  1.0)\displaystyle w = \text{clamp}\left( \frac{z - n_i}{f_i - n_i} \times m - i, \; 0.0, \; 1.0 \right)
这个权重值 w 控制着像素在级联 i 与级联 i+1 之间的混合比例:靠近级联 i 内部时 w = 0,纯用第 i 张图;靠近下一级联时 w = 1,纯用第 i+1 张图。
  1. 归一化层级位置先把像素深度 z 映射到 [0, 1],表示它在该级联内的相对位置。
    z−nifi−ni\displaystyle \frac{z - n_i}{f_i - n_i}
  2. 乘级联总数再减索引把归一化位置放大到级联数量级别,把第 i 段推到起始位置。
    ×m−i\displaystyle \times m - i
  3. clamp 到 [0, 1]越界部分截断,形成线性过渡带。
    w=clamp(…,0.0,1.0)\displaystyle w = \text{clamp}(\dots, 0.0, 1.0)

工程优化

路灯管理员的方案在图纸上无懈可击,但真正施工后问题接踵而至:近段与中段的交界处,有一盏灯坏了无人发现,结果那段路面出现了一条长达 20 米的昏暗带;更麻烦的是,路政部门为了省电,把远段路灯功率调得过低,导致远处路面完全陷入黑暗,司机看不清路况。CSM 工程落地时同样充满类似的“调参陷阱”。

第一个经典问题是Peter Panning:物体看起来像飘在半空中,影子却缩在地面以下。这通常是因为深度偏移(Depth Bias)设置过大。阴影贴图把深度记录为浮点数,而实际像素在采样时因精度误差会出现“自遮挡”——像人用粗糙的尺子量过短的距离,读数时多出几毫米的抖动。解决办法是给深度比较加上一个“宽容度”:在比较时减去一个很小的数值 \(\text{bias}\),允许一定范围的误差存在。但这把“尺子”如果掰得太弯,阴影就会被整体“蹭走”,呈现漂浮感。

第二个问题是级联边界闪烁。当相机转动或移动时,级联包围盒的边界会像呼吸灯一样忽明忽暗。因为包围盒的规模若覆盖不够,会裁剪掉近处的物体;覆盖太大,近处精度又降低。工程上通常为包围盒各方向留一点可配置的扩展余量,让阴影贴图在边界处“多盖一截墙”,避免物体刚从阴影贴图边缘进入就丢失阴影。

最后是性能与质量的天平。3 个级联的阴影贴图渲染,大约占 GPU 阴影渲染总开销的 60%~80%。级联数量从 3 增到 4,质量提升也许只有 10%,但开销却增加了 33%。正确的调参思路应当从需求倒推:先固定 3 级联 + 每级 1024 分辨率,再观察近处是否出现锯齿、远处是否出现闪烁,逐步调整。优秀的项目甚至会根据相机移动速度动态调整阴影距离。

AI 应用场景

开放世界游戏引擎的 CSM 调优

阶段:场景渲染 · 实时阴影管线优化

解决的问题:传统单张阴影贴图在开放世界中会导致近处阴影锯齿、远处阴影闪烁;AI 辅助调参工具可以根据场景结构自动推荐级联分割参数,减少人工试错成本。

具体案例:在一个 4km×4km 的开放世界场景中,开发者在 Unity 的 Scriptable Render Pipeline 中使用 CSM。AI 代理通过分析相机轨迹,预测玩家最常望向的区域,动态调整级联远平面与混合权重。近处地面阴影清晰锐利,远处山谷阴影轮廓柔和,帧率始终稳定在 60FPS。

自动驾驶仿真器的阴影一致性

阶段:数据生成 · 高保真仿真环境渲染

解决的问题:自动驾驶感知模型需要大量逼真的训练数据。在仿真器中,太阳角度变化会使阴影方向和范围剧烈变化,CSM 可确保视角前方 100 米内的阴影细节足够真实,让模型学习到正确的阴影特征。

具体案例:自动驾驶仿真团队在 CARLA 平台中使用 CSM 渲染多视角环视图像。将级联数设为 4,最近一级分辨率设为 2048,确保车辆周围 30 米区域内的阴影边缘与真实光影一致,显著提升了感知模型对不同光照条件的泛化能力。

Python 演示

python97 行
import numpy as npimport matplotlib.pyplot as plt  def cs_split(n, f, m, lam):    """返回 m 个级联的 (近平面, 远平面) 列表"""    splits = []    for i in range(m):        log_part = n * (f / n) ** (i / m)        lin_part = n + (i / m) * (f - n)        near = lam * log_part + (1 - lam) * lin_part        log_part2 = n * (f / n) ** ((i + 1) / m)        lin_part2 = n + ((i + 1) / m) * (f - n)        far = lam * log_part2 + (1 - lam) * lin_part2        splits.append((near, far))    return splits  def depth_map_size(near, far, sphere_centers, sphere_radii, light_half):    """在光源正交视角下生成一张深度图"""    res = 128    light_near = 0.0    light_far = 50.0    half_h = light_half    half_w = light_half * res / res    ys = np.linspace(0, res - 1, res)    zs = np.linspace(0, res - 1, res)    gy, gz = np.meshgrid(ys, zs)    gx = -half_w + (gy / (res - 1)) * 2 * half_w    gz_w = -half_h + (gz / (res - 1)) * 2 * half_h    gy_w = 0.0 * gz_w    base = np.stack([gx, gy_w, gz_w], axis=-1)    depth = np.full((res, res), light_far, dtype=np.float32)    for c, r in zip(sphere_centers, sphere_radii):        v = base - np.array(c, dtype=np.float32)        dist2 = np.sum(v * v, axis=-1)        inside = dist2 < r * r        ds = np.sqrt(np.maximum(light_near * 0 + r * r - dist2, 0))        d = c[1] - ds        depth = np.minimum(depth, np.where(inside, d, depth))    return depth  def project_depth(world_pts, near, far, sphere_centers, sphere_radii, light_half):    """对一组世界坐标点进行 CSM 级联深度测试,返回阴影掩码"""    res = 128    uv = (world_pts[:, [0, 2]] + light_half) / (2 * light_half)    uv = np.clip(uv, 1.0 / res, 1.0 - 1.0 / res)    px = (uv[:, 0] * res).astype(int)    pz = (uv[:, 1] * res).astype(int)    depth = depth_map_size(near, far, sphere_centers, sphere_radii, light_half)    sampled = depth[pz, px]    lit = world_pts[:, 1] <= sampled    return lit  def main():    n, f, m = 1.0, 100.0, 3    csm = cs_split(n, f, m, lam=0.5)    print("级联分割边界:")    for i, (a, b) in enumerate(csm):        print(f"  级联{i + 1}: 近={a:6.2f} 远={b:6.2f}")     sphere_centers = [        np.array([4.0, 2.0, -6.0], dtype=np.float32),        np.array([-6.0, 3.0, -20.0], dtype=np.float32),    ]    sphere_radii = [2.0, 2.5]    light_half = 12.0    xs = np.linspace(-11.0, 11.0, 32)    zs = np.linspace(-11.0, 11.0, 32)    GX, GZ = np.meshgrid(xs, zs)    pts = np.stack([GX.ravel(), np.zeros_like(GX.ravel()), GZ.ravel()], axis=-1)    lit_all = np.zeros(len(pts), dtype=bool)     for idx, (near_p, far_p) in enumerate(csm):        depths = pts[:, 2] * 1.0        in_cas = (depths >= near_p) & (depths <= far_p)        if not np.any(in_cas):            continue        lit_cas = project_depth(pts[in_cas], near_p, far_p,                                sphere_centers, sphere_radii, light_half)        lit_all[in_cas] = lit_cas     shadow_image = (~lit_all).reshape(GX.shape)    plt.figure(figsize=(6, 5))    plt.imshow(shadow_image, origin="lower", cmap="gray")    plt.xlabel("x")    plt.ylabel("z")    plt.title("CSM 级联阴影图")    plt.tight_layout()    plt.savefig("csm_demo.png", dpi=100)    plt.show()  if __name__ == "__main__":    main()
目的:纯 Python 实现一个简化的级联阴影映射流程——对视锥进行分割、为每级联生成深度图、执行深度比较并输出最终的阴影图。
  1. cs_split(n, f, m, lam)用对数+线性混合公式计算每个级联的近/远边界。
  2. depth_map_size(...)从光源视角生成一张深度图,记录离光源最近表面的深度。
  3. project_depth(...)把世界坐标投影到光源的纹理空间,与深度图比较后判断是否被遮挡。
  4. in_cas = (depths >= near_p) & (depths <= far_p)只处理落在当前级联深度范围内的像素,模拟级联选择。
  5. np.minimum(depth, ...)多球体遮挡取更近的深度,对应深度图“最近表面”语义。
  6. plt.imshow(shadow_image, ...)将阴影掩码可视化为灰度图。

常见误区

误区大场景阴影模糊,是因为阴影贴图分辨率不够。把 1024 换成 4096 就能解决问题。

正解单纯提高单张贴图分辨率只能改善近处边缘,却会让远处的像素浪费更严重。CSM 的实质是“分级”,近处高分辨率、远处低分辨率,用多张贴图取代一张大贴图。它解决的不仅是“清晰度”,更是“分辨率利用率”。

为何常见:人们习惯把画面差归因于参数低,而忽略了资源分配的结构性问题。就像抱怨路灯不亮时,第一反应是加大瓦数,而不是调整灯杆间距。

误区市级联数从 3 提升到 6,阴影质量会翻倍。

正解每个级联都需要独立的深度图渲染,GPU 压力随级联数线性增长。3 到 4 级联是主流,因为增益递减明显;再多就会拖垮帧率,且远处的细节人眼根本无法辨识。工程上要算清“质量提升/性能代价”这笔账。

为何常见:小白常把质量与数量划等号,忽略了感知的边际效应和性能成本。

误区级联之间出现接缝,就把深度偏移量调大,直到接缝消失。

正解调 bias 确实能缓解自阴影与接缝,但过度调大会造成 Peter Panning(阴影漂浮)。正确的做法是组合拳:级联边界混合、深度偏移自适应、包围盒扩展,甚至边缘像素的深度优化。接缝问题通常是多因素叠加,只拧一颗螺丝会拆了东墙补西墙。

为何常见:深度偏移是最直观可调的参数,容易成为新手第一个抓手,但它不是万能药,而是有副作用的止痛片。

误区CSM 只适合太阳这类平行光,点光源和聚光灯无法使用。

正解CSM 的核心思想是“按距离分区+多张深度图”,完全适用于点光源的立方体贴图变体(如 Cube Shadow Map Cascades)。只不过点光源需要六个面的深度信息,复杂度更高,工程实现上多用于中小范围的局部光源。

为何常见:主流教程都以平行光为例,导致初学者把案例当成了限定条件。

面试题

Q1. CSM 主要解决什么问题?

单选题 · easy

  • A.阴影颜色过深
  • B.大场景阴影精度不足← 正确答案
  • C.光照方向不对
  • D.贴图格式不兼容

答案:B。CSM 解决的是单张阴影贴图在大场景中近处精度不足、远处资源浪费的问题。它通过多层级贴图按距离分配分辨率,是典型的“资源换质量”方案。

Q2. CSM 中“级联”指的是?

单选题 · easy

  • A.不同材质的物体
  • B.沿视锥体分割的层级← 正确答案
  • C.多盏点光源
  • D.多层 mipmap 纹理

答案:B。级联是把相机视锥体沿纵深切成若干段,每段对应一张独立的阴影贴图。它和 mipmap 都是分级思想,但切分维度不同。

Q3. 对数分割相比线性分割的优势是?

单选题 · mid

  • A.实现更简单
  • B.近处精度更高← 正确答案
  • C.消耗显存更少
  • D.无需深度偏移

答案:B。对数分割按照等比数列切分视锥,近处级联覆盖范围小,贴图像素利用率高,因此近处精度显著提升。它并不更简单,也不保证显存更少。

Q4. λ=1 时,混合分割公式退化为?

单选题 · mid

  • A.纯线性分割
  • B.纯对数分割← 正确答案
  • C.不分割
  • D.等比放大

答案:B。λ 是线性分量的权重。λ=1 时线性部分为 0,只剩对数部分,所以完全退化为对数分割。λ=0 则退化为线性分割。

Q5. 级联混合的目的是?

单选题 · mid

  • A.提高阴影贴图分辨率
  • B.消除级联间接缝← 正确答案
  • C.减少渲染批次
  • D.增加级联数量

答案:B。多个级联的阴影贴图分辨率不同,采样结果在边界处会突变,出现接缝。混合让两张贴图在过渡带内线性插值,平滑地完成切换。

Q6. Peter Panning 现象的直接原因是?

单选题 · hard

  • A.阴影贴图分辨率过低
  • B.深度偏移过大← 正确答案
  • C.级联数过少
  • D.相机移动过快

答案:B。深度偏移用于消除自遮挡,但当偏移值过大时,深度比较被“放宽”太多,物体会被误判为无遮挡,阴影与物体脱离,产生漂浮效果。

Q7. 每个级联的阴影贴图采样前需要做什么?

单选题 · hard

  • A.从相机空间投影到光源空间← 正确答案
  • B.从物体空间转换到世界空间
  • C.直接读取 G 缓冲区
  • D.计算光照颜色

答案:A。级联采样要先把像素的世界坐标乘上该级联光源视角的投影矩阵,得到纹理坐标和深度,再与阴影贴图记录的深度比较。这是所有 shadow map 技术的通用步骤。

Q8. CSM 的三个关键设计维度包括?

多选题 · mid

  • A.级联分割方式← 正确答案
  • B.阴影贴图分辨率← 正确答案
  • C.级联选择与混合← 正确答案
  • D.光照颜色调校

答案:ABC。CSM 的核心三要素是“怎么切分视锥”“每级用多大分辨率”“如何选择与过渡级联”。光照颜色属于光照模型范畴,与 CSM 无关。

Q9. 消除级联接缝的常用方法有?

多选题 · mid

  • A.深度偏移调整← 正确答案
  • B.级联边界混合← 正确答案
  • C.包围盒扩展← 正确答案
  • D.增大场景光照

答案:ABC。深度偏移可减少边缘误差,级联混合让边界平滑过渡,包围盒扩展避免物体在贴图边缘处被裁剪掉。增大光照与接缝无直接关系。

Q10. 适合使用 CSM 的场景是?

多选题 · easy

  • A.开放世界游戏← 正确答案
  • B.大型室外模拟← 正确答案
  • C.单光源小房间
  • D.大范围地形渲染← 正确答案

答案:ABD。CSM 专为大场景设计。小房间用一张 512 阴影贴图足够;而开放世界、室外模拟、大面积地形都受益于多级联的“近高远低”策略。