中EN
概念页

随机变量变换与逆变换采样

Random Variable Transforms & Inversion Sampling

蒙特卡洛估计器要求能从指定的概率密度里抽样。最基本的工具是逆变换法 (Inversion Method):对 CDF 求逆,把 [0,1)[0,1) 上的均匀随机数映射成目标分布;更一般地,随机变量经过一一映射后的密度由导数(多维时是雅可比行列式)决定;多维非独立分布则先采边缘密度、再采条件密度。本页按 PBRT 第 4 版 2.1.1、2.3、2.4 节整理,是 蒙特卡洛积分与重要性采样 的数学部分。

概率论基本概念(PBRT 2.1.1)

  • 随机变量 XX:由随机过程选出的值,定义域可离散可连续;Y=f(X)Y=f(X) 仍是随机变量。
  • 概率质量函数 (PMF) 给离散变量各取值的概率,例如骰子 p(X)=1/6p(X)=1/6;均匀指所有取值等概率。
  • 独立:p(X,Y)=p(X)p(Y)p(X,Y)=p(X)p(Y);相依:p(X,Y)=p(X) p(Y∣X)p(X,Y)=p(X)\,p(Y\mid X)(式 2.1,条件概率)。
  • 标准均匀随机变量 ξ∈[0,1)\xi\in[0,1):渲染里一切采样的原料,既容易由伪随机数生成器得到(见 伪随机数生成),又能映射成任意分布。离散选择:若 ∑j<ipj≤ξ<∑j≤ipj\sum_{j<i}p_j\le\xi<\sum_{j\le i}p_j 则选第 ii 个(式 2.2)。例如按功率 pi=Φi/∑jΦjp_i=\Phi_i/\sum_j\Phi_j 选光源。
  • 累积分布函数 (CDF) P(x)=Pr⁡{X≤x}P(x)=\Pr\{X\le x\}(式 2.3),骰子 P(2)=1/3P(2)=1/3。
  • 概率密度函数 (PDF) p(x)=dP/dxp(x)=dP/dx:非负、在定义域上积分为 1,但单点的值可以大于 1;区间概率 Pr⁡{x∈[a,b]}=∫abp=P(b)−P(a)\Pr\{x\in[a,b]\}=\int_a^bp=P(b)-P(a)。ξ\xi 的 PDF 在 [0,1)[0,1) 上为 1、其余为 0。
  • 期望 Ep[f]=∫Df(x)p(x) dxE_p[f]=\int_Df(x)p(x)\,dx(式 2.4),线性:E[af]=aE[f]E[af]=aE[f]、和的期望等于期望的和(式 2.5)。例:[0,π][0,\pi] 上均匀时 E[cos⁡x]=1π(sin⁡π−sin⁡0)=0E[\cos x]=\frac1\pi(\sin\pi-\sin0)=0。

离散逆变换(PBRT 2.3.1)

把 PMF 的柱子从左往右叠起来得到离散 CDF Pi=∑j≤ipjP_i=\sum_{j\le i}p_j,选满足 Pi−1≤ξ<PiP_{i-1}\le\xi<P_i 的 ii(式 2.19),即"对 CDF 求逆":均匀样本落到某根柱子上的概率正好等于柱高。

  • pbrt 的 SampleDiscrete() 接受未归一化的权重:先求权重和,把 uu 乘以总和得 u′u'(浮点舍入使 u′u' 等于总和时退到下一个更小的浮点数),再线性扫描找区间;每次采样 O(n)O(n)。要大量采样时改用 O(1)O(1) 的别名表 AliasTable(附录 A.1)。
  • 样本复用:落在区间 [Pi−1,Pi)[P_{i-1},P_i) 内的相对位置 (ξ−Pi−1)/pi(\xi-P_{i-1})/p_i 本身又是一个 [0,1)[0,1) 均匀数,可以返回给调用者继续使用(uRemapped)。对第 8 章的高质量低差异样本,复用比重新取一维更好。

连续逆变换(PBRT 2.3.2)

