Journal

Simplifying Textured Triangle Meshes in the Wild

Hsueh-Ti Derek Liu, Xiaoting Zhang, Cem Yuksel

Roblox; University of Utah

一句话总结

针对来自在线仓库、普遍存在非流形结构与多连通分量的”野生”带纹理三角网格,本文把网格简化重新表述为对单纯 2-复形(simplicial 2-complex)的顶点对塌缩问题,用一个改进的二次误差度量在流形输入上收敛到经典 QEM、在野生输入上显著改善,并用一套与 UV 布局无关的”逐步对应映射”来传递纹理,从而彻底避免纹理渗色(texture bleeding),实现对任意三角网格的高质量、高效率简化。

研究背景

网格简化用于为三维物体生成不同细节层级(LOD),是实时渲染与仿真在多种硬件上达到性能目标的关键环节。以 Garland 和 Heckbert 的二次误差度量(QEM)为代表的经典方法在流形网格上效果优异,但它们大多隐含假设输入是单连通的流形网格——这个假设在等值面提取(如 marching cubes)产出的网格上成立,却与今天艺术家手工建模、堆积在在线仓库中的资产严重脱节。

作者用数据说明这一脱节:Thingi10K 中 22.5% 的模型非流形,ModelNet 中 54.3%,而机器学习常用的 ShapeNet 中高达 98.9% 的网格是非流形。真实世界的网格常常同时包含非流形元素、多个连通分量,甚至退化为”三角形汤”(triangle soup)。直接把这些网格喂给经典 QEM,会出现两类典型失败:

  • 几何层面:一是保拓扑方法给最粗分辨率设了下限(每个分量至少留一个三角形);二是边二次误差只度量到三角形平面的平方距离,对近可展平面区域报告接近零的误差,从而误删几何上重要的大面积分量。
  • 纹理层面:传统方法靠”尽量保持 UV 坐标”来传递纹理,但当网格含多个 UV 岛(UV island)时,UV 岛边界一旦不被精确保持,渲染器在边界附近插值就会把纹理图的背景色采样到表面上,产生纹理渗色。而现实中大多数网格都有不止一个 UV 岛。

一个可用的方法必须:性能高、对各种几何缺陷鲁棒、并能保留纹理等表面属性。先修复成流形再简化的路线依赖修复质量(不总是可靠),且会丢失纹理属性、耗时可达数分钟到数小时;构造流形”外壳”再简化的路线又会删掉重要的内部结构。这促使作者重新审视简化问题本身,面向野生网格数据来设计方法。

方法

方法由三部分组成:把输入建模为单纯复形并构造虚拟边、改进的二次误差累积策略、以及与 UV 无关的逐步映射纹理传递。

顶点对塌缩与虚拟边

给定顶点集 \(V\) 与面集 \(F\),方法先构造连接顶点对的边集 \(E\),其中包含两类边:与 \(F\) 中至少一个面相邻的”物理边”,以及不邻接任何面的”虚拟边”。三者组合 \(M = (V, E, F)\) 即单纯 2-复形,作为系统输入;简化过程就是按误差度量优先级迭代塌缩 \(E\) 中的 1-单纯形(即边)。

虚拟边对简化多连通分量的野生网格至关重要。常见启发式是把顶点距离小的顶点对连起来,但由于离散化,几何上很近而拓扑上分离的分量之间,顶点到顶点的距离仍可能很大,导致连接失败。作者转而借鉴 Čech 复形的思想:Čech 复形在两点的 \(r\)-半径球相交时建立连接;推广到三角网格,点的 \(r\)-半径球自然变成三角形的 \(r\)-偏移曲面。于是通过计算三角形到三角形的距离来判定连接——若两个三角形的距离小于 \(2r\) 且不属于同一连通分量,就在它们最近的顶点对之间建立一条虚拟边。因为额外检查了连通分量,结果并非严格的 Čech 复形,但精神一致。相比基于顶点距离的做法,这种基于三角形距离的度量能把本应属于同一刚性物体、却在建模中被拆成多块的部件正确合并为单一分量。

改进的二次误差度量

