Path Guiding
#
路径引导基于已有样本估计场景贡献, 通过MIS选择BSDF或PG, 结果无偏.
ReSTIR PG
#
局部路径引导拟合的理想分布为后缀贡献:
p(ωi∣p,ωo)∝f(p,ωo,ωi)Li(p,ωi)∣cosθ∣ReSTIR PT将路径贡献作为目标分布p^(x)=f(x), 记A为场景表面, We为传感器响应, hx为像素x的重建滤波器, Le(pn)为末端顶点自发光, 路径贡献函数为:
f(x)=We(p0→p1)G(p0↔p1)i=1∏n−1f(pi+1→pi→pi−1)G(pi↔pi+1)Le(pn)定义逐顶点的传输因子T并简化上式:
T(pi)={f(pi+1→pi→pi−1)G(pi↔pi+1),We(p0→p1)G(p0↔p1)f(p2→p1→p0)G(p1↔p2),i>1i=1f([p0,…,pn])=i=1∏n−1T(pi) Le(pn)记像素x的路径空间为Ωx:
Cx=∫Ωxf(x)dx1全体像素构成对整个路径空间Ω=⋃n=2∞An的分层抽样, 其密度为各像素分布的混合:
p(x)=Φ(p0,p1)f(x),Φ(p0,p1)=N1x=1∑NCx[hx(p0→p1)>0]记dpa:b=dpa⋯dpb, 约定a>b时积分退化为被积函数本身:
p(pi+1∣p0,…,pi)=p(p0,…,pi)p(p0,…,pi+1)=∑n=i+1∞∫An−ip(x)dpi+1:n∑n=i+1∞∫An−i−1p(x)dpi+2:nΦ只依赖p0与p1, 条件i≥1已固定二者, 同时∏t=1i−1T(pt)与积分变量无关, 一并约去:
p(pi+1∣p0,…,pi)=∑n=i+1∞∫An−i∏t=1n−1T(pt)Le(pn)dpi+1:n∑n=i+1∞∫An−i−1∏t=1n−1T(pt)Le(pn)dpi+2:n=∑n=i+1∞∫An−i∏t=in−1T(pt)Le(pn)dpi+1:nT(pi)∑n=i+1∞∫An−i−1∏t=i+1n−1T(pt)Le(pn)dpi+2:n分子中T(pi)之后的求和即入射辐亮度:
Li(pi+1→pi)=n=i+1∑∞∫An−i−1t=i+1∏n−1T(pt)Le(pn)dpi+2:n分母相比入射辐亮度少了自发光:
Li(pi→pi−1)−Le(pi→pi−1)=n=i+1∑∞∫An−it=i∏n−1T(pt)Le(pn)dpi+1:n分母只依赖pi−1与pi, 相对pi+1为常数, 因此p0,…,pi−2对条件分布没有影响:
p(pi+1∣pi−1,pi)∝f(pi+1→pi→pi−1)G(pi↔pi+1)Li(pi+1→pi)转立体角测度结果如下, 即服从路径贡献分布的路径, 局部弹射方向的条件分布为理想的局部引导分布. ReSTIR样本只是无偏权重, 初始样本质量差时相关性较强.
p(ωi∣pi,ωo)∝f(pi,ωo,ωi)Li(pi,ωi)∣cosθ∣p(ωi∣p,ωo)需要拟合7D模型因此实时不可行. 划分场景为空间网格, 在格内拟合求平均以消去p, 降维到4D的p(ωi∣ωo). 漫反射BSDF为常数, 光滑镜面更依赖BSDF抽样, 因此通过积分消去ωo后, 只有粗糙镜面效果较差, 可进一步降维到2D:
p(ωi)=∫H2p(ωi∣ωo)p(ωo)dωo∝Li(ωi)∣cosθ∣∫H2f(ωo,ωi)p(ωo)dωop(ωi)以vMF拟合, μk∈S2为单位平均方向, κk≥0为集中度, ∑kπk=1:
V(ω;Θ)=k=1∑Kπkv(ω;μk,κk)=k=1∑K4πsinhκκeκμ⋅ω展开sinh可得vMF随着κ增长而收窄集中于μ的波瓣:
v(ω;μ,κ)=2π(1−e−2κ)κe−κ(1−μ⋅ω)≈2πκe−κ(1−μ⋅ω)以EM迭代求解, E步固定参数, 计算责任:
γk(ωn)=∑j=1Kπjv(ωn;μj,κj)πkv(ωn;μk,κk)M步固定责任, 更新参数, ϵ=0.01防止分量权重归零:
wk=n=1∑Nγk(ωn),rk=n=1∑Nγk(ωn)ωnπk=∑j=1K(wj+ϵ)wk+ϵ,μk=∥rk∥rk,Rˉk=wk∥rk∥方向越集中Rˉk∈[0,1]越接近1, 由其反解κk:
κk≈1−Rˉk2Rˉk(3−Rˉk2)ReSTIR PT无偏权重包含足够信息, 不复用历史分布, 记录最终路径所有顶点以更新引导.
VXPG
#
将第二次弹射顶点的NEE采样结果注入体素, 估计漫反射辐照度:
E(vi)=N1x2∈vi∑Ll(x2)以32×32图块中心像素为矩心, 单次SLIC聚类计算超像素, p, n为世界空间位置和法线, u为像素坐标, wu为超参数, 距离函数如下:
distp(x,y)=∣px−py∣2+wu∣ux−uy∣2+{0,1000000, if nx⋅ny>0.1 otherwise在屏幕空间分层抽样128条路径, 所有体素向所有样本路径的x2发射光线以验证可见性, 得128位位域R, 执行K-means聚类. ⊕为异或, wE为超参数, 距离函数如下:
distv(x,y)=countbits(Rx⊕Ry)+wE∣Ex−Ey∣聚类后依据超像素与超体素组成的元组分桶, 从桶中抽取32个路径样本统计平均路径通量:
Tˉ(p′,v′)=N1i=1∑Nf(p2→p1→p0)G(p1↔p2)依据平均路径通量重要性抽样得超像素与超体素, 再抽样桶中的体素. 光栅化执行体素化, 得体素中所有三角形的包围盒, A为包围盒最大面的面积, 抽样权重如下:
ϕ(vi)=E(vi)A(vi)得到体素后, 使用球面三角形抽样确定与包围盒可见面的相交点, 发射光线求交.
RCPG
#
基于辐射度级联摆放探针, 使用八面体纹理存储辐射度, 转为立体角的Jacobian如下:
∣J∣=(1+2min(1−∣u∣−∣v∣,0)−2∣u∣−2∣v∣+2∣uv∣+2u2+2v2)−23贴近物体的探针命中距离短, 需要的采样率低, 反之采样率高. 不同LOD的探针对应不同的距离区间, 基于区间远端与探针体素内嵌球形成的锥体, 可估计角采样Nyquist频率. 令w为体素边长, d为与体素中心的距离, c为超参数, 采样频率估计如下:
θmin=2arcsin2dmaxw,fmax=θmin1<2fs,dmax=2sinfs1cw所有探针纹素每帧更新, 只追踪距离区间, 命中确定二值透明. 下采样父级探针, 做透明度混合填充区间外辐射度. 探针通过指数混合累积历史, 命中时查询历史探针, 存储无限弹射辐射度. 每帧对场景执行体素化, 剔除空体素对应的探针.
遍历表面对应的LOD 0探针的纹素, 作为解析面光通过LTC计算贡献, 执行功率重要性抽样, 逐级查询父级纹素LTC并抽样. 令v为几何顶点, 面光辐照度如下:
E=2π1i=1∑marccos(vi⋅vj)∣vi×vj∣vi×vj⋅n,j=(i+1)modm使用三参数LTC以减少计算量:
M−1=a00010b0c,a,b,c∈[0,1]
MCPG
#
基于混合vMF估计分布, 链状态为单个波瓣, 存于多分辨率哈希网格, 同时有均匀静态网格保证LOD边界的状态交换. 基于三线性权重抽取Nmc个候选顶点, 以亮度为权重执行RIS.
fmc为当前样本入射亮度估计, 路径尾部查询辐照度缓存, 接受概率如下, 分母可加速预热:
paccept=min(summc/Nmcfmc,1)以最大似然估计更新状态, 混合因子α=max(N1,αmin). 更新后抽样写回位置, 读写两侧的随机访问使状态扩散. 转移步骤不满足细致平衡, 稳态分布不保证收敛到目标分布.
NASGPG
#
归一化各向异性球面高斯(NASG)基于正交坐标系[x,y,z]定义, z为波瓣轴, λ为锐度, a为各向异性, a=0时退化为球面高斯. 记u=2v⋅z+1, e=1−(v⋅z)2a(v⋅x)2, 形式如下:
G(v;[x,y,z],λ,a)=⎩⎨⎧exp(2λu1+e−2λ)ue,1,0, v=±z v=z v=−zue为球坐标换元的Jacobian, 因此NASG有闭式积分, 可归一化:
K=∫S2G(v;[x,y,z],λ,a)dω=λ1+a2π(1−e−2λ)正交坐标系以欧拉角θ,ϕ,τ参数化, y=z×x, 单个NASG分量只需cosθ, sinϕ, cosϕ, sinτ, cosτ, λ, a七个标量表示:
z=cosϕsinθsinϕsinθcosθ,x=cosθcosϕcosτ−sinϕsinτcosθsinϕcosτ+cosϕsinτ−sinθcosτ神经网络为4层128宽无偏置MLP, 输入为p, ωo, n, p归一化后应用one-blob编码, 即分为k个等宽区间, 每个区间对应σ=k1的高斯核, 执行积分:
ob(x)i=∫ki−1ki2πσ1e−2σ2(t−x)2dt,i=1,…,k输出为8N+1维, N为NASG分量数量, 8为NASG7个标量与其权重A, 1为MIS抽样概率c. 引导分布为归一化分量的混合, 与BSDF按c做MIS:
q^(ωi)=cq(ωi)+(1−c)pf(ωi)=ck=1∑NAkKkGk(ωi)+(1−c)pf(ωi)以KL散度衡量q与目标分布p(ωi)=Cf(p,ωo,ωi)Li(p,ωi)∣cosθ∣的差异, 令γ为NASG参数, p与γ无关, 梯度如下:
∇γDKL(p∥q)=∇γ∫S2p(ωi)(logp(ωi)−logq(ωi;γ))dωi=−∫S2p(ωi)∇γlogq(ωi;γ)dωi基于q^得单样本估计. 归一化常数C未知, 但只对梯度整体缩放, Adam归一化矩后可约去:
∇γDKL(p∥q)≈−q^(ωi)p(ωi)∇γlogq(ωi;γ)DKL(p∥q)与c无关, DKL(p∥q^)可对c求导, 但只优化q^时c会倾向0, 因为初始q质量较差. 因此以DKL(p∥q)为主项保证q持续更新, 混入DKL(p∥q^)以学习c, e=0.2:
loss=eDKL(p∥q^)+(1−e)DKL(p∥q)
NPMPG
#
使用神经网络隐式表示场景, 以Φ为可训练参数, 连续地将位置映射为vMF混合参数:
NPM(x∣Φ)=Θ^(x),V(ωi∣Θ^(x))∝Li(x,ωi)使用可训练多分辨率空间编码处理高频, 定义L级均匀LOD网格, 体素存F维特征, 查询时拼接各层的三线性插值结果得到G(x):
G(x∣ΦE)=l=1⨁Ltrilinear(x,Vl[x])MLP为3层64宽ReLU, 输出K个vMF. κ′,λ′,θ′,ϕ′为原始输出, (θ,ϕ)为μ的归一化球坐标:
κi=exp(κi′),λi=∑j=1Kexp(λj′)exp(λi′)θi=1+exp(−θi′)1,ϕi=1+exp(−ϕi′)1以KL散度为目标做小批量随机梯度下降. 令D∝Li为目标分布, 路径顶点更新附近体素, p~为BSDF与引导分布组合的实际抽样分布, 梯度估计如下:
∇ΘDKL(D∥V;Θ)=∇Θ∫ΩD(ω)logV(ω∣Θ^)D(ω)dω≈∇ΘN1j=1∑Np~(ωj∣Θ^)D(ωj)logV(ωj∣Θ^)D(ωj)=−N1j=1∑Np~(ωj∣Θ^)V(ωj∣Θ^)D(ωj)∇ΘV(ωj∣Θ^)学习完整被积函数时额外输入ωo, 目标分布改为fsLicosθi, 余弦项以固定vMF波瓣近似. n与粗糙度r作为辅助特征输入, ωo与n使用球谐编码.
Radiance Cache
#
辐射度缓存在探针中存储辐射度, 命中后直接查询缓存, 因此有偏.
ORCA
#
根据BSDF抽样概率和粗糙度决定舍弃概率, 根据预算归一化以避免光滑场景光线超支:
si′=∑i=1Nsibsi稀疏光线完整追踪, 根据第二次弹射顶点信息计算hash, 更新最细LOD体素的累积辐亮度, LOD与相机距离相关. 下采样以更新LOD体素, 其余光线单次弹射并查询缓存, 模拟重连接. 只用本帧数据, 不做时域累积.
SHARC
#
依据世界空间顶点和LOD计算hash, 因此跨帧hash一致, 体素辐亮度逐帧累积.
NRC
#
单个MLP缓存散射辐亮度Ls(x,ω), 路径足迹足够大时误差被模糊, 令p为BSDF抽样概率, θ1为主顶点处视线与法线夹角, c=0.01, 路径足迹定义如下:
a(x1⋯xn)=(i=2∑np(ωi∣xi−1,ω)∣cosθi∣∥xi−1−xi∥2)2a0=4πcosθ1∥x0−x1∥2,a>ca0屏幕分块后每块抽样一条路径更新缓存, 高学习率与每帧多步导致闪烁, 因此推理时使用权重的指数移动平均, α=0.99, ηt修正初期偏差, 不反馈到训练:
Wˉt=ηt1−αWt+αηt−1Wˉt−1,ηt=1−αtMLP为7层64宽无偏置, 输出RGB. ω, n转球坐标, 与1−e−r一同做4区间one-blob编码, 漫反射与镜面反射率α, β直接输入. 位置微小变化引起辐亮度剧变, 改用频率编码:
freq(x)=(sin(20πx),sin(21πx),…,sin(211πx))MLP输出乘α+β得到近似出射辐射度. 由于Ls为无偏估计量, 使用相对L2损失保证梯度无偏, sg为停止梯度, 损失函数如下:
L2(Ls,L^s)=sg(L^s)2+ϵ(Ls−L^s)2
Markov Chain
#
Metropolis-Hastings
#
令xk为顶点数为k的路径, pi为Xi的密度, 转移函数K(x→y)为x转移至y的概率密度, 满足∑k=1∞∫ykK(x→yk)dyk=1, Markov链的演化如下:
pi(x)=k=1∑∞∫ykK(yk→x)pi−1(yk)dyk稳态分布(stationary distribution)p∞为不动点即pi=pi−1. Metropolis-Hastings以提议密度T(x→y)生成候选, 以接受概率a(x→y)决定是否接受:
pi(x)=pi−1(x)(1−k=1∑∞∫ykT(x→yk)a(x→yk)dyk)+k=1∑∞∫ykpi−1(yk)T(yk→x)a(yk→x)dyk给定目标分布p^, 细致平衡(detailed balance)条件如下:
p^(x)T(x→y)a(x→y)=p^(y)T(y→x)a(y→x)归一化常数∥p^∥=∑k=1∞∫xkp^(xk)dxk, 设pi−1=∥p^∥p^, 代入演化得∥p^∥p^为不动点:
pi(x)=pi−1(x)−∥p^∥1k=1∑∞∫yk(p^(x)T(x→yk)a(x→yk)−p^(yk)T(yk→x)a(yk→x))dyk=pi−1(x)按如下方式定义a, 使得较大的p^(x)T(x→y)总是被接受:
a(x→y)=min(1,p^(x)T(x→y)p^(y)T(y→x))不动点不蕴含唯一性, 例如取Ω={1,2,3}, 转移矩阵行为起点列为终点:
K=2121021210001令p0=(α,β,γ), 一步后即为不动点, 可见不动点与初始状态相关:
p1=(2α+β,2α+β,γ)从任意x出发均能在有限步内到达任何p^>0的区域则不动点唯一. 若满足细致平衡, 已知p0=∥p^∥p^不动点为∥p^∥p^, 因此任意初值均收敛到它:
i→∞limpi=∥p^∥p^
Metropolis Light Transport
#
基于BDPT实现MLT, 令p0为BDPT的PDF, 初始权重W0=p0(X0)p^(X0), 变异保持Wi=Wi−1, 记ρi(w,x)为(Wi,Xi)的联合密度, 加权均衡条件(weighted equilibrium condition)如下:
∫Rwρi(w,x)dw=p^(x)i=0时W0由X0确定, ρ0(w,x)=δ(w−p0(x)p^(x))p0(x), 代入直接满足. 变异与W无关, 故ρi与pi的演化相同:
ρi(w,x)=ρi−1(w,x)(1−k=1∑∞∫ykT(x→yk)a(x→yk)dyk)+k=1∑∞∫ykρi−1(w,yk)T(yk→x)a(yk→x)dyk两侧乘w并对w积分, 基于加权均衡条件与细致平衡可得:
∫Rwρi(w,x)dw=p^(x)−k=1∑∞∫yk(p^(x)T(x→yk)a(x→yk)−p^(yk)T(yk→x)a(yk→x))dyk=p^(x)令h为滤波器权重, Ij为像素j的真值, 可验证无偏:
E[Wihj(Xi)]=k=1∑∞∫xk∫Rwhj(xk)ρi(w,xk)dwdxk=k=1∑∞∫xkhj(xk)p^(xk)dxk=Ij
ReSTIR MCMC
#
添加MCMC后的无偏权重如下:
Wi=p^(Xi)p^(Xi−1)Wi−1=p^(Xi)p^(X0)W0归纳证明Wi无偏, 基于GRIS已知W0无偏, 设Wi−1无偏, 记候选Zi−1∼T(Xi−1→⋅):
E[f(Xi)Wi]= = E[(1−a(Xi−1→Zi−1))f(Xi−1)Wi−1]+E[a(Xi−1→Zi−1)f(Zi−1)p^(Zi−1)p^(Xi−1)Wi−1]E[f(Xi−1)Wi−1]+E[f(Zi−1)a(Xi−1→Zi−1)p^(Zi−1)p^(Xi−1)Wi−1]−E[f(Xi−1)a(Xi−1→Zi−1)Wi−1]后两项含候选Zi−1, 消去它才能归纳. Wi−1仅依赖Xi−1, 可从条件期望中作为常数提出:
E[g(Xi−1,Zi−1)Wi−1]=E[E[g(Xi−1,Zi−1)Wi−1∣Fi−1]]=E[Wi−1E[g(Xi−1,Zi−1)∣Fi−1]]=E[(∫Ωg(Xi−1,z)T(Xi−1→z)dz)Wi−1]此时仅与Xi−1有关, 代入即得二重积分:
E[f(Xi)Wi]=∫Ωf(x)dx+∫Ω∫Ωf(z)a(x→z)p^(z)p^(x)T(x→z)dzdx−∫Ω∫Ωf(x)a(x→z)T(x→z)dzdx改写细致平衡, 可抵消后两项, 即估计无偏:
T(x→z)a(x→z)=p^(x)p^(z)T(z→x)a(z→x)变异为对ui−1做高斯扰动, 即j=i时pjy=pjx, 只需变换u{i−1,i,i+1}. p{i+1,i+2}y固定在p{i+1,i+2}x, 以变异后的前缀p{0,…,i}y为条件可得条件密度:
p(p{i+1,i+2}y∣p{0,…,i}y)=δ(pi+1y−pi+1x)δ(pi+2y−pi+2x)a需要提议密度比值, ui−1的密度只与∣ui−1x−ui−1y∣有关, 在比值中约去. u{i,i+1}y的密度为上式的变换p(p{i+1,i+2}y∣p{0,…,i}y)∂u{i,i+1}y∂p{i+1,i+2}y, Dirac delta函数同样约去, 此时可得:
T(x→y)T(y→x)=∂u{i,i+1}y∂p{i+1,i+2}y∂u{i,i+1}x∂p{i+1,i+2}x=∂ω{i,i+1}y∂u{i,i+1}y∂p{i+1,i+2}y∂ω{i,i+1}y∂ω{i,i+1}x∂p{i+1,i+2}x∂u{i,i+1}x∂ω{i,i+1}x=pxi(ωix)G(pix→pi+1x)pyi(ωiy)G(piy→pi+1x)pxi+1(ωi+1x)pyi+1(ωi+1y)=Jx→y重连接后ui−1为隐式, 需要BSDF抽样可逆即由ωi−1x恢复ui−1x. 若以对称核k(ωi−1x,ωi−1y)扰动立体角, 变换到ui−1后为k(ωi−1x,ωi−1y)∂ui−1y∂ωi−1y=pyi−1(ωi−1y)k(ωi−1x,ωi−1y), 此时比值变为:
T(x→y)T(y→x)=pxi−1(ωi−1x)pyi−1(ωi−1y)Jx→ypi+2=pe时, pi+1→pe确定, ui+1不存在, 去除ui+1的变换:
T(x→y)T(y→x)=pxi−1(ωi−1x)pyi−1(ωi−1y)pxi(ωix)G(pix→pi+1x)pyi(ωiy)G(piy→pi+1x)pi+1=pe时, pi→pe确定, ui不存在, 提议只包含ui−1的变换:
T(x→y)T(y→x)=pxi−1(ωi−1x)pyi−1(ωi−1y)
Correlated Sampling
#
Control Variates
#
控制变量引入与f相关的辅助函数h, 积分H=∫Ωxh(x)dx已知, 可改写估计量:
⟨Ix⟩=αH+(f(X)−αh(X))WX图像空间控制变量以相邻像素y为辅助函数, 要求Iy可低方差估计, 估计量如下:
⟨Ix⟩←y=α⟨Iy⟩+⟨Ix−αIy⟩记A=f(X)WX, B=f(Y)WY, 分别无偏估计Ix与Iy, A−αB的方差为:
Var[A−αB]=Var[A]+α2Var[B]−2αCov[A,B]对α求导得最优系数, 令A, B的相关系数为ρ=Var[A]Var[B]Cov[A,B], 代回得方差缩减与ρ相关:
α∗=Var[B]Cov[A,B],Var[A−α∗B]=(1−ρ2)Var[A]若X与Y独立则Cov[A,B]=0, 任意α=0均使方差增加. 对于α⟨Iy⟩+(A−αB), 若⟨Iy⟩为B则退化为A; 若为独立样本B′, 方差为Var[A]+α2(Var[B]+Var[B′]). 两种情况都不低于Var[A], 因此独立样本无法缩减方差, X与Y必须相关.
令Y=Tx→y(X), 场景连续处f(x)≈f(Tx→y(x)), 此时ρ→1.
Ix−αIy=∫Ωxf(x)dx−α∫Ωyf(y)dy=∫Ωx(f(x)−αf(Tx→y(x))Jx→y)dx−α∫Ωy∖Tx→y(Ωx)f(y)dy不保证Tx→y(Ωx)⊇Ωy, 需要MIS:
⟨Ix−αIy⟩=mx(X)(f(X)−αf(Tx→y(X))JX→Y)WX+ my(Y)(f(Ty→x(Y))JY→X−αf(Y))WY
ReSTCV
#
x重投影到y, X为当前帧新样本, ⟨Ix⟩init=f(X)WX. 时域估计为:
⟨Ix⟩=My+MinitMy⟨Ix⟩←y+Minit⟨Ix⟩initN(x)为包含x自身的空域像素集合, 空域估计为:
⟨Ix⟩=∑y∈N(x)My∑y∈N(x)My⟨Ix⟩←yReSTIR PT下⟨Ix⟩←y的参数可从蓄水池获取, GRIS估计量只根据无偏权重调整样本亮度, 控制变量估计量包含多个通道, 可有效降低复杂色彩光照或光谱渲染的方差.