想象你是一个考古勘探队的新队长,任务是在整片古城遗址上估算埋藏的金银总量,但预算只够挖一百个坑。菜鸟的做法是把地图剪成小方格,每个格子打一洞,把挖到的宝贝量加起来平均——道理没错,报告却像坐过山车:大部分洞挖到泥土,偶尔一洞捅进宝库,估值瞬间翻几十倍。老探宝人完全不同。他先凭三十年经验画一张“藏宝分布图”,标出哪片区域下铲回报最高,然后把大半坑位集中到富矿,只在遗址各处零星布点,最后把每洞收获除以“这洞被挖中的概率”来记账。同样的坑数,他的报告又快又稳。把古城换成屏幕上的像素,把“宝贝量”换成“光线贡献”,这就是光线追踪里的大杀器——重要性采样(Importance Sampling)。本文带你从最朴素的随机采样出发,看清噪声的源头,学会概率密度函数这张“藏宝图”,再一路升级:光源采样、BRDF 采样,最后用多重重要性采样把各路功夫拧成一股绳。你会发现:用更少的样本画出更好的图,靠的不是蛮力,而是把每一铲都花在刀刃上的智慧。

岗位关联

重要性采样是渲染性能优化的核心杠杆:掌握它,你就能用同样的光线预算大幅降低画面噪点,这是离线渲染、影视特效与游戏光照烘焙中提升图像质量的必备技能。

目录
  1. 可视化演示
  2. 蒙特卡洛基础:随机挖坑的古老智慧
  3. 方差噪音之源:忽高忽低的报告
  4. 概率密度函数:老前辈的藏宝图
  5. 重要性采样原理:往富矿多锄几镐
  6. 光源采样:直奔明晃晃的宝箱
  7. BRDF采样:顺着反光的脉络挖
  8. 多重重要性采样:两路人马合兵一处
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

动态演示重要性采样的核心机制,通过基础/核心/应用/扩展四种模式展示关键概念与交互流程。

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

重要性采样:蒙特卡洛 蒙特卡洛积分基础与方差收敛瓶颈 重要性采样原理与概率密度函数设 核心机制可视化 重要性采样整体架构与关键组件

蒙特卡洛基础:随机挖坑的古老智慧

你正式上任寻宝队队长,任务是估出古城埋藏总量,预算只够挖一百个坑。最朴素的办法谁都会:把地图划成网格,每个格子随机挑一点下铲,记下宝贝量,最后求平均。这方法虽然土,却是一切现代估值术的地基——先别急着升级装备,地基得打牢。

渲染里也有同样的地基。每个像素的颜色是一个难以解析求解的积分:把所有可能方向上射来的光贡献累加。严格算完不现实,于是我们用随机光线代替:朝随机方向射出一条光线,记录它带回的亮度;射 N 条,取平均。这个办法叫蒙特卡洛积分(Monte Carlo Integration),口诀只有一句:均值逼近积分。

它最迷人的性质是“无偏”:在均匀采样下,样本均值的期望恰好等于真积分——渲染器不会系统性撒谎。代价是单次结果会随机抖动,抖动的大小由方差决定,这留到下一节细说。

所以,均匀挖坑的地基是稳的:理论上坑够多,报告必然收敛。但实践告诉我们,等它收敛可能等到下辈子——因为方差这位“噪声魔王”专治头铁。老探宝人接下来第一课,就是教你认清这个敌人。

I^=1N∑i=1Nf(Xi)\displaystyle \hat{I} = \frac{1}{N}\sum_{i=1}^{N} f(X_i)
  1. 积分目标我们要估计的总亮度,渲染里就是一个像素的最终颜色。
    I=∫Ωf(x) dx\displaystyle I = \int_{\Omega} f(x)\, dx
  2. 随机样本第 i 条光线的方向或位置,对应“随机下铲点”。
    Xi∼puniform(x)\displaystyle X_i \sim p_{\text{uniform}}(x)
  3. 单次观测这一铲挖到的宝贝量,即该光线带回的亮度贡献。
    f(Xi)\displaystyle f(X_i)
  4. 平均估计把 N 次观测求和后取平均,样本越多越逼近真积分。
    I^=1N∑i=1Nf(Xi)\displaystyle \hat{I} = \frac{1}{N}\sum_{i=1}^{N} f(X_i)

