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估计量只根据无偏权重调整样本亮度, 控制变量估计量包含多个通道, 可有效降低复杂色彩光照或光谱渲染的方差.
Histogram Stratification
#
设X∼p, p覆盖f的支撑集, 贡献C=f(X)/p(X)=f(X)WX可积, C的CDF为:
FC(c)=P(C≤c)=∫{x∈Ωx:p(x)>0,f(x)/p(x)≤c}p(x)dx定义C的广义逆用于逆变换法:
FC−1(u)=inf{c∈R:FC(c)≥u},u∈(0,1)令U∼U(0,1), 此时可得:
Ix=∫Ωxf(x)dx=E[C]=∫01FC−1(u)du=E[FC−1(U)]令有限候选S={(Xi,Wi)}i=1N, Ci=f(Xi)Wi, 定义抽样函数:
GS(u)=C1+⌊Nu⌋,u∈[0,1)取独立于候选的均匀随机数U, 每个候选对应长度1/N的区间:
E[GS(U)∣S]E[GS(U)]=∫01GS(u)du=N1i=1∑NCi=E[E[GS(U)∣S]]=N1i=1∑NE[Ci]=Ix按Ci从小到大排序得置换π, 将列表重排后, 抽样函数成为经验逆CDF, 不影响无偏性:
GS(u)=Cπ(1+⌊Nu⌋)取独立于候选的T∼U[0,1/4], 构造四个相关样本, Uk在对应的41区间内均匀分布:
U1=T,U2=21−T,U3=21+T,U4=1−T给定候选S, 记Zk=GS(Uk), 平均估计量为⟨Ix⟩anti=41∑k=14Zk. 由四层等宽可得:
E[Zk∣S]=4∫(k−1)/4k/4GS(u)duE[⟨Ix⟩anti∣S]=E[41k=1∑4ZkS]=41k=1∑4E[Zk∣S]=N1i=1∑NCi条件方差展开为:
Var[⟨Ix⟩anti∣S]=161(k=1∑4Var[Zk∣S]+2i<j∑Cov[Zi,Zj∣S])令zk(t)=GS(Uk(t)), L=41, T在[0,L]上均匀分布, 由协方差定义得:
Cov[Zi,Zj∣S]=L1∫0Lzi(t)zj(t)dt−L21(∫0Lzi(t)dt)(∫0Lzj(t)dt)=L21∫0L∫0L(zi(t)zj(t)−zi(t)zj(s))dsdt=2L21∫0L∫0L(zi(t)zj(t)+zi(s)zj(s)−zi(t)zj(s)−zi(s)zj(t))dsdt=2L21∫0L∫0L(zi(t)−zi(s))(zj(t)−zj(s))dsdt排序后的GS使z1,z3单调不减, z2,z4单调不增, 因此:
Cov[Zi,Zj∣S]Cov[Zi,Zj∣S]≤0,≥0,(i,j)∈{(1,2),(1,4),(2,3),(3,4)}(i,j)∈{(1,3),(2,4)}与独立均匀样本比较, 四样本平均的条件方差为:
Var[GS(U)∣S]=41k=1∑4Var[Zk∣S]+(E[Zk∣S]−N1i=1∑NCi)2Var[⟨Ix⟩iid∣S]=161k=1∑4Var[Zk∣S]+(E[Zk∣S]−N1i=1∑NCi)2Var[⟨Ix⟩anti∣S]−Var[⟨Ix⟩iid∣S]=1612i<j∑Cov[Zi,Zj∣S]−k=1∑4(E[Zk∣S]−N1i=1∑NCi)2以上均固定候选集合, 但S本身也需要随机抽样. 令⟨Ix⟩表示任意一种四样本平均估计量, 基于全方差公式可估计方差, 候选抽样方式直接影响第二项, 得到候选后再执行RIS:
Var[⟨Ix⟩]=Var[N1i=1∑NCi]+E[Var[⟨Ix⟩∣S]]
Russian Roulette
#
Zero Variance
#
令ci=∑j>iβjLe(pj), 由Li=Lr+Le可得:
E[ci∣p0…i]=E[βi+1Li(pi+1→pi)p0…i]=βiLr(pi→pi−1)零方差(zero-variance)抽样密度pzv即前文条件分布, 抽样密度正比于方向贡献:
pzv(pi+1∣pi−1,pi)=Lr(pi→pi−1)f(pi+1→pi→pi−1)G(pi↔pi+1)Li(pi+1→pi)以pzv抽样得pi+1, 代入上式形式如下. 光源不再弹射, 故到达光源顶点时贡献为像素真值.
E[ci∣p0…i]=βiLr(pi→pi−1)=βipzv(pi+1∣pi−1,pi)f(pi+1→pi→pi−1)G(pi↔pi+1)Li(pi+1→pi)=βi+1Li(pi+1→pi)=βi+1Le(pi+1)+E[ci+1∣p0…i+1]由前文可得fGLi=Lrpzv, 任意抽样密度p下方差如下, 可见p=pzv时方差最小.
Var[pfGLi]=∫A(pfGLi−Lr)2pdpi+1=Lr2∫A(ppzv−1)2pdpi+1=Lr2∫Ap(pzv−p)2dpi+1⟨Li⟩为后缀估计, 由方差定义得E[⟨Li⟩2∣pi+1]=Li2(pi+1→pi)+Var[⟨Li⟩∣pi+1]. 分裂为n=⌊q⌋条后缀, 再以概率q−n的Bernoulli试验决定最后一次分裂, 每条权重乘q1, q<1时退化为轮盘赌. 记路径数N=n+B, B∼Bernoulli(q−n), E[N]=q, E[N2]=q2+(q−n)(n+1−q). 估计量⟨Lr⟩q=pfGq1∑k=1N⟨Li⟩k, 各后缀独立且与N独立, 此时可得:
Var[⟨Lr⟩q]=E[⟨Lr⟩q2]−E[⟨Lr⟩q]2=E[E[⟨Lr⟩q2∣pi+1]]−Lr2=E(pfG)2q2E[(∑k=1N⟨Li⟩k)2pi+1]−Lr2=E[(pfG)2q2E[NVar[⟨Li⟩∣pi+1]+N2Li2pi+1]]−Lr2=E[(pfG)2q2qVar[⟨Li⟩∣pi+1]+(q2+(q−n)(n+1−q))Li2]−Lr2=Var[pfGLi]+E[(pfG)2(qVar[⟨Li⟩∣pi+1]+q2(q−n)(n+1−q)Li2)]记pi处相对方差ri=Lr2Var[⟨Lr⟩q], 设pi+1非光源, 由Li(pi+1→pi)=Lr(pi+1→pi)得后缀相对方差ri+1=Li2Var[⟨Li⟩∣pi+1]. 记w=ppzv=pLrfGLi, 代入方差可得:
Var[⟨Lr⟩q]=Lr2(∫Ap(pzv−p)2dpi+1+E[w2(qri+1+q2(q−n)(n+1−q))])第一项与q无关; 取整项分情况讨论, 均不超过41与q, 因此第二项不超过E[qw2(ri+1+1)].
(q−n)(n+1−q)={q(1−q)≤min(41,q),(q−n)(n+1−q)≤41≤q,q<1q≥1预算E[q]=1下应用Cauchy-Schwarz不等式, 等号成立当且仅当qwri+1+1∝q即wri+1+1=cq, 由E[q]=1得c=E[wri+1+1], 此时上界最小:
E[wri+1+1]2=E[qwri+1+1q]2≤E[qw2(ri+1+1)]E[q]=E[qw2(ri+1+1)]此时可得最优的q:
q∗=E[wri+1+1]wri+1+1
ADRR
#
假设ri+1为常数, 此时可以约去ri+1+1, 由E[w]=∫Apzvdpi+1=1可得q∗=w. 令q为期望贡献与像素真值之比, 此时可得最优的q:
q=Iβi+1Lr(pi+1→pi)=pLr(pi→pi−1)fGLi(pi+1→pi)=ppzv=w记χ2=∫Ap(pzv−p)2dpi+1, 代入q=w得:
Var[⟨Lr⟩q]=Var[Lrq]+E[Lr2q2(qri+1+q2(q−n)(n+1−q))]=Lr2(∫Ap(pzv−p)2dpi+1+E[(q−n)(n+1−q)]+∫Apzvri+1dpi+1)=Lr2(χ2+ri+1+E[(q−n)(n+1−q)])q≡1时形式如下:
Var[⟨Lr⟩1]=Var[pfGLi]+E[(pfG)2Var[⟨Li⟩∣pi+1]]=Lr2χ2+E[(pfGLi)2ri+1]=Lr2(χ2+ri+1E[w2])=Lr2(χ2+ri+1∫Appzv2dpi+1)=Lr2(χ2+ri+1∫Ap(pzv−p)2+2pzvp−p2dpi+1)=Lr2(χ2+ri+1(1+χ2))记{w}为w的小数部分, 任意w≥0有{w}(1−{w})≤∣w−1∣, 此时可得:
E[(q−n)(n+1−q)]=E[{w}(1−{w})]≤E[∣w−1∣]≤E[(w−1)2]=χ因此ri+1χ2≥min(41,χ)时轮盘赌更优, 后缀噪声越大, p偏离pzv越远, 收益越大.
Variable Rate Shading
#
DOOM: The Dark Ages
#
基于可见性缓冲分发每个材质的绘制调用, 材质序号作为深度比较是否相等. 材质无空间连贯性, Hi-Z无法剔除, 性能与Forward+持平.
DOOM将多种相似材质打包为单个着色器, 为每个着色器分配隐式命令缓冲. 计算分发基于图块判断块内像素需要调用的着色器和材质, 以子组为单位原子填充各着色器的命令缓冲, 即根据子组大小对齐某种材质的像素数量.
对于不支持隐式命令缓冲的平台, 对每种着色器根据每个图块所请求的工作组大小分桶, 增加一个维度用于标记图块序号. 由于桶的数量已知, CPU上为每个桶分别分发命令即可.
依据亮度梯度确定着色率, 填充命令缓冲时只统计主像素并附加复制位. 若判断为四元组只渲染0号样本, 再添加更严格的判断, 以避免体积雾等效果的抖动失效.
Call of Duty: Modern Warfare
#
基于MSAA实现软件VRS, 颜色附件宽高减半并开启4xMSAA. 深度预通道以像素频率着色, 插值中心为0号样本, 基于梯度还原其余样本的重心坐标, 执行透明度测试以提升植被渲染效果并修改覆盖掩码.
着色率表示为2位, 由于0号样本总是着色, 只需存储水平, 垂直或其余三个像素是否被着色. 每帧轮换0号像素, 使用覆盖掩码更新着色率, 历史4帧着色率存储为8位, 对其求或以利用时域统计的着色频率, 例如4帧都只着色0号样本, 当前帧保持即可.
Forward+绘制逐样本着色, 着色率通过修改模板缓冲剔除低着色率区域. 计算着色器缺少硬件子组打包, 以图块为单位将存活样本按平面紧凑打包以降低分歧.
Call of Duty: Modern Warfare 4
#
基于A-SVGF时间梯度调整采样率. 将屏幕以s×s分层, 每层选一个历史帧表面样本Gi−1, 前向投影/重放到当前帧得Gi−1. 梯度与归一化因子定义如下:
δΔ=fi(Gi−1,ξi−1)−fi−1(Gi−1,ξi−1)=max(fi(Gi−1,ξi−1),fi−1(Gi−1,ξi−1))滤波并归一化得历史权重λ, 调整全局α为混合系数αi, 取3×3邻域最大值弥补重建误差:
λ=min(1,Δ^∣δ^∣),αi=(1−λ)α+λN为历史样本数, Nt=αi1为可容忍的历史样本数, Nmax=α1为目标样本数, 此时可计算被保留的历史样本数N′:
N′=min(N,Nt−1)历史未满时超采样, 历史已满时估计方差并降采样. ρ为依据方差调整的分段常数, 决定降采样追踪概率. 请求样本数为连续实数, 小数部分随机抽样光线, 样本数如下:
n={min(Nmax−N′,nmax),ρ(σ2),N′<Nmax−1N′=Nmax−1对n分桶统计全屏光线, 档位为641,631,⋯,21,1,2,⋯,16, 选桶流程如下:
rb(n)={⌊n⌋,1/⌈1/n⌉,n≥1n<1超出预算时自顶向下合并, 最高非空桶并入下一档直至不超过预算, 反之则自底向上合并. 末次合并时整档调整粒度过粗, 对桶内像素统一降低/提升样本数以刚好满足预算.