边塌缩算法的核心是用一个误差度量来排定塌缩顺序。单用边二次误差或其概率版本会删掉大的平面分量;而朴素地加上边界二次误差或面积二次误差(area quadric)又会导致过度平滑。作者的关键观察来自分析面积二次误差的过平滑行为:当塌缩一条虚拟边时,原本的边界边会被”粘”成内部边。此时按经典 QEM 的常规做法(把二次型逐次累加,即”有记忆”实现)会让面积二次误差后续被错误地施加到内部边上。塌缩内部边通常一侧面积增、另一侧面积减,本应相互抵消、净变化很小,但面积二次误差不区分正负、对两侧变化都取平方再求和,于是给长内部边判了过高的代价,造成过于均匀的塌缩。

作者的修正简单而有效:边二次误差仍按经典 QEM 累加(有记忆实现),但面积二次误差项不累加(无记忆实现,memoryless)。这一有针对性的调整在简化三角形汤时显著改善了尖锐特征的保持。更重要的是,对闭合流形网格,该度量”收敛”到标准 QEM,从而在流形输入上保持了经典方法的优异表现,同时改善了野生输入。

逐步映射的纹理传递

不同于”保持 UV 坐标”的传统思路,本方法在简化的同时追踪输入网格与简化网格之间的对应关系,简化完成后再重新烘焙一张 UV 贴图。目标是计算映射 \(T: M_c \to M_0\),把简化网格 \(M_c\) 上的点 \(p\) 映射到输入网格 \(M_0\) 上的对应点 \(T(p)\);有了它,就能在 \(T(p)\) 处取属性值、为 \(M_c\) 烘焙新纹理。

映射 \(T\) 通过逐步最近点投影计算。方法存下塌缩历史 \(\{M_0, M_1, \cdots, M_c\}\),相邻两级仅差一次边塌缩/顶点分裂。对 \(M_c\) 上的点,在其顶点一环邻域内做顶点分裂得到 \(M_{c-1}\),投影到 \(M_{c-1}\) 的边一环,如此局部投影逐级回溯直到 \(M_0\)。这种局部化投影鼓励(但不保证)把每个点投影到它本来所属的表面部分,因而对薄壳结构(两面颜色不同)更鲁棒,避免投到错误的一侧。一个关键实现细节是:最近点查询复用 \(M_c\) 上的点位置,但用逐步映射链 \(M_c \to M_{c-1} \to \cdots \to M_0\) 来确定相关的边一环,这保证采样属性在几何上更贴近简化网格,避免多次投影累积失真。得到 \(T\) 后即可把输入的任意属性烘焙为简化网格的纹理,且该映射与任意单射纹理映射技术兼容(论文因简洁性选用 mesh color texture)。

实验与结论

复杂度方面,方法与用优先队列实现的经典边塌缩同为 \(O(n\log n)\),额外多了虚拟边所需的三角形距离预计算;但因避免了 UV 坐标的高维二次型计算,简化阶段反而更省,代价是需要一次纹理传递后处理。得益于每个纹理采样点仅在少数几次塌缩(落入边一环时)会改变重心坐标,绝大多数塌缩可跳过,单点对应计算不到 5 微秒,且可对大量纹素平凡并行。作者在 M1 芯片的 MacBook 上,几秒内即可塌缩数十万条边。

几何质量上,在 Thingi10K 数据集把网格分别简化到原分辨率的 0.1%/1%/10%,本方法的 Hausdorff 距离与均方 Chamfer 距离均优于 Garland-Heckbert 1998 与 Trettner-Kobbelt 2020;并能可靠地把全数据集每个网格都简化到 0.1%。纹理质量上,在 Real-World Textured Things 与 Polyhaven 数据集上以纹理对称 Chamfer 距离衡量,简化到 1% 时本方法误差更低。用户研究进一步表明:几何侧本方法的输出更受偏好;纹理侧超过 80% 的参与者认为本方法与 Garland-Heckbert 1998 相当或更优(研究中特设”质量相近”选项以验证在流形网格上与经典方法可比的主张)。

方法也能无缝集成已有 QEM 扩展,例如按可见性驱动的加权简化。

局限与展望:当前属性传递不保证从表面最外层采样,拓扑改变(如删除分量)时局部投影可能从不同分量拾取颜色,导致可见的纹理失真;未来可在计算映射时引入外部可见性信息。此外可探索基于色彩内容的自适应纹理化以缓解高频区域纹素密度不足带来的模糊、探索超越”目标面数”的停止准则、以及避免误删大量小面积分量(如针叶树)。作者也指出,与输入一样,本方法的输出仍可能含非流形等缺陷,这凸显了继续增强下游几何算法鲁棒性的必要。