方差噪音之源:忽高忽低的报告

三个月后,菜鸟队长拿着均匀挖坑的报告去见老前辈:第一次 20 万两,第二次 800 万两,第三次 12 万两。老前辈只扫了一眼就笑了:“你的手气不差,差的是方差。”古城 99% 的地皮是杂草地,只有西北角巴掌大的一块窝着金脉。均匀下铲等于每铲都在赌运气:十铲九铲挖到草,偶尔一铲正中金窝,平均值就被这一铲拖上天。

光线追踪里的“杂草地”和“金窝”是什么?是一间只开一盏小台灯的房间。从像素射出的光线在半球上均匀乱撞,绝大多数方向撞上灰墙,只带回一点漫反射亮度;极少数方向正中灯泡,带回的辐射度是墙面的成百上千倍。于是同一像素反复计算时,亮度时而灰暗时而爆亮——画面上就是飞舞的椒盐噪点,术语叫方差(Variance)。

方差的数学规律很残酷:N 个独立样本取平均,估计值的方差只缩小为原来的 1/N,标准差更是只按 N 的平方根衰减。

教训沉重而宝贵:靠增加样本硬刚噪声,性价比极低。真正的功夫在于“驯服单样本方差”,而驯服的工具,就是下一节的藏宝分布图。

Var[I^]=1N Var[f(X)]\displaystyle \mathrm{Var}[\hat{I}] = \frac{1}{N}\,\mathrm{Var}\bigl[f(X)\bigr]
  1. 方差定义衡量估计值围绕均值抖动的平方均值,抖动越大越刺眼。
    Var[Y]=E[Y2]−(E[Y])2\displaystyle \mathrm{Var}[Y] = \mathbb{E}\bigl[Y^2\bigr] - \bigl(\mathbb{E}[Y]\bigr)^2
  2. 单样本方差尖峰函数令单铲收益在 1 与 81 之间剧烈跳动。
    Var[f(X)]\displaystyle \mathrm{Var}\bigl[f(X)\bigr]
  3. 平均稀释N 次平均把方差缩小 N 倍。
    Var[I^]=Var[f(X)]N\displaystyle \mathrm{Var}[\hat{I}] = \frac{\mathrm{Var}[f(X)]}{N}
  4. 收敛代价标准差按 1/√N 衰减,样本翻 4 倍噪声才减半。
    σ[I^]∝1N\displaystyle \sigma[\hat{I}] \propto \frac{1}{\sqrt{N}}

概率密度函数:老前辈的藏宝图

老前辈从怀里掏出一张皱巴巴的图纸,上面没有地形,只有一圈圈等高线:西北角洼地画得又密又深,外围荒地几乎空白。“这是我三十年的功夫。它不是告诉某点有多少宝,而是告诉我:如果朝这片遗址随便扔一枚飞镖,扎中某一小块区域的概率有多大。整张图的概率加起来,必须恰好等于一。”

这张图纸在数学上叫概率密度函数(PDF),记作 p(x),有两个铁律:处处非负、全域积分等于 1。在渲染里,PDF 就是“采样策略说明书”:采样器按照它的指引去抽方向、抽位置。抽签的机械装置叫“累计分布函数反演”:把密度从负无穷一路累加,得到一条从 0 到 1 的刻度尺;想抽一个样本,就在尺子上均匀扎一个随机数,反查对应位置。

有了图,还得判断图靠不靠谱:图与真实藏宝分布越吻合,下铲效率越高;若把富矿画成荒地,采样器就会在关键区域“失明”。

有了图,还得知道“图靠不靠谱”:如果图与真实藏宝分布高度吻合,下铲效率就高;如果图把富矿画成荒地,采样器就会在关键区域“失明”。下一节看老前辈如何用这张图完成乾坤大挪移。