步骤:① 积分 PDF 得 CDF P(x)=∫0xp(x′)dx′P(x)=\int_0^xp(x')dx';② 取 ξ\xi;③ 解 ξ=P(X)\xi=P(X),即 X=P−1(ξ)X=P^{-1}(\xi)。

连续逆变换采样把均匀随机数经 CDF 的逆映射成目标分布上的样本。

flowchart LR
  U["U ~ Uniform 0,1"] --> CDF["计算或查表 CDF⁻¹"]
  CDF --> X["X = CDF⁻¹(U) ~ 目标分布"]
  PDF["目标 PDF / CDF"] --> CDF

例:线性函数 f(x)=(1−x)a+xbf(x)=(1-x)a+xb,x∈[0,1]x\in[0,1],a,b≥0a,b\ge0。积分 (a+b)/2(a+b)/2,所以

p(x)=2f(x)a+b,P(x)=x (a(2−x)+bx)a+b.p(x)=\frac{2f(x)}{a+b},\qquad P(x)=\frac{x\,(a(2-x)+bx)}{a+b}.

直接求逆得 X=a−(1−ξ)a2+ξb2a−bX=\dfrac{a-\sqrt{(1-\xi)a^2+\xi b^2}}{a-b},但 a=ba=b 时是 0/0;pbrt 用分子有理化后的等价式

X=ξ(a+b)a+(1−ξ)a2+ξb2,X=\frac{\xi(a+b)}{a+\sqrt{(1-\xi)a^2+\xi b^2}},

并用 std::min 把结果钳到 1 以下(舍入可能得到 1,而下游代码依赖 [0,1)[0,1))。本页用 a=1,b=3a=1,b=3 抽 10610^6 个样本复核:直方图 0.625/0.873/1.123/1.378 与理论 PDF 0.625/0.875/1.125/1.375 吻合,P(0.3)=0.195P(0.3)=0.195 与经验频率 0.1951 吻合。pbrt 通常还提供采样的逆函数(返回产生某个 xx 的 ξ\xi,一维时就是 CDF),便于第 8 章之外的用途。

随机变量的变换(PBRT 2.4)

若 Y=f(X)Y=f(X) 且 ff 一一映射(导数严格同号),则 CDF 相等 Pf(f(x))=P(x)P_f(f(x))=P(x),求导得

pf(y)=∣dfdx∣−1p(x).p_f(y)=\left|\frac{df}{dx}\right|^{-1}p(x).

例:p(x)=2xp(x)=2x([0,1][0,1]),f=sin⁡xf=\sin x,则 pf(y)=2arcsin⁡y1−y2p_f(y)=\dfrac{2\arcsin y}{\sqrt{1-y^2}}(本页用 X=ξX=\sqrt\xi 抽样后取正弦,直方图与此式吻合)。反过来,要把 X∼pX\sim p 变成 Y∼pfY\sim p_f,取 f(x)=Pf−1(P(x))f(x)=P_f^{-1}(P(x));XX 均匀时就退化为逆变换法。

多维:Y=T(X)Y=T(X),TT 为双射,

pT(T(x))=p(x)∣JT(x)∣(式 2.21)p_T(T(x))=\frac{p(x)}{|J_T(x)|}\quad(\text{式 2.21})

∣JT∣|J_T| 是雅可比矩阵行列式的绝对值。

  • 极坐标 x=rcos⁡θ, y=rsin⁡θx=r\cos\theta,\ y=r\sin\theta:∣JT∣=r|J_T|=r,所以 p(r,θ)=r p(x,y)p(r,\theta)=r\,p(x,y)(式 2.22)。
  • 球坐标:∣JT∣=r2sin⁡θ|J_T|=r^2\sin\theta,p(r,θ,ϕ)=r2sin⁡θ p(x,y,z)p(r,\theta,\phi)=r^2\sin\theta\,p(x,y,z)(式 2.23)。这正是"直接均匀取 θ,ϕ\theta,\phi 在球面上不均匀"的原因(GEA 的半球均匀采样例子同理,见 蒙特卡洛积分与重要性采样)。

多维采样:边缘密度与条件密度(PBRT 2.4.2)

可分离时 p(x,y)=px(x)py(y)p(x,y)=p_x(x)p_y(y),各维独立采样即可。不可分离时:

  1. 边缘密度 p(x)=∫p(x,y) dyp(x)=\int p(x,y)\,dy(式 2.24),"积掉"其他维;
  2. 采 X∼p(x)X\sim p(x) 后,从条件密度 p(y∣x)=p(x,y)/∫p(x,y) dyp(y\mid x)=p(x,y)/\int p(x,y)\,dy 采 YY;
  3. 更高维依次类推,每次少一维。

不可分离的多维密度按「先边缘、后条件」逐维降维采样。

flowchart TD
  Joint["联合密度 p(x,y)"] --> Marg["边缘 p(x) = ∫ p(x,y) dy"]
  Marg --> Sx["采样 X ~ p(x)"]
  Sx --> Cond["条件 p(y|x) = p(x,y)/p(x)"]
  Cond --> Sy["采样 Y ~ p(y|x)"]
  Sy --> Out["得到 (X,Y)"]

例:双线性函数 f(x,y)=(1−x)(1−y)w0+x(1−y)w1+y(1−x)w2+xyw3f(x,y)=(1-x)(1-y)w_0+x(1-y)w_1+y(1-x)w_2+xyw_3(式 2.25,w0..w3w_0..w_3 位于 (0,0),(1,0),(0,1),(1,1)(0,0),(1,0),(0,1),(1,1)),p=4f/(w0+w1+w2+w3)p=4f/(w_0+w_1+w_2+w_3)。先采 yy 的边缘密度 p(y)∝(1−y)(w0+w1)+y(w2+w3)p(y)\propto(1-y)(w_0+w_1)+y(w_2+w_3),再采 p(x∣y)∝(1−x)[(1−y)w0+yw2]+x[(1−y)w1+yw3]p(x\mid y)\propto(1-x)[(1-y)w_0+yw_2]+x[(1-y)w_1+yw_3],两步都是线性函数,用上面的 SampleLinear();求逆时按相反顺序套两次线性的逆。更多例子(球面、半球、圆盘等)在附录 A.5。

在游戏开发中的用途

  • 按权重/功率选光源、按亮度选环境贴图像素(离散逆变换或别名表)。
  • 生成 GGX/余弦分布的方向(连续逆变换 + 球坐标雅可比),见 微表面理论。
  • 写采样代码时最常见的 bug 是漏掉雅可比因子(如球面上的 sin⁡θ\sin\theta)或 PDF 未归一化。

取舍

  • 逆变换法要求 CDF 可解析积分并可求逆;做不到时改用表格化分段常数分布、别名表或拒绝采样(附录 A)。
  • 逆变换是保序(单调)映射,能保留低差异样本的分层结构。PBRT 2.3 节引言只说逆变换"配合第 8 章分布良好的样本特别有效";把这一点解释为单调映射保分层、并据此说它优于拒绝采样,是本页的归纳。
  • 数值稳定性要单独处理:0/0 的等价变形、结果钳到 [0,1)[0,1)。

PBRT 的视角:半向量变换的雅可比(PBRT 4e 9.6.5、9.7)

微表面 BSDF 先采样法线 ωm\omega_m,再用反射或折射得到 ωi\omega_i,所以 ωi\omega_i 的密度要用变量替换 p(ωi)=p(ωm) ∣dωm/dωi∣p(\omega_i)=p(\omega_m)\,|d\omega_m/d\omega_i|。

  • 平面情形:θm=(θo+θi)/2\theta_m=(\theta_o+\theta_i)/2,dθm/dθi=1/2d\theta_m/d\theta_i=1/2。
  • 三维反射:取以 ωo\omega_o 为极轴的球坐标,镜面反射意味着 θi=2θm\theta_i=2\theta_m、ϕi=ϕm\phi_i=\phi_m: dωmdωi=sin⁡θm dθm dϕmsin⁡2θm⋅2 dθm dϕm=14cos⁡θm=14(ωo⋅ωm)=14(ωi⋅ωm)\frac{d\omega_m}{d\omega_i}=\frac{\sin\theta_m\,d\theta_m\,d\phi_m}{\sin2\theta_m\cdot2\,d\theta_m\,d\phi_m}=\frac{1}{4\cos\theta_m}=\frac{1}{4(\omega_o\cdot\omega_m)}=\frac{1}{4(\omega_i\cdot\omega_m)}
  • 折射:广义半向量 ωm∝ηiωi+ηoωo\omega_m\propto\eta_i\omega_i+\eta_o\omega_o,雅可比为 ηi2∣ωi⋅ωm∣/(ηi(ωi⋅ωm)+ηo(ωo⋅ωm))2\eta_i^2|\omega_i\cdot\omega_m|/\big(\eta_i(\omega_i\cdot\omega_m)+\eta_o(\omega_o\cdot\omega_m)\big)^2(Walter 等 2007)。PBRT 网页版对这一式的化简有笔误,见 微表面理论。
  • 同一思想也用在测量 BRDF 上:把采样映射当作参数化,存 fcos⁡θ/pf\cos\theta/p 而不是 ff,见 测量 BRDF 与数据驱动反射模型。

PBRT 的视角:附录 A 的采样工具箱(PBRT 4e A.3–A.5)

拒绝采样(A.3)

若已知可采样的 pp 与常数 cc 使 f(x)≤c p(x)f(x)\le c\,p(x),则反复采 X∼pX\sim p、ξ\xi,当 ξ<f(X)/(cp(X))\xi<f(X)/(cp(X)) 时接受。几何意义:点 (X,ξcp(X))(X,\xi cp(X)) 落在 ff 下方。效率取决于 cpcp 包络 ff 的紧密程度。例:在外接正方形里采点、落在圆盘内才接受,接受率 π/4≈78.5%\pi/4\approx78.5\%;推广到 nn 维超球时体积比趋于 0,越来越低效。pbrt 的蒙特卡洛算法都不用它,因为更希望把分布良好的 [0,1)n[0,1)^n 样本确定性地映射过去;但它很适合调试:怀疑某个逆变换采样有错时,换成拒绝采样实现,看估计值是否收敛到同一结果(von Neumann 1951 提出)。

一维函数(A.4)

分布要点
帐篷函数 r−∣x∣r-\lvert x\rvert先用 SampleDiscrete() 以 1/2 概率选左右并复用均匀数,再采线性函数;构造保证 u=0→−ru=0\to-r、u=1→ru=1\to r 单调无跳变,保留低差异样本的分布
指数 ae−axa e^{-ax},[0,∞)[0,\infty)P=1−e−axP=1-e^{-ax},X=−ln⁡(1−ξ)/aX=-\ln(1-\xi)/a。不要化简成 −ln⁡ξ/a-\ln\xi/a:ξ\xi 可以是 0(基数逆序列尤其容易产生 0)但不会是 1
高斯CDF 用误差函数表示,x=μ+2σ erf−1(2ξ−1)x=\mu+\sqrt2\sigma\,\mathrm{erf}^{-1}(2\xi-1),erf−1\mathrm{erf}^{-1} 用多项式近似;Box–Muller 用两个均匀数得到两个正态样本:极坐标下 r2=−2ln⁡ξ1r^2=-2\ln\xi_1、θ=2πξ2\theta=2\pi\xi_2
逻辑斯谛 e−∣x∣/ss(1+e−∣x∣/s)2\dfrac{e^{-\lvert x\rvert/s}}{s(1+e^{-\lvert x\rvert/s})^2}形状像高斯但可直接求逆,P=1/(1+e−x/s)P=1/(1+e^{-x/s});s=0.603s=0.603 时与 σ=1\sigma=1 的高斯最接近(最小二乘拟合)。pbrt 的毛发模型使用它
区间 [a,b][a,b] 上的截断p[a,b]=p/(P(b)−P(a))p_{[a,b]}=p/(P(b)-P(a));采样时把 ξ\xi 线性插值到 [P(a),P(b)][P(a),P(b)] 再用原逆函数
不可求逆的 CDF用 Newton–二分法解 P(X)−ξ=0P(X)-\xi=0;例:smoothstep f=3t2−2t3f=3t^2-2t^3,p=2f/(b−a)p=2f/(b-a),P=2t3−t4P=2t^3-t^4(见下方原书问题),要解四次方程
分段常数 PiecewiseConstant1D取 ∣f∣\lvert f\rvert 定义 PDF,累加得 n+1n+1 个 CDF 值;二分找 cdf[o] ≤ u < cdf[o+1],在段内线性插值;函数全为 0 时改用线性 CDF(图像中全黑的扫描线会出现这种情况);Invert() 直接按位置插值 CDF

多维(A.5)

  • 圆盘:r=ξ1r=\xi_1 是错的(样本聚在圆心);由 p(r,θ)=r/πp(r,\theta)=r/\pi 得 r=ξ1r=\sqrt{\xi_1}、θ=2πξ2\theta=2\pi\xi_2。但这种映射扭曲面积,会让分层样本的层不紧凑;同心映射(Shirley–Chiu 1997)把同心正方形映到同心圆,如右侧楔形 r=xr=x、θ=yxπ4\theta=\frac{y}{x}\frac\pi4,实现采用 Shirley 2011 博客中 Dave Cline 与评论者 "franz" 的简化。
  • 均匀半球/球:p(θ,ϕ)=sin⁡θ/(2π)p(\theta,\phi)=\sin\theta/(2\pi),可分离,cos⁡θ=ξ1\cos\theta=\xi_1(用 ξ\xi 替换 1−ξ1-\xi);球面为 z=1−2ξ1z=1-2\xi_1,r=2ξ1(1−ξ1)r=2\sqrt{\xi_1(1-\xi_1)},PDF 1/(4π)1/(4\pi)。pbrt 所有方向 PDF 都相对立体角。
  • 余弦加权半球(Malley 方法):在圆盘上均匀采样再竖直投影到半球;sin⁡θ=r\sin\theta=r,雅可比 cos⁡θ\cos\theta,得 p(θ,ϕ)=cos⁡θsin⁡θ/πp(\theta,\phi)=\cos\theta\sin\theta/\pi,即立体角 PDF cos⁡θ/π\cos\theta/\pi。任何均匀圆盘采样(包括同心映射)都适用。
  • 圆锥内均匀:cos⁡θ=(1−ξ)+ξcos⁡θmax⁡\cos\theta=(1-\xi)+\xi\cos\theta_{\max},p(ω)=1/(2π(1−cos⁡θmax⁡))p(\omega)=1/(2\pi(1-\cos\theta_{\max}))。
  • 分段常数 2D(PiecewiseConstant2D):先按行积分得边缘分布 p[v~]p[\tilde v] 采样行,再用该行的条件分布 p[u~∣v~]p[\tilde u|\tilde v] 采样列;PDF 是两者之积。每行直接交给 PiecewiseConstant1D(常数因子 IfI_f、p[v~]p[\tilde v] 不影响归一化),用于环境贴图采样(见 基于图像的光照)。
  • 加窗分段常数 2D(WindowedPiecewiseConstant2D,供 PortalImageInfiniteLight 使用):借助求和面积表 (summed-area table)(Crow 1984)在常数时间算任意矩形上的积分;边缘 CDF P(x)P(x) 的分子分母都可由表求得,再用 SampleBisection() 二分到同一离散层后按分段线性闭式求解;条件分布把 xx 范围限制在采到的那一层上,仍用二维积分求。求差时用 double 防止大数相减的灾难性抵消。表中存的是各格右上角的累计和,边界上的 0 不存,所以查询时不加 0.5 像素偏移。Bitterli 等 2015 首先把求和面积表用于图像矩形区域的采样。
  • 与 RTR4 的关系:纹理过滤与 Mipmap 中求和面积表用于各向异性纹理过滤(求矩形区域平均值),这里用于重要性采样(求矩形区域积分并反演 CDF),同一数据结构、不同用途。
  • 其他表格化多维采样:Steigleder–McCool 2003 用 Hilbert 曲线把多维域线性化为一维(见 莫顿码与空间填充曲线);McCool–Harwood 1997、Clarberg 等 2005 的四叉树逐级变换;Vitsas 等 2021 用截断高斯混合拟合晴空环境贴图。

原书问题(附录 A)

  • A.4.6 smoothstep 的 CDF:正文(SVG 已解码确认)写作 P(x)=2t3−t4b−aP(x)=\dfrac{2t^3-t^4}{b-a},多除了 b−ab-a。由 p=2f/(b−a)p=2f/(b-a)、dx=(b−a)dtdx=(b-a)dt 得 P=2t3−t4P=2t^3-t^4,在 t=1t=1 处为 1;书中写法在 t=1t=1 处等于 1/(b−a)1/(b-a)。代码 SampleSmoothStep() 用的是正确的 2t3−t42t^3-t^4。笔者取 a=2,b=5,x=3.7a=2,b=5,x=3.7 数值积分 PDF 得 0.26081,与 2t3−t42t^3-t^4 一致,书中写法给出 0.08694。
  • InvertSmoothStepSample() 代码缺陷:其中的 lambda P = [&](Float x){ return 2*Pow<3>(t) - Pow<4>(t); } 忽略参数、始终使用外层的 tt,所以 P(x)=P(a)=P(b)P(x)=P(a)=P(b),返回 (P(x)−P(a))/(P(b)−P(a))=0/0(P(x)-P(a))/(P(b)-P(a))=0/0。笔者于 2026-10-13 PT 查看 GitHub 上 pbrt-v4 master 的 src/pbrt/util/sampling.h,第 305–309 行仍是这样。由于 P(a)=0P(a)=0、P(b)=1P(b)=1,正确实现就是直接返回 2t3−t42t^3-t^4。
  • A.3 说"效率取决于预期被拒绝样本的比例……即圆盘面积除以正方形面积 π/4≈78.5%\pi/4\approx78.5\%",π/4\pi/4 是接受率,拒绝率约 21.5%。
  • 在线版 A.1 开头有一处脚注渲染错乱(只剩 "8.1.3.")。延伸阅读中 "rectangluar" 为笔误。
  • 在线版公式编号塌缩:附录 A 的 11 个带编号公式(A.4 的指数 CDF、指数采样距离、高斯、logistic、区间 PDF、截断 logistic CDF、分段积分,A.5 的二维离散边缘/条件密度、均匀半球采样、求和面积表定义)在 HTML 中的 eqno 全部显示为 "(A.17)",正文中 "用 Equation (A.17) 计算条件密度……再用 Equation (A.17) 计算边缘密度" 之类的引用因此无法区分(附录 B 的 5 个公式同样全部标为 "(B.18)")。这是在线版的渲染/编号缺陷,阅读时应按锚点名(如 eq:2d-discrete-marginal-density)对应。(据 pbr-book.org/4ed 附录 A、B 页面 HTML 源码核对,2026-10-13)
  1. PBRT 4e source excerpt: chapter 02 (Monte Carlo Integration)
  2. Pharr, Jakob, Humphreys《Physically Based Rendering: From Theory to Implementation》第 4 版(MIT Press, 2023)第 2 章 2.1.1、2.3、2.4 节,pbr-book.org/4ed/Monte_Carlo_Integration
  3. PBRT 4e source excerpt: chapter 09 (Reflection Models)
  4. Pharr, Jakob, Humphreys《Physically Based Rendering: From Theory to Implementation》第 4 版(MIT Press, 2023)第 9 章 9.1–9.9 节,pbr-book.org/4ed/Reflection_Models
  5. PBRT 4e source excerpt: chapter A (Sampling Algorithms)
  6. Pharr, Jakob, Humphreys《Physically Based Rendering: From Theory to Implementation》第 4 版(MIT Press, 2023)附录 A A.3–A.5 节,pbr-book.org/4ed/Sampling_Algorithms

相关页面

图形学蒙特卡洛积分与重要性采样Monte Carlo Integration & Importance Sampling渲染方程里的半球积分没有闭式解,只能数值积分。蒙特卡洛积分在定义域里随机取样、按概率密度加权求平均,期望值正好等于积分真值,误差随样本数 N 按 1/\sqrt{N} 下降,而且与积分维数无关,所以成了光线追踪类渲染的数学基础。降低误差的主要手段是让采样分布接近被积函数的形状,也就是重要性采样(GEA4 卷 II 12.6.2、12.6.4)。游戏数学伪随机数生成Pseudorandom Number Generation游戏引擎到处要用随机数,但随机数生成器 (RNG) 并不真正随机:它只是给出一个复杂但完全确定、预先定义的序列,因此严格说应叫伪随机数生成器 (PRNG)。好坏取决于周期(多久重复)和能否通过各种公认的随机性测试。GEA 介绍了线性同余、梅森旋转、Marsaglia 的 Mother-of-All / Xorshift / KISS99,以及 PCG。图形学微表面理论Microfacet Theory微表面理论把小于像素的微几何建模为大量平坦微面元,用法线分布函数 (NDF) D(\mathbf{m}) 描述其朝向统计,用遮蔽函数 G1 和遮蔽-阴影函数 G2 描述可见性,并据此推导宏观 BRDF。镜面反射时每个微面元是完美菲涅耳镜,积分退化为在半向量处求值,得到 FG2D/(4|\mathbf{n}\cdot\mathbf{l}||\mathbf{n}\cdot\mathbf{v}|)。GGX 分布配合高度相关的 Smith G2 是当今影视和游戏最常用的组合;该框架忽略微面元间的多次反射,可用补偿项弥补。本页对应 RTR4 9.6–9.8 节。图形学光谱渲染Spectral Rendering光谱渲染 (Spectral Rendering) 在光传输中直接处理波长,而不是 RGB 三元组。pbrt 第 4 版在每条相机光线上随机采样少数几个波长(默认 4 个),把光谱积分并入渲染本来就在做的蒙特卡洛积分;最后用颜色匹配函数估计像素的 XYZ/RGB。输入端的 RGB 颜色则通过"sigmoid 二次多项式"转换成平滑光谱。本页按 PBRT 4e 4.5、4.6.4–4.6.6 节整理。游戏数学形状采样Shape Sampling把形状当作面光源时,需要在形状上采样点。最简单的是按面积均匀采样再把 PDF 换算成立体角;更好的是只在参考点看得到的立体角内均匀采样,消掉 1/r^2 和背面带来的方差。本页按 PBRT 第 4 版第 6 章整理各种形状的采样公式及其推导要点。图形学测量 BRDF 与数据驱动反射模型Measured BRDFs & Data-Driven Reflectance测量 BRDF 用实验室测得的真实材质数据代替解析模型,适合虹彩漆、织物、珠光膜等解析模型拟合不好的材质。难点是四维 BRDF 的维数灾难;PBRT 4e 的 MeasuredBxDF(Dupuy 与 Jakob 2018)把可见法线采样当作参数化,只需较稀疏的测量就能插值。本页对应 PBRT 4e 9.8 节及其延伸阅读。游戏数学零散射与透射率估计Null Scattering & Transmittance Estimation透射率 Tr=e^{-\tau} 在非均匀介质里没有解析解。直接估计光学厚度 \tau 再取指数会因 Jensen 不等式产生偏差;零散射 (null scattering) 用一个常数上界(majorant)\sigma{maj} 把介质"填满"成均匀介质,得到可无偏采样的积分方程,由此推出 next-flight、比率追踪 (ratio tracking) 和 delta 追踪 (delta tracking) 等估计器。本页对应 PBRT 4e 11.2 与 11.4.3。游戏数学别名法与水塘采样Alias Method & Reservoir Sampling从 n 个离散结果中按概率 pi 采样,线性扫描 CDF 每次 O(n),二分查找 O(\log n);别名法 (alias method) 预处理 O(n) 后每次采样 O(1):均匀选一个桶,再以桶内概率 qi 决定取桶本身的结果还是它唯一的"别名"。水塘采样 (reservoir sampling) 则不需要预先知道结果个数、也不需要把所有候选存在内存里:候选逐个流过,每个以"自身权重 / 已见权重和"的概率替换水塘中的样本,最终保留的样本恰好服从全部候选的分布;两个水塘还可以无偏地合并。前者用于按功率选光源、环境贴图采样等,后者是 ReSTIR 等方法的基础。图形学基于图像的光照Image-Based Lighting用纹理数据(通常是相机拍摄的 360° HDR 全景)照明场景称为基于图像的光照。实时引擎常用预滤波的高光立方体贴图(配合 split-sum 近似)处理高光,用辐照度环境贴图或球谐系数处理漫反射。它们只依赖少量光照图元而不需要知道场景其他表面,因此仍属局部光照。图形学纹理过滤与 MipmapTexture Filtering & Mipmap纹理在屏幕上被放大时需要插值,被缩小时一个像素覆盖许多纹素,必须预先滤波才能避免混叠。放大用最近邻、双线性或双三次;缩小的主流方案是 mipmap + 三线性插值,斜视角下用各向异性过滤减少过度模糊。注意:过滤纹理值只在输入与着色结果线性相关时等价于过滤最终颜色。游戏数学莫顿码与空间填充曲线Morton Codes & Space-Filling Curves莫顿码 (Morton code) 把多维整数坐标的二进制位交错排成一个整数,得到沿"Z 形"路径(Z 序,z-order)访问空间的一维顺序:二维/三维中相近的点在这条曲线上通常也相近。图形学用它做线性 BVH 构建(按莫顿码排序代替空间划分)、纹理内存的 swizzle 布局(提高缓存命中),以及各种空间哈希。

输入关键词开始搜索

滚轮或双指缩放 · 拖动平移 · 双击放大 / 还原