Parameterizationのアルゴリズムを比較する研究目的でParameterizeキットを作ってみました。Parameterizationは、3次元空間のメッシュを2次元空間にマッピングするためのアルゴリズムの呼称で、3DCGツールではUV展開の手法として使用されています。Modoでは初期のバージョンからLSCM(Least Square Comformal Maps)やABF++などのアルゴリズムがUV UnwrapツールやUV Relaxツールとして実装していましたが、その後はあまりアップデートしていませんでした。
CDT TriangulationキットやSkeletonキットを作った際に、CGALやlibiglがさまざまなParameterizationの機能を提供していたので、Modoで試してみれるようにプラグインにしてみました。自分の研究目的で作ったキットですので、Modoの機能としてはあまり実用的ではないかもしれません。すみません。
境界を固定化したパラメータ化
これは3DCGのUVツールでは、あまり利用されることはないと思いますが、円もしくは四角形などの固定された境界の中に3次元空間のメッシュをマッピングするアルゴリズムです。計算方法は、Tutte Barycentric Mapping、Floater Mean Value Coordinates、Discrete Conformal Map、Discrete Authalic Parameterizationなどがあり、展開するポリゴンの角度比率の歪みを最小限にしたり、面積比率を最小化するなど各アルゴリズムで特徴があります。
LSCM(Least Square Comformal Maps)
おそらくUV Unwrapのアルゴリズムとして、最も一般的に使われている手法ではないかと思われます。角度の歪みの最小化は、コーシーリーマン方程式の最小二乗近似に基づいており、角度の歪みや非一様なスケーリングを最小化します。計算には少なくとも2つの頂点を固定しておく必要があります。初期の頃に公開された比較的ベーシックなアルゴリズですが、計算が比較的安定しているので、多少イレギュラーなメッシュであっても安定して計算結果をえることができるのが良いです。Least Squares Conformal Maps for Automatic Texture Atlas Generationという論文がもとになっています。Modoでは、ユーザーが手動で計算の反復回数を指定するようにしていますが、CGALでは収束するまで自動的に計算を反復するようです。
ARAP (As Rigid As Possible Parameterization)
As Rigid As Possible (ARAP) パラメータ化は、3D形状を2D平面に展開する際に、形状の局所的な変形の少なさを最大限に保つことを目的とした手法です。剛性の維持を実現するために、局所的な回転や移動を許容する代わりにスケールの歪みを最小にします。エネルギー関数を定義し、その最小化を通じて形状の変形を非線形で計算するため、LSCMに比べて計算コストが大きいようです。剛性の維持を優先したいUV展開では良い結果を得ることができそうですが、計算量が多くちょっと遅いです。
SLIM (Scalable Locally Injective Maps)
SLIM(Scalable Locally Injective Maps)は、メッシュパラメータ化や変形において局所的な単射性(local injectivity)を維持しながら、歪みを最小化するアルゴリズムです。計算結果で得られた三角形がすべて正しい方向に向くように保持されるのが特徴です。計算効率も良く等角度と等長の歪みバランスをよく保持してくれる点が優れています。BlenderのUV UnwrapにもMinimum Stretchのモードで実装されています。このキットではlibiglが提供するSLIMの機能をEigenを使って計算しているのですが、UVの初期値の三角形がフリップしていたり、重なったりしていると計算がなぜか失敗してしまいます。Blenderではプロダクションレベルで使用されているようなので、私の実装の方法がまだどこかおかしいのかもしれません。