p(x)≥0,∫Ωp(x) dx=1,F(x)=∫−∞xp(t) dt,X=F−1(U)\displaystyle p(x) \ge 0, \quad \int_{\Omega} p(x)\, dx = 1, \qquad F(x) = \int_{-\infty}^{x} p(t)\, dt, \qquad X = F^{-1}(U)
  1. 概率非负任何位置的概率密度都不能为负,就像藏宝密度不可能“负藏宝”。
    p(x)≥0\displaystyle p(x) \ge 0
  2. 全域归一整个采样空间内概率加起来等于 1,采样必然落在其中某处。
    ∫Ωp(x) dx=1\displaystyle \int_{\Omega} p(x)\, dx = 1
  3. 累计分布把密度从最左边一路累计到 x,得到一条 0 到 1 的刻度尺。
    F(x)=∫−∞xp(t) dt\displaystyle F(x) = \int_{-\infty}^{x} p(t)\, dt
  4. 反演采样在刻度尺上均匀扎一个随机数 U,反查出位置 X,这就是“按图抽签”。
    X=F−1(U)\displaystyle X = F^{-1}(U)

重要性采样原理:往富矿多锄几镐

老前辈叮嘱:“看图下铲,富矿多挖,荒地少挖。但每铲必须记账:挖到多少宝,就除以这一铲被抽中的概率。”你懵了:为什么?他反问:“如果人人都往金窝挤,直接平均,金窝岂不被重复算了无数遍?除以概率,等于把'人多的虚高'打回原形——每一铲都回归它代表的面积份额,账才平。”

这就是重要性采样的核心动作:让采样概率 p(x) 尽可能长得像贡献函数 f(x),然后用 f(x)/p(x) 修正每个样本。数学上妙不可言:只要 p 在 f 非零的区域处处大于零,加权后的期望始终等于原积分——“无偏”保住;而 p 越像 f,单样本记录越接近常数,方差越小。若 p 恰好正比于 f,每个样本的修正值都等于积分真值,方差直接归零。

理想密度 p* 需要先知道积分真值 I——这像“先看答案再考试”,现实中做不到,所以我们只能用可解析的形状去近似 f:要么顺着光源方向,要么顺着表面反射方向。

接下来的章节就是两种最常见的“近似 f”:f 的尖峰由“从哪发光”决定,于是有光源采样;也由“表面向哪反射”决定,于是有 BRDF 采样。前者管灯光,后者管材质,两路功夫缺一不可。

I^=1N∑i=1Nf(Xi)p(Xi),Xi∼p(x),p∗(x)=f(x)∫Ωf(t) dt\displaystyle \hat{I} = \frac{1}{N}\sum_{i=1}^{N}\frac{f(X_i)}{p(X_i)},\qquad X_i \sim p(x),\qquad p^{*}(x) = \frac{f(x)}{\int_{\Omega} f(t)\, dt}
  1. 加权估计器每个样本除以自己的抽取概率,密集区样本权重变小、稀疏区变大。
    f(Xi)p(Xi)\displaystyle \frac{f(X_i)}{p(X_i)}
  2. 无偏性加权后的期望依然回到原积分,多采不破坏诚实。
    E ⁣[f(X)p(X)]=∫Ωf(x) dx=I\displaystyle \mathbb{E}\!\left[\frac{f(X)}{p(X)}\right] = \int_{\Omega} f(x)\, dx = I
  3. 理想密度与贡献函数完全成正比的“完美藏宝图”。
    p∗(x)=f(x)I\displaystyle p^{*}(x) = \frac{f(x)}{I}
  4. 零方差若真用上 p*,每铲记录恒等于 I,方差归零;现实中只能近似。
    f(x)p∗(x)=I,Var=0\displaystyle \frac{f(x)}{p^{*}(x)} = I, \qquad \mathrm{Var} = 0

光源采样:直奔明晃晃的宝箱

假设古城中央摆着一口金灿灿的宝箱,你当然不会满山遍野去寻找它的碎光,而是径直走到箱子边下铲。光源采样就是这个直觉:直接光照中贡献最大的一股来自光源本身,那为什么不直接在光源表面撒点、把路径“接”回着色点?几乎每条光线都稳稳带回能量,而不是在暗处瞎转悠。

实操上,我们在光源表面按面积均匀撒点,得到入射方向 ωi,估计器形如:入射辐射度 × 材质响应 × 余弦夹角,再除以“该方向被抽中的概率”。对一盏小面积强灯,光源采样几乎是降维打击:均匀采样要 1000 条光线才压住的噪点,现在 100 条就服服帖帖。

