RMIP: Displacement ray tracing via inversion and oblong bounding
Adobe
一句话总结
提出一种无需预细分的位移贴图光线求交方法:通过”位移求逆 + 可查询任意矩形区域的紧致上下界数据结构(RMIP)”,在 2D 纹理空间与 3D 物体空间之间来回夹逼光线区间,从而在保持全精度和低内存的前提下,把 GPU 路径追踪相较 TFDM 平均加速约 5 倍。
研究背景
- 领域现状:位移贴图(displacement mapping)用一张高分辨率 2D 贴图给低分辨率基础网格加高频细节。实时光栅化里靠硬件曲面细分逐帧触发位移即可;但实时光线追踪的硬件加速结构(TLAS/BLAS)要求显式生成高分辨率几何,即先细分再位移。
- 核心痛点:预细分方案吃满硬件却内存/质量折中很差,动态位移或平铺(tiling)时几乎不可行;而保留全部细节的自定义加速结构(如 TFDM,无需细分)虽精度满分,却因包围盒松、剔除低效导致遍历步数极多,渲染性能差一个数量级。
- 本文 idea:不预细分,直接在位移贴图空间里”探测”可能与光线相交的子区域。关键是让 2D 纹理空间和 3D 物体空间双向通信——细分 2D 光线区间能得到更紧的标量位移界进而得到更紧的 3D 曲面界;求交这些 3D 界又反过来收紧 2D 光线区间,如此乒乓式快速夹逼。
方法
整体框架:输入是三角网格 + 标量位移贴图。预处理阶段把位移贴图构建成 RMIP 结构(存储任意矩形区域的 minmax 位移界),并为每个基础三角形算出一个紧致包住位移后曲面的棱柱(prism),所有棱柱组织成 BVH。渲染时,光线与某棱柱相交就触发逐三角形的自定义遍历:先把光线-棱柱相交区间投影回纹理空间,然后在”2D 收紧”与”3D 收紧”之间交替迭代,直到 2D 界足够小就切换到逐纹素行进(texel marching),在局部实时重建位移曲面做解析求交。
flowchart LR
A["三角网格 + 位移贴图"] --> B["预处理: 构建 RMIP + 每三角形包围棱柱 BVH"]
B --> C["光线命中棱柱, 投影相交区间到纹理空间"]
C --> D["2D 矩形界 → 仿射算术算 3D 曲面界并求交"]
D --> E["3D 相交区间 → 位移求逆投回 2D, 收紧并对半细分"]
E --> D
E --> F["2D 界足够小 → 逐纹素行进, 局部重建曲面解析求交"]
F --> G["前向遍历命中即终止"]
关键设计:
-
逐点位移求逆(3D→2D)。三角形上位置与法线线性插值定义位移曲面 \(S(u,v)=P(u,v)+h(u,v)\,N(u,v)/\lVert N(u,v)\rVert\)。要把光线上一点投回纹理坐标,需求解位移线穿过该点的向量方程 \((P(u,v)-(O+tD))\times N(u,v)=0\)。作者不用已有的解析三次方程,而用 Newton 迭代数值求逆,更快更稳,几步即收敛。由于位移逆并非对所有 3D 点都有定义,选用棱柱(而非 3D 轴对齐盒)作包围体的关键好处是:棱柱完全落在收敛域内,保证所有投影都落在基础三角形内。
-
隐式光线投影与转折点细分。投影光线在纹理空间是条曲线,用其两端点张成的轴对齐矩形去包它,只有当曲线不改变主方向(偏导非零)时才有效。作者把方程消去光线参数 \(t\) 得到隐式二次型 \(\psi(u,v)=\det(P(u,v)-O,\,N(u,v),\,D)=0\),用它闭式求出”转折点”(\(\psi_u=0\) 与 \(\psi_v=0\) 两条线的交点,最多 4 个),据此把曲线区间切成各自可被矩形紧包的子段,实践中几乎不超过一次细分。
-
双路收紧光线界。一是区间投影:每次 3D 盒求交后,把相交区间端点求逆投回 2D,可能得到骤然更紧的界(近平行于位移方向的光线其 2D 投影甚至小于一个纹素,遍历复杂度近乎常数)。二是界细分:不采用把 3D 中点投影回纹理空间的做法(因区间算术无紧致保证,中点投影位置不定会导致失衡、遍历过长),而是直接在纹理空间沿矩形较长边中线切分,剔除一半面积、遍历更均衡且步数有严格上界。
-
RMIP 结构(本文核心数据结构)。标准 minmax mipmap 只对方形区域给界,对高度各向异性的矩形查询界会过松。RMIP 解决”2D 区间最小/最大查询”(RMQ):借鉴把任意矩形查询分解为四个边长为 2 的幂的子查询的思路,预存所有 \((2^p,2^q)\) 尺寸、各位置的 minmax 值,查询时取四个 \(H\) 值的 minmax 即可(见 \(RMQ(x,y,w,h)\))。全部子查询打包成一张多层多级纹理,能高效贴到网格、支持硬件采样与分数级 LoD、支持平铺位移。原始存储 \(N^2(1+\log_2 N)^2\),配套压缩方案可降到 \(N^2\)(与经典 mipmap 同量级),且压缩主要牺牲小于 RMIP 分辨率的查询(这些只在遍历后期出现)的紧度。
实验结果
方法集成进 Adobe Mercury 渲染引擎(Embree + Vulkan Ray Tracing),在 AMD Ryzen 9 5950X + NVIDIA RTX 3080 上测试。主对比对象是 TFDM(作 1× 基线,与本文共享无细分框架、输入输出与画质完全一致,故只比性能与内存)。下表取等内存设置下、中等分辨率 RMIP 的 GPU 渲染加速(相对 TFDM):
| 场景 | 三角数 | 位移分辨率 | 平铺 | TFDM 渲染时间 | RMIP GPU 加速↑ |
|---|---|---|---|---|---|
| Alien Sphere | 0.9k | 2k | 6 × 8 | 56ms | ×3.4 |
| Basket | 4.8k | 2k | 5 × 5 | 117ms | ×6.3 |
| Creature | 53k | 4k | 1 × 1 | 115ms | ×7.8 |
| Ninja Head | 8.7k | 2k | 5 × 5 | 182ms | ×9.2 |
| Medieval Helmet | 2.3k | 2k | 5 × 5 | 42ms | ×3.2 |
全场景平均加速约 5×(标准差约 3×),且可用远少于 TFDM 的内存达到其同等性能。位移缩放或平铺倍数越大,本文相对优势越明显,印证其更优的渐近遍历复杂度;遍历中考虑的 2D 界数量(主循环规模)比 TFDM 少约一个数量级。消融实验显示:换回标准 minmax mipmap 会在等内存下明显变慢(各向异性矩形查询界过松);每种 RMIP 分辨率都存在一个最优 marching scale 阈值;逐点位移求逆在 CPU 上收益显著,但在 GPU 上因 SIMD/warp 执行特性收益有限(同一 warp 内多条光线很难同时命中”求逆特别有效”的配置)。
亮点与局限
- 亮点:
- 建立了 2D 纹理空间与 3D 物体空间的双向夹逼通道,把遍历步数常常压低一个数量级,等画质下平均快 5×、极端场景更快,且内存占用低。
- RMIP 支持任意矩形的紧致 minmax 查询,突破了 mipmap 只能方形查询、对各向异性区间过松的限制,还支持平铺与分数 LoD、GPU 友好。
- 与硬件 TLAS/BLAS 遍历和最终求交相互正交,编辑位移只需重建 RMIP(4k 贴图约 5ms),编辑友好、可动态。
- 局限:
- 面对中等分辨率、有限平铺且静态的位移内容时,”预细分 + 预位移 + 硬件光追”仍是更优选择——本方法的诸多设计明显偏向动态、高分辨率、大平铺的 GPU 位移追踪场景。
- 逐点求逆在 GPU 上收益远不如 CPU,说明该优化对 SIMD 执行模型并不理想。
延伸思考
- RMIP 本质是一个支持任意矩形 minmax 查询的层次数据结构,作者也指出它可能用于物理仿真的近似模型、高分辨率地理映射等其他 LoD 问题——这类”任意矩形范围查询”结构在体渲染、地形、可见性剔除中或许都有复用空间。
- 与神经材质(NeuMIP 等)相比,本方法几乎零预处理与低存储且保留全几何精度,走的是”结构化界 + 精确求交”而非”压缩学习”的路线;两者在质量-内存-预处理三角上的权衡取舍值得对照。
- 逐点求逆在 GPU 上收益有限的现象,指向一个更普遍的问题:光线高度发散、warp 内配置各异时,昂贵但仅偶尔有效的局部优化如何调度才划算,是 GPU 光追里值得深入的方向。