Specular Polynomials
Nanjing University; Southeast University; University of Utah; University of California, Santa Barbara
一句话总结
把”连接两个端点、经过一串镜面顶点的合法光路”这一非线性求解问题,重新表述成关于单一变量的多项式求根问题:通过顶点约束的多项式化、相邻顶点间的有理坐标映射、以及隐变量结式消元,无需牛顿迭代就能确定性地、完整地找出一对端点之间的全部可行镜面路径,从而高质量渲染焦散与闪光。
研究背景
蒙特卡洛渲染在降噪方面已取得巨大进步,但对含”镜面链”(连续多次镜面反射/折射)的光路依然束手无策。焦散(caustics)和闪光(glints)正是这类效果的代表。核心困难在于:满足所有镜面顶点物理约束的光路,其被随机采样命中的概率无限趋近于零,普通(双向)路径追踪几乎无法命中。
现有方案基本依赖多元牛顿求解器:先启发式或随机生成种子路径,再在路径空间里做牛顿迭代(如流形游走 manifold walk)逼近可行路径。这类方法有两个根本缺陷:
- 牛顿迭代不保证收敛,且对种子路径极其敏感。种子选得不好会发散,给最终结果引入显著的偏差或方差。
- 每次迭代最多只能收敛到一个解。当一组三角形之间存在多条可行路径时,会遗漏其余解,造成能量损失。此外,依赖局部连续性的流形游走在小尺度镜面几何、复杂遮挡场景下会失败。
作者的关键洞察是:牛顿法每次只利用单点信息,而当我们考虑一条穿过给定三角形元组(triangle tuple)的路径时,其实掌握了整个区域的完整信息——镜面约束可以用顶点位置和法向写成封闭形式方程。既然如此,能否直接从这些封闭方程里一次性解出全部解?这就是本文的出发点。
核心方法
整体思路分三步:先把镜面约束化为多项式系统,再把多变量系统降到双变量、进而消元为单变量多项式,最后用数值求根器解出全部实根并还原成路径。
1
2
3
4
5
6
7
8
9
10
顶点位置/法向 (三角形元组)
│ ① 系数阶段:多项式化 + 有理坐标映射
▼
双变量镜面多项式 a(u1,v1)=0, b(u1,v1)=0
│ ② 消元阶段:隐变量结式 (Bézout resultant)
▼
单变量镜面多项式 r(v1)=det R(v1)=0
│ ③ 路径阶段:求 v1 → 回代求 u1 → 校验 + 可见性测试
▼
一对端点之间的全部可行镜面路径
问题设定
给定两个固定的”分隔点” \(x_0\)(相机或非镜面着色点)和 \(x_{k+1}\)(光源或另一非镜面点),要在给定的 \(k\) 个三角形元组 \(\mathcal{T}_1,\dots,\mathcal{T}_k\) 上,找出全部由镜面顶点 \((x_1,\dots,x_k)\) 组成的可行镜面链。每个顶点用重心坐标表示,位置和插值法向都是重心坐标的线性函数:
\[x_i = (1-u_i-v_i)\,p_{i,0} + u_i\,p_{i,1} + v_i\,p_{i,2} = P_i u_i\]
\[n_i = (1-u_i-v_i)\,n_{i,0} + u_i\,n_{i,1} + v_i\,n_{i,2} = N_i u_i\]
每个镜面顶点上的理想反射/折射约束用广义半程向量 \(h_i = \eta_i \hat d_i - \eta_{i-1}\hat d_{i-1}\) 表达为:
\[h_i \times n_i = 0, \qquad 1 \le i \le k\]
这是 \(2k\) 个方程、\(2k\) 个未知量的系统,已知只有有限个解。但因为含平方根(归一化)和分式,它本身不是多项式。全文的技术核心就是把它转成多项式、并尽量压低次数与变量数。
顶点约束的多项式化
作者把单顶点约束拆成两部分:
- 共面约束(coplanarity):入射方向、出射方向、法向共面。去掉归一化因子后天然是多项式,可进一步简化为 \((d_{i-1}\times(x_{i+1}-x_{i-1}))\cdot n_i = 0\)。
- 夹角约束(angularity):入射角与反射/折射角满足反射律/斯涅尔定律。这里存在平方根,需要消除。作者给出两种”多项式化”手法:
- 平方形式(square form):把方程投影到任意向量 \(b\) 上,两边平方并乘掉公分母,得到关于重心坐标的多项式。同时适用于反射和折射,但次数较高(折射 6 次、反射 4 次)。因平方会引入多余解,需回代原约束筛除。
- 乘积形式(product form):利用反射的对称性构造两个都带 \(\|d_{i-1}\|\)、\(\|d_i\|\) 因子的方程再相乘,从而消去平方根。仅适用于反射,但次数更低(反射 4 次),即 \((d_{i-1}\cdot n_i)(d_i\cdot t_i) + (d_{i-1}\cdot t_i)(d_i\cdot n_i)=0\)。
两种形式在最终流水线里联合使用。
变量约简:有理坐标映射
直接解 \(2k\) 变量的多元多项式系统在数值上不稳定、计算量巨大,而数学上最可靠的多项式系统求解器是为双变量设计的。作者的关键技巧是把链上所有顶点的重心坐标都递归地用第一个顶点的坐标 \(u_1\) 表示。
具体做法:用 Möller–Trumbore 光线-三角形求交,把反射/折射光线与下一个三角形 \(\mathcal{T}_{i+1}\) 的交点 \(u_{i+1}\) 写成 \(u_i,u_{i-1}\) 的有理式(rational coordinate mapping)。为保持有理性,反射/折射方向也要写成有理形式:反射方向乘上合适因子后即为多项式 \(\tilde d_i = -2(d_{i-1}\cdot n_i)n_i + d_{i-1}n_i^2\);折射方向因含平方根无法精确有理化,作者用分 6 段的一阶有理函数逼近 \(\sqrt{x}\)(误差小于 \(10^{-3}\)),把角度误差控制在阈值内。
把递归映射代入最后一个顶点的约束,就得到只含 \(u_1=(u_1,v_1)\) 的双变量镜面多项式:
\[a(u_1,v_1)=0, \qquad b(u_1,v_1)=0\]
例如单次反射(R)时两个多项式分别为 2 次和 4 次;单次折射(T)为 2 次和 6 次;两次反射(RR)升到 10 次和 16 次,双折射(TT)高达 18 次和 48 次。
消元与求根
- 消元阶段:采用隐变量结式法(hidden variable resultant),选 \(v_1\) 为隐变量,把双变量系统转成”Bézout 结式行列式”这一单变量多项式 \(r(v_1)=\det R(v_1)=0\)。作者用 Chionh 等人的快速算法构造结式矩阵,数值稳定且复杂度低。
- 求根阶段:
- 单次弹射时,用拉普拉斯展开显式得到结式多项式系数,再递归求根——多项式导数的零点划分出单调区间,每个单调区间内至多一个根,用二分法求得(区间长度小于 \(10^{-9}\) 判定收敛)。
- 两次及以上弹射时,行列式矩阵过大,显式展开的指数复杂度不再可行;改为把 \([0,1]\) 均匀分成若干段(实测 100 段 + 10 次二分即可),用高斯消元直接在两端符号相异的段上做二分。
- 路径阶段:解出 \(v_1\) 后回代求 \(u_1\),据重心坐标生成路径,在路径空间校验镜面约束、做可见性测试,通过后累加所有连接的贡献。
作者也讨论了基于线性化 + QZ 分解的特征值求根器,理论上能保证全局收敛,但复杂度高达 \(O(kn^6)\),实测比二分求根器慢约 275 倍,故不采用。
实验结果
作者在 Mitsuba 渲染器上实现,应用于闪光和焦散渲染,硬件为 i9-13900KF + RTX 4080。
- 闪光渲染:与同为确定性方法的 Path Cuts(基于牛顿迭代)对比。Path Cuts 用三角形中心构造种子且牛顿法不总收敛,会遗漏大量闪光;本文方法把问题无损转成多项式求根,找到的闪光数量显著更多。性能上,单次反射(R)本文 CPU 求解器比常规牛顿快 3.3 倍,折射(T)快 2.5 倍;两次弹射(RR)用 GPU 实现,仅比牛顿慢约一个数量级,却能找到多得多的解。
- 焦散渲染:与路径追踪(PT)、Practical Path Guiding(PPG)、无偏版 Specular Manifold Sampling(SMS)、Manifold Path Guiding(MPG)做等时对比。传统引导方法在小面光源 + 镜面顶点场景下出现离群点和能量损失;SMS 因均匀采样种子链噪声明显、且找到解的概率无下界导致高方差;MPG 需较长时间学习分布,仍有残余方差。本文方法无随机采样,在 Plane、Pool 场景上均方误差最低(如 Pool 场景 MSE 0.0046,优于 MPG 的 0.0169),且能找到全部解,结果近乎无噪。
- 与 MEMLT、SPPM、UPSMCMC 对比:本文作为确定性方法嵌入标准 MC 框架,消除了马尔可夫链困在小区域的过亮伪影与能量损失,也避免了光子密度估计带来的过度模糊。
- 消融/验证:把求解器换成确定性牛顿(Path Cuts 框架)会因收敛盆地太小而漏解、出现能量损失;二分求根器与特征值求根器质量相当但快 275 倍;二分分段数上,10 段漏解、1000 段过慢,100 段是精度与速度的平衡点。
贡献与局限
贡献:
- 首次提出镜面约束的多项式表述,结合顶点约束多项式与重心坐标间的有理映射。
- 一套基于隐变量结式 + 直接/特征值求根的镜面路径求解器:确定性、无需多元牛顿迭代、单次弹射精确、且对 GPU 友好。
- 将方法应用于闪光与焦散渲染,实现快速、近乎无噪的镜面光传输模拟。
局限:
- 折射的有理坐标映射只是一阶有理逼近,镜面面相距较远时方向误差会被放大;不过用一次牛顿迭代做后精修即可显著改善精度。
- 二分求根器在解聚集时可能漏解;高次多项式的精确、完整求根仍是数学上的开放问题。
- 主要针对短镜面链,长链因组合爆炸无法穷举全部路径,三个及以上镜面顶点的无偏传输目前仍要靠随机采样;结合随机方法可保证无偏性。
- 结式法会引入多余解(如刷子场景 52285 个结式解中仅 13% 通过路径校验),但这只影响求 \(v_1\) 的一小部分开销。
- 目前仅推导了带插值法向的三角形表示,支持其他曲面表示留待未来工作。
延伸思考
这项工作的意义在于给出了镜面光传输的”范式级”替代方案:不再在高维路径空间里靠迭代逼近单个解,而是把物理约束显式地代数化,转成有成熟数学工具支撑的单变量多项式求根,从而一次性、确定性地拿到全部解。这直接切中了蒙特卡洛镜面渲染长期难以摆脱的”收敛盆地无界、方差不可控”的痛点。其思路也提示了一个更普遍的方向——把渲染中的几何约束尽可能化为多项式系统,就能借力符号计算与数值代数几何领域几十年的积累(结式、根隔离、特征值求根)。后续可探索的方向包括:更好的高次多项式数值求根器、折射平方根的精确有理化、与随机采样结合以处理长链并保证无偏,以及推广到非三角形曲面表示。