但老前辈提醒:光源采样不是万能钥匙。如果房间中央不是宝箱,而是一面光可鉴人的镜子,它把窗外一小片天空的光反射到某个刁钻方向——光源采样只能在天空光上均匀撒点,恰好命中反射方向的概率低得可怜。这种场合,得看第二派功夫。

光源采样对付“小面积强光”如探囊取物,可一旦表面变成镜子,它就抓瞎了。这时候,得换第二派挖法:顺着反光的方向挖。

L^dir=Lin(x,ωi) fr(x,ωi) cos⁡θipL(ωi)\displaystyle \hat{L}_{\mathrm{dir}} = \frac{L_{\mathrm{in}}(x, \omega_i)\, f_r(x, \omega_i)\, \cos\theta_i}{p_L(\omega_i)}
  1. 入射辐射度从光源方向射来的光亮度,正是“宝箱的光芒”。
    Lin(x,ωi)\displaystyle L_{\mathrm{in}}(x, \omega_i)
  2. 材质响应BRDF 决定表面把这束光弹向相机的比例。
    fr(x,ωi)\displaystyle f_r(x, \omega_i)
  3. 余弦几何项光斜射时摊到更大面积,单位面元收到的能量按余弦衰减。
    cos⁡θi\displaystyle \cos\theta_i
  4. 光源采样密度每束光被抽中的概率,除它才能保证无偏记账。
    pL(ωi)\displaystyle p_L(\omega_i)

BRDF采样:顺着反光的脉络挖

老前辈的第二招叫“看地形下铲”。同样是坟场,沙地漫反射、四面平光;磨光的石板却能汇聚一束反光,刺得人眼疼。地形的脾气决定了宝贝会朝哪个方向冒头——渲染里,地形的脾气就是 BRDF:表面材质把入射光按什么比例弹向四面八方。摸清脾气,采样器就能顺着脾气下铲。

对漫反射表面,BRDF 是常数,唯一剩下的几何因素是余弦项 cosθ:垂直入射的微面元贡献最大,掠射几乎为零。于是采样密度直接取 p(ω)=cosθ/π,方向“上多下少”。奇妙的是,把它代入估计器,分子分母的 cosθ 与 π 对消,估计量退化成 π·Lin·fr,方差被大幅压低。

光滑高光表面同理:把采样密度集中在镜面反射方向附近,反射波瓣越窄、密度越尖、命中率越高。BRDF 采样对付“大面积光源 + 光滑表面”几乎是免噪神器,但若光源小如针尖,想在波瓣里恰好对准那根针,概率约等于零。

高光党怕小灯,光源党怕镜子。老前辈笑笑:那就不要选边站,让两队人马同时开工——这就是多重重要性采样登场的理由。

pcos⁡(ω)=cos⁡θπ,L^=Lin fr cos⁡θpcos⁡(ω)=π Lin fr\displaystyle p_{\cos}(\omega) = \frac{\cos\theta}{\pi}, \qquad \hat{L} = \frac{L_{\mathrm{in}}\, f_r\, \cos\theta}{p_{\cos}(\omega)} = \pi\, L_{\mathrm{in}}\, f_r
  1. 余弦加权密度正上方最容易被采到,掠射方向几乎不被采。
    pcos⁡(ω)=cos⁡θπ\displaystyle p_{\cos}(\omega) = \frac{\cos\theta}{\pi}
  2. 归一化验证密度在整个半球上积分恰好为 1。
    ∫Ωhcos⁡θπ dω=1\displaystyle \int_{\Omega_h} \frac{\cos\theta}{\pi}\, d\omega = 1
  3. 方向抽取用两个均匀随机数反演出“上多下少”的方向。
    θ=arccos⁡U1,φ=2πU2\displaystyle \theta = \arccos\sqrt{U_1}, \qquad \varphi = 2\pi U_2
  4. 夹角对消分子分母的 cosθ 与 π 约掉,估计器变得极其平静。
    L^=π Lin fr\displaystyle \hat{L} = \pi\, L_{\mathrm{in}}\, f_r

多重重要性采样:两路人马合兵一处

老前辈把两支探宝队叫到跟前:“光源队擅长对付宝箱,反射队擅长追着反光走。今天起,别争谁强——同时撒出去,谁在当下的地形里把握大,就多听谁的。”

