想象你在逛一座透明的水晶糖果展览馆,空中悬浮着无数彩色小糖珠。每颗糖珠都自带两张小名片:一张写着它该呈现的颜色,一张写着它有多“不透光”。当你从某个角度望过去,视线会像一支无形的签子,穿过一整串糖珠;糖珠们按照远近和透光度一层层叠加,最后在你眼底合成一个像素颜色。如果展览馆里每一颗糖珠的名片都被安排得恰到好处,你就能站在原地,从任意角度“重新拍照”,得到和真实照片一样逼真的画面。 NeRF(神经辐射场)要做的,就是让神经网络学会给这个“水晶糖展馆”里的每一个位置点填写名片:用一堆从不同角度拍摄的照片当考官,反复校对“预测的像素颜色 vs 真实照片颜色”,最终把整个场景浓缩成一个可查询的连续函数。这个函数需要三个关键零件:把三维坐标和视角“翻成精细地址”的位置编码、把一串糖珠合成一个像素的体渲染公式,以及“先粗后细”的分层采样策略。这篇文章会带你从零组装这套系统,并看看著名的 Mip-NeRF 如何把糖珠换成“小汤圆”,进一步消除走样。

岗位关联

一句话价值:NeRF 是联结 2D 图像与 3D 世界的桥梁,理解它能帮你快速进入 3D 重建、AR/VR 内容生成和数字孪生等热门方向,是 CV 从业者不容错过的里程碑知识。

目录
  1. 可视化演示
  2. 辐射场表示:一颗糖珠的名片
  3. 体渲染原理:透过糖珠串看光
  4. 位置编码:给糖珠写上精细地址
  5. 分层采样:先粗筛再细挑
  6. 训练流程:用真实照片当考官
  7. 计算代价:雕一座糖展馆有多费力
  8. Mip-NeRF变体:把糖珠换成小汤圆
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示NeRF神经辐射场的核心流程:相机射线穿越3D场景采样,MLP网络输出颜色和密度,体渲染合成最终图像。切换模式查看不同阶段。

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

NeRF射线采样流程 从相机出发沿射线方向在3D场景中均匀采样点 每个采样点输入MLP获得颜色RGB和密度σ C(r)=∫T(t)·σ(t)·c(t)dt 体渲染积分合成最终像素颜色

辐射场表示:一颗糖珠的名片

走进这座水晶糖果展览馆,你会发现每颗糖珠都不是简简单单一个色点:它悬在三维空间某个位置,从不同角度看,还会因为光照高光而略微变色。NeRF 的思路,就是给每个空间位置点发一张“名片”,上面记录两个必填项——它本身的颜色,以及它挡住光线的程度(密度)。

在数学上,这张名片是一个连续函数 F,输入一个空间点的三维坐标 x=(x,y,z),再加上观察方向 d=(θ,φ),输出该点的颜色 c=(r,g,b) 和密度 σ。需要注意的是:密度 σ 只和位置有关,它代表“这里是不是固体表面”;而颜色 c 还要看观察方向,因为光泽、反光这类效果会随视角改变。

所以 NeRF 不是保存一堆显式体素,而是用神经网络的权重把整个糖展馆“背”下来。需要查询某个位置时,只需把坐标和方向递给网络,它就能报出名片内容。

F(γ(x),γ(d))=(c,σ)F(\gamma(\mathbf{x}), \gamma(\mathbf{d})) = (\mathbf{c}, \sigma)
  1. 位置编码输入γ(x) 把原始三维坐标映射到高频特征,让网络更容易表达细节。
    γ(x)\gamma(\mathbf{x})
  2. 方向编码输入γ(d) 对观察方向做同样的映射,让颜色能随视角变化。
    γ(d)\gamma(\mathbf{d})
  3. 函数输出c 是 RGB 三通道颜色,σ 是标量密度,二者共同描述空间点的辐射属性。
    (c,σ)(\mathbf{c}, \sigma)

体渲染原理:透过糖珠串看光

现在你站在展馆外,从眼睛往一颗糖珠方向看去,光线会一路穿过许多糖珠。如果前面几颗糖珠很浓、很挡光,后面的糖珠就看不清楚;如果都半透明,颜色就会层层混合。体渲染就是计算这种“层层叠加”的数学工具。

体渲染公式把一条光线 r(t)=o+td 上所有点的颜色按“能到达相机”的权重合起来:

其中 T(t) 是光线从起点走到 t 还没被挡住的概率,又叫透射率:

实际实现中不会真的积分,而是沿射线离散采样 N 个点,用求和近似积分。体渲染因此把“3D 场景”和“2D 像素”牢牢绑定在一起。

C(r)=∫tntfT(t) σ(r(t)) c(r(t),d) dtC(\mathbf{r}) = \int_{t_n}^{t_f} T(t)\, \sigma(\mathbf{r}(t))\, \mathbf{c}(\mathbf{r}(t), \mathbf{d})\, dt
T(t)=exp⁡(−∫tntσ(r(s)) ds)T(t) = \exp\left(-\int_{t_n}^{t} \sigma(\mathbf{r}(s))\, ds\right)
  1. 射线上的点从相机出发,每个距离 t 对应一个空间点,相当于签子穿过的第 t 颗糖珠。
    r(t)=o+td\mathbf{r}(t) = \mathbf{o} + t \mathbf{d}
  2. 密度权重σ(r(t)) 是该点的密度,密度越大,它对最终颜色的贡献越高,但也越容易挡住后面的糖珠。
    σ(r(t))\sigma(\mathbf{r}(t))
  3. 透射率T(t) 表示光到达 t 时还剩多少“没有被遮挡”的能量,由前面所有密度积分得到。
    T(t)=exp⁡(−∫tntσ(r(s)) ds)T(t) = \exp\left(-\int_{t_n}^{t} \sigma(\mathbf{r}(s))\, ds\right)
  4. 颜色合成每个点的颜色乘以 T(t)σ(r(t)) 再沿整条射线积分,就得到像素颜色,仿佛把一串糖珠的照片叠成一张。
    ∫tntfT(t)σ(r(t))c(r(t),d) dt\int_{t_n}^{t_f} T(t) \sigma(\mathbf{r}(t)) \mathbf{c}(\mathbf{r}(t), \mathbf{d})\, dt

位置编码:给糖珠写上精细地址

如果只把 (x,y,z) 直接喂给 MLP,网络会偏向学习低频平滑变化——就像名片只写“展览馆第三层”,你根本找不到具体哪颗糖珠。为了让网络能刻画高频纹理、边缘,NeRF 在输入前先做位置编码:把坐标投影到一组不同频率的正余弦波上,相当于在名片上写下“第 3 排 7 号柜 5 层 9 格”这种精确地址。

位置编码对每个坐标分量 p 做如下映射:

其中位置 L=10,方向 L=4。低频率项捕捉大范围结构,高频率项让细节纹理容易被分辨。

如果没有这步,MLP 会像眯着眼睛看糖展馆,只能看到模糊的轮廓;有了它,连糖珠上的糖霜纹理都能还原。

γ(p)=(sin⁡(20πp),cos⁡(20πp),⋯ ,sin⁡(2L−1πp),cos⁡(2L−1πp))\gamma(p) = \left( \sin(2^0\pi p), \cos(2^0\pi p), \cdots, \sin(2^{L-1}\pi p), \cos(2^{L-1}\pi p) \right)
  1. 基础频率用 2^0 的正余弦波,频率最低,负责勾勒场景的大致轮廓。
    sin⁡(20πp),cos⁡(20πp)\sin(2^0 \pi p), \cos(2^0 \pi p)
  2. 高频叠加随着 l 增大,频率指数级升高,使相邻很近的点也能被区分。
    sin⁡(2lπp),cos⁡(2lπp)\sin(2^{l} \pi p), \cos(2^{l} \pi p)
  3. 组合成向量把所有频率的正余弦值拼接起来,得到高维输入向量。
    γ(p)∈R2L\gamma(p) \in \mathbb{R}^{2L}

分层采样:先粗筛再细挑

体渲染需要对每条射线采样。如果均匀撒 64 个点,很多点落在空荡荡的空气中,浪费算力;如果全靠随机又容易漏掉关键糖珠。NeRF 采用“先粗后细”两阶段策略,很像检查一串糖珠时先远远扫一眼,发现某段特别厚实,再凑近细数。

第一阶段,粗网络沿射线均匀采 N_c 个点,估计各处密度。第二阶段,根据粗网络结果计算每个采样点的权重:

这里 T_i 是到第 i 点为止的透射率,δ_i 是相邻采样点之间的距离,σ_i 是密度。归一化后 w_i 可以看成一条离散概率分布,细网络就按这个分布再采 N_f 个点,优先放在密度高、权重大的“糖珠密集区”,两批点合并后重新渲染。

两阶段共用同一个颜色损失:

这样,网络把大部分精力花在真正有表面的地方。粗网络像扫雷,细网络像排雷,合在一起用更少采样达到更好画质。

wi=Ti(1−exp⁡(−σiδi))w_i = T_i \left(1 - \exp(-\sigma_i \delta_i)\right)
L=∑r∥Cc(r)−Cgt(r)∥22+∑r∥Cf(r)−Cgt(r)∥22\mathcal{L} = \sum_{\mathbf{r}} \| C_c(\mathbf{r}) - C_{gt}(\mathbf{r}) \|_2^2 + \sum_{\mathbf{r}} \| C_f(\mathbf{r}) - C_{gt}(\mathbf{r}) \|_2^2
  1. 采样点权重w_i 表示第 i 个采样点对最终像素颜色的贡献,由透射率和本节密度共同决定。
    wi=Ti(1−exp⁡(−σiδi))w_i = T_i \left(1 - \exp(-\sigma_i \delta_i)\right)
  2. 粗网络损失C_c 是粗网络渲染的颜色,C_gt 是真实像素,二者差平方再求和。
    ∑r∥Cc(r)−Cgt(r)∥22\sum_{\mathbf{r}} \| C_c(\mathbf{r}) - C_{gt}(\mathbf{r}) \|_2^2
  3. 细网络损失C_f 是使用两阶段采样后细网络渲染的颜色,同样和真实像素对齐。
    ∑r∥Cf(r)−Cgt(r)∥22\sum_{\mathbf{r}} \| C_f(\mathbf{r}) - C_{gt}(\mathbf{r}) \|_2^2

训练流程:用真实照片当考官

如何让糖珠名片填得准确?NeRF 的考官是真实拍摄的照片。你从不同角度给糖展馆拍几十张照片,对每张照片的每个像素发出一条射线,穿进虚拟糖展馆渲染出预测像素颜色;再用它与真实照片像素做均方误差,误差越小,说明名片越靠谱。

训练使用的损失函数可以写成:

其中 R 是当前 batch 里的射线集合,C_f 是细网络渲染出的预测颜色,C_gt 是从真实照片取到的像素颜色。训练前还需要估计每张照片的相机位姿(通常用 COLMAP 等工具),否则射线方向就发错了。

有趣的是,方向 d 只参与颜色预测,不参与密度预测,这样同一位置从不同视角看,密度保持一致,颜色可以变化,恰好模拟反光和高光。

L=∑r∈R∥Cf(r)−Cgt(r)∥22\mathcal{L} = \sum_{\mathbf{r} \in \mathcal{R}} \| C_f(\mathbf{r}) - C_{gt}(\mathbf{r}) \|_2^2
  1. 像素射线集合从所有照片的所有像素中随机挑一批射线 R,作为本次梯度下降的样本。
    R\mathcal{R}
  2. 预测颜色C_f(r) 是模型沿这条射线渲染出的像素颜色,随网络参数不断调整。
    Cf(r)C_f(\mathbf{r})
  3. 真实颜色C_gt(r) 是照片上对应像素的 RGB 值,是永不改变的参考答案。
    Cgt(r)C_{gt}(\mathbf{r})
  4. 均方误差两份颜色越接近,损失越小;通过反向传播更新 MLP 参数,名片就会越写越准。
    L=∑r∈R∥Cf(r)−Cgt(r)∥22\mathcal{L} = \sum_{\mathbf{r} \in \mathcal{R}} \| C_f(\mathbf{r}) - C_{gt}(\mathbf{r}) \|_2^2

计算代价:雕一座糖展馆有多费力

糖展馆听上去很美好,但每颗糖珠的名片都要手工校对,代价相当高。NeRF 每个像素需要沿射线采样大量空间点,每个点都要过一次 MLP 前向计算;一个 800×800 的图像就有 64 万像素,假设每像素 64 个采样点,就是四千多万次网络调用。

粗略估算渲染一张图像的计算量:

其中 H、W 是渲染图像的高和宽,N 是每条射线的采样点总数。即便在 GPU 上,训练一个单场景 NeRF 也需要数小时到数天,渲染一帧也要秒级,远达不到实时的程度。此外,模型只记住当前这一个场景,换一间“展馆”就得重新从零训练。

所以 NeRF 是“高保真但笨重”的重建工具。后续许多工作都围绕降低采样次数、加速推理展开,Mip-NeRF 则从另一个角度提升渲染质量。

Crender=H×W×NC_{render} = H \times W \times N
  1. 图像像素数H×W 是待渲染图像总像素,每个像素都会发射一条射线。
    H×WH \times W
  2. 每射线采样数N 是分层采样后的总采样点数,是决定计算量的关键乘数。
    NN
  3. 总调用次数两者相乘得到前向网络的总次数,直观解释训练和渲染为何如此昂贵。
    Crender=H×W×NC_{render} = H \times W \times N

Mip-NeRF变体:把糖珠换成小汤圆

NeRF 把射线当成无限细的签子,但真实相机拍摄时,一个像素对应的是一个小锥台:远处锥台横截面变大,用一根细线去采样,自然容易糊掉、产生锯齿。Mip-NeRF 的改进很直观:把“糖珠”换成有体积的“小汤圆”,沿锥台去采样。

体渲染的思路依然沿用,只是每个采样点不再是一个点,而是用一个各向同性高斯分布 N(μ, Σ) 近似锥台截面。Mip-NeRF 用集成位置编码(IPE)代替原来的点位置编码:

这就像摄影师不再拿一根绣花针去戳汤圆,而是用一个大勺去舀,捞到的“区域特征”更完整。因此 Mip-NeRF 在远景、多尺度渲染上明显优于原始 NeRF,成为后续很多神经渲染工作的基础。

γ∗(μ,Σ)=Ep∼N(μ,Σ)[γ(p)]\gamma^*(\mu, \Sigma) = \mathbb{E}_{\mathbf{p} \sim \mathcal{N}(\mu, \Sigma)}\left[\gamma(\mathbf{p})\right]
  1. 锥台采样射线变成锥台后,某个距离处的横截面是一个小区域,而不是一个点。
    N(μ,Σ)\mathcal{N}(\mu, \Sigma)
  2. 高斯参数均值 μ 代表区域中心,协方差 Σ 代表区域大小和形状,离相机越远区域越胖。
    μ,Σ\mu, \Sigma
  3. 集成位置编码把区域内所有可能坐标的位置编码取期望,得到带体积信息的特征。
    γ∗(μ,Σ)=Ep∼N(μ,Σ)[γ(p)]\gamma^*(\mu, \Sigma) = \mathbb{E}_{\mathbf{p} \sim \mathcal{N}(\mu, \Sigma)}\left[\gamma(\mathbf{p})\right]

AI 应用场景

数字人/全息会议

阶段:数据采集与 3D 重建

解决的问题:传统绿幕拍摄只能在固定机位观看,重建出的数字人角度呆板。NeRF 用几十台相机同步采集演员多视角视频,训练一个神经辐射场,之后观众可以从任意视角“穿行”观看,效果接近真实光场。

具体案例:近年不少虚拟制片团队尝试用 NeRF 把演员扫描成可自由旋转的 3D 形象,再放进游戏引擎合成;相比传统摄影测量,NeRF 能保留毛发、布料等复杂细节。

文化遗产数字化

阶段:多视角图像重建

解决的问题:文物扫描设备贵、扫描时间长,且难以处理透明或反光表面。用手机拍摄多张照片后,NeRF 能把文物复原成可交互的 3D 展品,Mip-NeRF 还能缓解缩放观察时的锯齿。

具体案例:博物馆将青铜器、佛像的多角度照片送入 NeRF 训练,线上展厅支持用户旋转、拉近观察,甚至能在网页里重新打光。

自动驾驶/机器人仿真场景

阶段:仿真场景生成

解决的问题:真实道路测试成本高、极端场景难复现。NeRF 可以从车载相机采集的路侧视频中重建道路场景,让仿真系统在同样的道路上反复测试不同天气和视角。

具体案例:某自动驾驶团队采集一段路口的多视角视频,用 NeRF 重建后,在虚拟环境中叠加新障碍物,验证感知模型的边界情况。

Python 演示

