Mesh参数化或者Mesh展平是图形学里面广泛用于制作贴图的一个步骤,通常英文称之为Mesh Parameterization,也被通俗的称为Mesh Flattenning。基本概念是一个三维的离散网格映射到二维平面网格的过程。为了保证后续应用的有效性,网格的参数化通常需要满足一些特定的性质,如三角形面积在映射前后变化较小、三角形的角度和边长变化较小,最根本的一点是需要映射是双射(Bijective),也即一一对应,没有面片的重叠和反转(Overlap and Folding)。
网格的参数化除了用于纹理映射(即向Mesh的顶点及顶点之间的三角形面片赋值相应的图片颜色),也可以用于Remesh,MeshEditing等、 Mesh Morphing、Details Trasfer,具体的概念可以参见下面的图。此处我们只关注纹理相关的应用和纹理展开技术本身。
根据是否保持边界的不变,模型参数化方法可以分为:自由边界展开和固定边界展开; 多数展开算法同时可以支持自由边界和固定边界展开,只有少数算法只支持一种展开方式。几乎绝大部分固定边界展开都要求固定边界情况下边界是凸的,否则无法保证最终结果的正确性。
按照是否是全局优化可以分为 全局优化算法 和 局部优化算法;
局部优化算法一般是增量的,例如将一个三角形先放在平面上,以该三角形为中心利用半边结构进行广度优先的搜索,放置其他三角形,直到边缘新增的任何一个三角形都大于扭曲限度的阈值,则停止扩增该patch,很多不同的平面化patch最后组装成一个texture atlas,最后优化Pack Efficency。
但是局部优化算法在某种程度上是一种Trivial的方案,本身技术含量不高,只是能用而已, 因此我们重点介绍全局优化算法,一些重要的全局的mesh flattening的根据惩罚度量不同的分为:
Conformal flattening 保角展开
Isometric Mappings 保角展开
Equiareal Mappings、Authalic Mappings 等积展开
以及Harmonic Mahpping 调和展开
另外有一些不同度量共同惩罚的方法,可以理解为一些trivial的工程创新;
为什么保持面积或者角度是重要的?
这个问题的答案可以直接看下图,如果脸部的三维面积很大,但是参数化后占的平面面积很小,会产生纹理映射过程中分辨率不均衡的问题,通俗的说就是如果纹理图大小过大,足够保证脸部的贴图,那么对于脖子就会过剩,而且浪费存储空间(尤其是GPU的显存),降低渲染速度,反之如果纹理图较小,脖子部位可以保证有效映射,而脸部可能会产生低纹理。而且如果角度前后相差较大会产生同一区域不同方向的纹理密度不统一,比如x方向过纹理了,而y方向纹理为低纹理,所以最佳的映射方式是三角形完全不变,但是除了类似于折纸(一个平面任意扭曲形成的空间曲面)的网格,大部分三维网格都不可能获得完美的保持角度和边长的展开(Undevelopeable)。
传统上一些代表性工作如下:
MIPS(Most Isometric Parameterization)、基于扭曲受限的参数化、基于圆模式(Circle-Pattern)、最小化角度扭曲的参数化等等。读者可以参考:http://alice.loria.fr/publications/papers/2007/SigCourseParam/param-course.pdf
近些年来的一些代表性工作如下:
比较早期的工作包括Tutte1963的调和展开,2001年2002年Bruno Levy的LSCM方法,最近几年的工作包括一个用Ricci流或者是Calibi流形来计算。 2017年一份关于BFF的文章给出了基于边界调整的优化保角映射算法,因为边界是很重要的一个参数,传统上一般的展开算法是直接利用chord长度来进行边缘的弦长等比例展开,而这个不总是能保证内部可以实现各种度量的最优,所以为了实现最优的度量,有一些类似于BFF的方法研究如何通过改变固定边界的投影位置来减少参数化带来的网格扭曲(distortion)。 A Novel Surface Flattening Method Based on Mesh Edges
除了严肃的科学论文之外,一些人写的博客也值得一读:
http://blog.sciencenet.cn/blog-4099-1067833.html 吴怀宇的 “上帝如何优雅的拍扁你”
http://blog.sciencenet.cn/blog-465130-1135112.html 王琳的 “固定边界的三维人脸网格参数化”