多重重要性采样(MIS)就是这份军令的数学化:每个样本既可由光源策略生成,也可由 BRDF 策略生成。关键在权重——最常用的“平衡启发式”按各策略在当前样本处的密度占比分配权重。妙处在于,任意一点上所有策略的权重加起来恒等于 1,因此总估计依旧无偏;理论还保证其方差接近、甚至优于最优的单一策略。

至此,你的寻宝工具箱终于齐了:蒙特卡洛是下铲的规矩,方差是敌人的情报,PDF 是手上的地图,重要性采样是按图分配的铲子,光源采样与 BRDF 采样是两路精兵,MIS 是调度将军。把整套手艺装进渲染器,同样的 100 条光线,画面从“满天星”变成“剥壳鸡蛋”。

少挖坑,多办事——寻宝如此,渲染亦然。这就是重要性采样的全部浪漫:用更少的样本,画出更好的图。

wi(x)=ni pi(x)∑k=1mnk pk(x),I^=∑i=1m1ni∑j=1niwi(Xi,j) f(Xi,j)pi(Xi,j)\displaystyle w_i(x) = \frac{n_i\, p_i(x)}{\sum_{k=1}^{m} n_k\, p_k(x)}, \qquad \hat{I} = \sum_{i=1}^{m}\frac{1}{n_i}\sum_{j=1}^{n_i} w_i(X_{i,j})\, \frac{f(X_{i,j})}{p_i(X_{i,j})}
  1. 平衡启发式策略的把握用“样本数 × 密度”衡量,占比大者话语权高。
    wi(x)=ni pi(x)∑k=1mnk pk(x)\displaystyle w_i(x) = \frac{n_i\, p_i(x)}{\sum_{k=1}^{m} n_k\, p_k(x)}
  2. 权重归一任何采样点上各策略权重相加等于 1,这是无偏的担保。
    ∑i=1mwi(x)=1\displaystyle \sum_{i=1}^{m} w_i(x) = 1
  3. 合并估计各策略内部先做加权平均,再求和形成总估计。
    I^=∑i=1m1ni∑j=1niwi(Xi,j) f(Xi,j)pi(Xi,j)\displaystyle \hat{I} = \sum_{i=1}^{m}\frac{1}{n_i}\sum_{j=1}^{n_i} w_i(X_{i,j})\, \frac{f(X_{i,j})}{p_i(X_{i,j})}
  4. 方差保证MIS 的方差接近最优单一策略,几乎总是更优,最坏也只差一个常数倍。
    Var[I^MIS]≤Var[I^best]+O ⁣(1N)\displaystyle \mathrm{Var}[\hat{I}_{\mathrm{MIS}}] \le \mathrm{Var}[\hat{I}_{\mathrm{best}}] + O\!\left(\frac{1}{N}\right)

AI 应用场景

影视动画离线渲染提速

阶段:渲染推理优化(采样策略配置)

解决的问题:传统均匀采样靠堆样本压噪,每帧渲染数小时仍残留“火萤”噪点;用光源采样 + BRDF 采样 + MIS 组合后,同样预算下噪声大幅下降,或同样噪声目标下渲染时间几乎减半。

具体案例:某动画工作室渲染室内夜景戏,窗外一盏窄路灯光加上抛光地板。原先每像素 1024 样本仍有噪斑;工程师将直接光照改为光源采样、间接光按余弦加权采样,并用 MIS 加权,样本降至 512,噪点指标反而更优,单帧耗时从 8 分钟降到 4 分钟。

游戏大世界光照预烘焙

阶段:场景数据准备(光照预计算)

解决的问题:实时渲染不能每像素跑几千条光线,预烘焙全局光照是主流;但大世界地编常遇到烘焙 8 小时、暗部仍有噪斑的尴尬。重要性采样让每条烘焙光线都“值回票价”。

具体案例:某开放世界项目的阴影与间接光烘焙,使用余弦加权半球采样 + 天空光光源采样,配合 MIS 融合,烘焙时间从 8 小时降到 5 小时,暗部噪斑消失,夜间灯光不再闪烁。

与 AI 降噪器协作的实时渲染

阶段:AI 推理后处理(降噪管线输入优化)

解决的问题:AI 降噪器能“抹”掉噪声,但输入噪声过大会产生糊斑与残影;先用重要性采样把每像素方差压到合理水平,再交给降噪器,是“治本 + 治标”的双保险。