python26 行
import numpy as np def render_ray(z_vals, colors, densities):    """沿射线做离散体渲染, 返回合成颜色/深度/权重"""    n = len(z_vals)    deltas = np.diff(np.concatenate(([z_vals[0]], z_vals)))    alphas = 1.0 - np.exp(-densities * deltas)    trans = np.cumprod(1.0 - alphas)    trans = np.concatenate(([1.0], trans[:-1]))    weights = trans * alphas    rgb = np.sum(colors * weights[:, None], axis=0)    depth = np.sum(weights * z_vals)    return rgb, depth, weights  if __name__ == "__main__":    rng = np.random.default_rng(0)    n_points = 64    z = np.linspace(1.0, 4.0, n_points)    color = rng.uniform(0.0, 1.0, (n_points, 3))    density = np.zeros(n_points)    density[25:45] = 0.5    rgb, depth, w = render_ray(z, color, density)    print("合成颜色:", np.round(rgb, 3))    print("合成深度:", round(depth, 3))    print("权重和:", round(w.sum(), 3))
目的:用 64 个离散采样点模拟一条光线穿过“糖珠串”,实现体渲染的颜色与深度合成。
  1. deltas = np.diff(np.concatenate(([z_vals[0]], z_vals)))计算相邻采样点间距 δ_i,保证权重公式与距离有关。
  2. alphas = 1.0 - np.exp(-densities * deltas)把密度转成每个采样段的透明度,密度越高越不透明。
  3. trans = np.cumprod(1.0 - alphas)逐段相乘得到透射率,光越往前走剩余能量越少。
  4. weights = trans * alphas透射率乘透明度得到每个点对最终像素的贡献权重。
  5. rgb = np.sum(colors * weights[:, None], axis=0)按权重把采样颜色加权求和,合成像素颜色。

常见误区

误区我用 NeRF 重建,应该能像 CAD 建模那样直接导出 STL 网格文件,看到清晰的三角面片。

正解NeRF 本身只输出一个连续辐射场函数,可以用任意角度查询颜色和密度,要得到网格模型还需要额外做 Marching Cubes 等后处理。它更像一本“糖珠名片册”,而不是现成的雕塑。

为何常见:人们习惯了传统 3D 重建输出点云或网格,容易用旧思维理解新方法。

误区位置编码的 L 越大,恢复的细节就越多,所以我直接设成 20 肯定比官方 10 更好。

正解过高频率会让网络把噪声也当作细节硬背下来,反而出现伪影;实验表明位置 L=10、方向 L=4 是精度和稳定性的平衡点。

为何常见:看到高频能提升纹理细节后,容易以为它是单调上升的,忽略了过拟合代价。

误区把几十张照片丢进去,几分钟就应该出模型,然后像游戏一样 60 帧实时浏览。

正解单场景训练通常需要数小时到数天,渲染一帧也要秒级。因为它要对每个像素沿射线采样几十上百个点并逐点过 MLP。

为何常见:对比深度学习分类只需几分钟,容易低估体渲染的逐点计算量。

误区ray 追踪时只需找到第一个挡光的糖珠,用它颜色当像素颜色。

正解NeRF 的体渲染把射线上一整串采样点的颜色都按透射率和密度加权混合,没有一个明确的“命中点”;权重分布可以呈多峰,表现半透明材质。

为何常见:传统光线追踪“命中即止”的观念根深蒂固,不习惯连续介质模型。

误区Mip-NeRF 解决了模糊,可能只是像超分辨率一样把输出像素放大。

正解它从采样根源上改进:用锥台和高斯近似代替点采样,用集成位置编码代替点编码,让多尺度观察都不走样,而不是靠后处理放大。

为何常见:只看效果提升容易忽略它改变的是采样和特征表示方式。

面试题

Q1. NeRF 的输入不包含以下哪一项?

单选题 · easy

  • A.空间位置坐标
  • B.观察方向向量
  • C.相机曝光时间← 正确答案
  • D.高频位置编码

答案:C。NeRF 的输入是 5D 坐标加位置编码后的特征。相机曝光时间只影响照片明暗,不是辐射场函数的输入,就像糖珠名片上不会写拍照时的快门参数。

Q2. 体渲染中,透射率 T(t) 表示什么?

单选题 · mid

  • A.光线到达 t 点前未被散射的比例← 正确答案
  • B.采样点糖珠自身的 RGB 颜色
  • C.场景背景的固定颜色值
  • D.相机镜头的折射率