具体案例:实时路径追踪方案中,每像素 64 样本 + 重要性采样 + AI 降噪,比每像素 256 均匀样本 + AI 降噪的细节保持更好、帧耗时反而更低;NVIDIA OptiX 等现代管线中即为标准组合。

Python 演示

python66 行
import mathimport random  def f(x):    # 贡献函数: 平坦底色(暗墙) + 一座窄而高的亮灯尖峰    return 1.0 + 80.0 * math.exp(-((x - 0.8) ** 2) / 0.001)  def g(x):    # 与尖峰形状相近的高斯密度, 方差 0.0005    sigma = math.sqrt(0.0005)    return math.exp(-((x - 0.8) ** 2) / 0.001) / (sigma * math.sqrt(2.0 * math.pi))  def pdf(x, alpha=0.8):    # 混合密度: 80% 投到尖峰附近, 20% 均匀兜底    return (1.0 - alpha) + alpha * g(x)  def sample(alpha=0.8):    # 按混合密度抽取一个样本 x    if random.random() < alpha:        while True:            x = random.gauss(0.8, math.sqrt(0.0005))            if 0.0 <= x <= 1.0:                return x    return random.random()  def estimate_uniform(n):    return sum(f(random.random()) for _ in range(n)) / n  def estimate_is(n):    total = 0.0    for _ in range(n):        x = sample()        total += f(x) / pdf(x)    return total / n  def run_trials(estimator, n, trials=500):    values = [estimator(n) for _ in range(trials)]    mean = sum(values) / trials    variance = sum((v - mean) ** 2 for v in values) / trials    return mean, variance  def numerical_integral():    steps = 2000000    dx = 1.0 / steps    return sum(f((i + 0.5) * dx) for i in range(steps)) * dx  def main():    print("真值(数值积分): %.4f" % numerical_integral())    for n in (16, 64, 256):        m1, v1 = run_trials(estimate_uniform, n)        m2, v2 = run_trials(estimate_is, n)        print("n=%4d 均匀: 均值%.4f 方差%9.2f | 重要性: 均值%.4f 方差%9.2f | 方差降低约%.1f倍"              % (n, m1, v1, m2, v2, v1 / v2))  if __name__ == "__main__":    main()
目的:在一维“暗墙 + 一盏小灯”的模拟场景中,对比均匀采样与重要性采样两种蒙特卡洛估计器的均值与方差,直观展示“同样的样本数,重要性采样方差低几十上百倍”。
  1. return 1.0 + 80.0 * math.exp(-((x - 0.8) ** 2) / 0.001)定义模拟“一盏小灯”的尖峰贡献函数:大部分地方亮度为 1,只有 x≈0.8 附近亮到 81。
  2. return (1.0 - alpha) + alpha * g(x)构造“近似 PDF”:八分概率跟着尖峰走,二分均匀兜底,保证任何位置都可能被采到。
  3. while True:用拒绝法把高斯样本拉回 [0,1],确保采样点永远落在有效区间。
  4. total += f(x) / pdf(x)这是重要性采样的记账规则:每个样本贡献除以它被抽中的概率,加权后才无偏。
  5. values = [estimator(n) for _ in range(trials)]把同一实验重复几百次,才能统计出方差,看出哪种采样更稳。
  6. m1, v1 = run_trials(estimate_uniform, n)分别评估两种策略,你会发现均值都接近真值 5.48,方差却天差地别。

常见误区

误区我以为重要性采样就是把光线集中射向明亮的光源方向,最后直接把这些样本的亮度求平均,图像应该又亮又干净。可实际渲染出来整体发白过曝,我一度怀疑是曝光参数坏了。

正解集中采样只是“手段”,除以概率 p 的加权才是“手续”。朝光源多发射,意味着这些样本在平均中的出现次数被人为抬高,不除以“被抽中的概率”,等于把同一条光路重复计了好几笔账,期望被系统性抬高,图像就发白。记住 f(x)/p(x) 中 p 是每个样本的“出场标记”,没有它,任何偏倚采样都会变成有偏估计。

为何常见:“哪里重要采哪里”这句话太顺口,公式里看似多余的分母很容易被当作数学装饰忽略,尤其在不看推导只看结论的初学者眼里。