答案:A。T(t) 是光从 t_n 走到 t 还没被挡住的概率,由沿途密度积分得到。它描述“前面的糖珠挡了多少光”,而不是颜色、背景或镜头属性,因此只有 A 正确。

Q3. 位置编码对 NeRF 的主要贡献是什么?

单选题 · easy

  • A.它直接让网络层数变得更深
  • B.它帮 MLP 表达高频位置细节← 正确答案
  • C.它减少了训练所需的内存
  • D.它让相机位姿更加精确

答案:B。MLP 天然偏向低频平滑变化,位置编码用不同频率正余弦把坐标投影到高维,等价于给糖珠填写精细地址,让网络也能分辨高频纹理。它不改变网络深度、内存或相机位姿。

Q4. 分层采样时,细网络主要在哪些区域补充采样?

单选题 · mid

  • A.粗网络预测密度较高的区域← 正确答案
  • B.背景颜色十分均匀的区域
  • C.距离相机最远的区域
  • D.完全不透明的区域

答案:A。粗网络先均匀撒点,算出各点权重 w_i;细网络按权重分布再次采样,权重大的区域就是糖珠密集、有明显表面的地方。密度很高的区域虽然权重也大,但“完全不透明”表述绝对化,不如 A 准确。

Q5. 训练 NeRF 时,损失函数直接比较的是哪两个值?

单选题 · easy

  • A.预测深度和真实深度
  • B.预测颜色和真实像素颜色← 正确答案
  • C.预测密度和体素标签
  • D.预测法线和真实法线

答案:B。NeRF 用真实照片当考官,监督信号就是像素 RGB 颜色。它不需要深度图、体素标签或法线图作为监督,因此 B 正确。

Q6. Mip-NeRF 的核心改进是什么?

单选题 · hard

  • A.把 MLP 层数从 8 层增加到 16 层
  • B.将点采样改为锥台区域采样← 正确答案
  • C.引入对抗生成网络做训练
  • D.把全连接层换成卷积层

答案:B。Mip-NeRF 用圆锥台代替无限细射线,用高斯分布近似锥台截面,并用集成位置编码得到区域特征。它没有刻意加深网络、改用 GAN 或卷积,因此 B 正确。

Q7. 原始 NeRF 中,密度 σ 的预测结果与哪个输入无关?

单选题 · mid

  • A.空间位置 x
  • B.观察方向 d← 正确答案
  • C.位置编码后的 x
  • D.高斯分布均值 μ

答案:B。原始 NeRF 里 σ 只由位置决定,颜色才同时依赖位置和方向。方向编码 d 只参与颜色分支,反映“同一点从不同角度看反光不同”,但密度不应随视角改变。

Q8. 下列哪些是 NeRF 训练代价高昂的原因?

多选题 · mid

  • A.每个像素要沿射线采样多个点← 正确答案
  • B.训练要遍历大量像素光线← 正确答案
  • C.单张照片即可完成全部重建
  • D.不需要估计相机位姿

答案:AB。每个像素一条射线,每条射线几十个采样点,每个点都要过 MLP,且要跨大量图像迭代,所以 A、B 正确。实际需要多张不同视角照片,且还要先估计相机位姿,C、D 错误。

Q9. 关于位置编码 γ(p) 的说法,正确的有?

多选题 · hard

  • A.使用多个频率的正弦余弦函数← 正确答案
  • B.只保留单一最高频率分量
  • C.低频分量反而损害整体轮廓
  • D.高频分量有助于恢复纹理细节← 正确答案

答案:AD。位置编码拼接多个频率的正余弦,低频负责大结构、高频负责细节,因此 B、C 错误。A、D 正确。它像一张写满精细地址的名片,而不是只写门牌号或只写街道。

Q10. 关于 NeRF 体渲染离散近似,正确的是?

多选题 · extreme

  • A.用加权求和近似连续积分← 正确答案
  • B.每个点权重包含透射率乘透明度← 正确答案
  • C.权重与相邻采样间距无关
  • D.背景光等于首颗糖珠颜色

答案:AB。离散体渲染时,权重 w_i = T_i(1 - exp(-σ_i δ_i)),透射率乘透明度,且 δ_i 参与计算,所以 B 正确、C 错误;首颗糖珠只占一部分权重,D 错误。A 描述了积分转求和的基本思想,正确。