误区既然要把样本都花在刀刃上,那把概率密度全部押在贡献最大的那一个方向,方差不就彻底归零了吗?我试着把采样分布写成一个几乎不扩散的窄脉冲。

正解归一化的 PDF 总面积必须为 1,把密度全押在一点,意味着其它区域的密度趋近于零。只要 f 在那些区域还有非零贡献,权重 f/p 就会逼近无穷大,零星几个样本就能制造出天文数字级的记录——这就是异常明亮点,渲染圈叫 firefly。稳妥的 PDF 要“覆盖”f 的所有非零区域:在 f 大的地方尽量匹配,在 f 小的地方也留一点底线概率。

为何常见:人对“集中优势兵力”有天然好感,却容易忽略概率守恒——总面积只有 1,集中到一点,别处必然归零。

误区我觉得出图噪点多没关系,反正有 AI 降噪器一键磨皮。重要性采样听起来像学术论文里的优化技巧,工程上只是锦上添花。

正解降噪器是“事后处理”:它只能抹除已经产生的噪声痕迹,同时可能抹掉细节、留下模糊与残影。重要性采样发生在“采样阶段”,它直接降低每个样本的方差,让噪声在源头就变小。正确姿势是两者协作:先用重要性采样把方差压到合理区间,再用 AI 降噪器收尾;指望降噪器硬扛均匀采样的高方差,得到的是糊成一团的画面。

为何常见:渲染器把采样策略封装在内部,很多开发者只接触输出端的降噪 API,自然以为优化就只有“滤镜”这一层。

误区我写了两套采样器,一套光源采样、一套 BRDF 采样,然后想当然地把两个估计值加起来除以二,自认为这就是多重重要性采样,结果画面噪声比单一策略还大。

正解朴素平均会把“烂策略”的高方差原封不动地掺进来。MIS 用的是“按把握加权”:平衡启发式让权重正比于该策略在当前位置的密度占比,光源策略擅长的场景它自动称王,BRDF 策略擅长的场景它自动让位,且任意点权重和为 1,保证无偏。加权不是平均,是“能者多劳”。

为何常见:“平均更稳妥”是日常直觉,而 wi=ni·pi/Σnk·pk 的公式第一眼看起来只是数学符号,容易让人绕过公式直接用直觉。

面试题

Q1. 蒙特卡洛积分中,估计量的方差随样本数 N 如何变化?

单选题 · easy

  • A.方差与采样数 N 成正比
  • B.方差与采样数 N 成反比← 正确答案
  • C.方差与 N 的平方根成反比
  • D.方差与 N 的平方成反比

答案:B。N 个独立样本取平均,方差恰好缩小为单样本方差的 1/N,即与 N 成反比(选项 B)。容易混淆的是标准差:它按 1/√N 衰减,所以选项 C 说的是标准差。想让噪声减半,需要把样本翻四倍——这正是“堆样本不划算”的原因。

Q2. 重要性采样估计器 f(X)/p(X) 中,分母 p(X) 的作用是什么?

单选题 · easy

  • A.抵消采样偏向的加权修正← 正确答案
  • B.让画面更鲜艳的滤镜系数
  • C.控制 GPU 线程数的参数
  • D.增加光线数量的乘数

答案:A。采样器偏向高概率区域,直接平均会把“去得多的地方”重复计算;除以 p(X) 后,样本权重被拉回客观的“面积份额”,期望不变、方差降低,这就是“记账”动作(选项 A)。B、C、D 都是对分母作用的误解——它既不调色、也不管线程、更不该改变样本数。

Q3. 当采样概率 p(x) 与贡献函数 f(x) 成正比时,重要性采样会发生什么?

单选题 · mid

  • A.估计值变成原来的两倍
  • B.估计方差立即趋近于零← 正确答案
  • C.估计结果从此变得有偏
  • D.采样点全部作废失效

答案:B。p(x)=f(x)/I 时,每个样本的修正值 f(x)/p(x) 恒等于积分真值 I,方差归零(选项 B)。这相当于“拿着完美的藏宝图下铲,每铲记录都一样”。但题目中 I 正是要求解的目标,所以 p* 只是理论极限,实际只能近似。

Q4. 场景:一间黑暗房间只开一盏极小的强光灯,照射在粗糙漫反射墙面上。直接光照应优先采用哪种采样策略?

单选题 · mid

  • A.优先采用光源表面采样← 正确答案
  • B.优先采用 BRDF 方向采样
  • C.均匀向半球乱射光线
  • D.完全依赖 AI 降噪后处理

答案:A。小面积强光源是“宝箱”型场景,直接在光源表面撒点、把路径接回着色点,几乎每条光线都带回能量(选项 A)。BRDF 采样要“恰好”把方向对准针尖大的灯,概率极低,方差反而放大;均匀采样等于赌运气;AI 降噪抹不掉高方差采样留下的噪声。

Q5. 大面积天空光照射一面高光泽金属表面时,反射贡献主要集中在哪里?

单选题 · mid

  • A.集中在表面法线方向
  • B.集中在镜面反射方向← 正确答案
  • C.集中在光源表面中心
  • D.完全随机且各向均匀

答案:B。高光泽表面的 BRDF 波瓣极窄,光能主要沿“入射方向关于法线的镜面反射方向”射出。把采样密度集中在镜面反射方向附近,就是 BRDF 采样的精髓(选项 B)。这类场景若用光源采样,概率摊在整个天空光上,命中反射路径的概率极低。

Q6. 多重重要性采样的平衡启发式权重 wi(x) 应如何计算?

单选题 · hard

  • A.按各策略密度占比加权← 正确答案
  • B.直接取当前密度的倒数
  • C.在所有策略间平均分配
  • D.用贡献值除以样本总数

答案:A。平衡启发式 wi = ni·pi / Σk nk·pk,谁的“样本数 × 密度”在当前方向上更大,谁的话语权就更高(选项 A)。加权后任意一点权重之和恒为 1,保证无偏。B 是单个重要性采样的记账动作,C 是朴素平均,D 张冠李戴。

Q7. 当近似 PDF 在贡献函数 f 很大的区域取值过小时,会出现什么现象?

单选题 · hard

  • A.个别样本权重过大产生亮斑← 正确答案
  • B.图像整体变灰亮度下降
  • C.采样速度变得更快
  • D.结果无偏不受任何影响

答案:A。权重 f(x)/p(x) 中 p 很小时,记录值被放大成天文数字,一颗“火星种子”就能在画面上烧出异常亮斑,渲染圈叫 firefly(选项 A)。好的 PDF 必须覆盖 f 的所有非零区域,宁可在低谷“保守”,也不能在高峰“失明”。

Q8. 以下哪些方法能够真正降低路径追踪图像中的方差或噪点?

多选题 · mid

  • A.增加每像素的采样数量← 正确答案
  • B.采用光源采样降低方差← 正确答案
  • C.对输出图像做对比度锐化
  • D.采用多重重要性采样← 正确答案

答案:ABD。增加样本把方差按 1/N 摊薄(A);光源采样与 MIS(B、D)从源头降低单样本方差。C 的锐化只是增强对比,噪声也被放大,不减方差。降方差要么多挖坑(N),要么把铲子下到金矿上(重要性采样),后者的性价比高得多。

Q9. 关于概率密度函数 p(x) 的性质,下列说法正确的是?

多选题 · mid

  • A.在所有位置取值非负← 正确答案
  • B.全域积分结果等于一← 正确答案
  • C.必须严格正比于贡献函数
  • D.高密度处样本权重较小← 正确答案

答案:ABD。PDF 的铁律是“非负”和“归一”(A、B)。C 错:正比于 f 只是零方差的理想状态,现实中只能用近似 PDF,只要处处为正且归一即可无偏。D 对:权重是 1/p,p 越大权重越小,这正是“多采也要打折记账”的道理。

Q10. 关于多重重要性采样,下列说法正确的有?

多选题 · hard

  • A.合并光源与 BRDF 两类策略← 正确答案
  • B.任意采样点权重之和为一← 正确答案
  • C.只能用于直接光照估计
  • D.能完全消除蒙特卡洛噪声

答案:AB。MIS 的核心是把光源采样、BRDF 采样等多策略按平衡启发式合并(A),且任一累加点的权重和为 1,确保无偏(B)。C 错:MIS 同样可用于间接光照与双向路径追踪。D 错:除非策略完美覆盖 f,否则只是方差降低而非归零。