2025年1月21日火曜日

CDT Triangulation キット v2.0

 CDT Triangulation キットを大幅に更新いたしました。最初のバージョンをリリースした際に、Conforming Delaunay TriangulationでFEMなどで使用するような最適化された三角形を生成するようにできないかとのリクエストがあり、これに対応するため最初のバージョンで使用していたCDTライブラリをCGALに変更いたしました。CGAL(Computational Geometry Algorithms Library)は、幾何計算分野における歴史のあるライブラリで多くの優秀な幾何計算アルゴリズを利用することができます。オープンソースで利用する場合は、GPL、LGPLライセンスに基づいて利用することができます。ModoはCGALの商用ライセンスは取得していなかったので、今回初めて個人のオープンソースプロジェクトで利用させていただきました。

Constraint Delaunay Triangulationに関しては、最初のバージョンと処理結果は変わりません。元のポリゴンのエッジを拘束条件として、元の頂点のみを使用して三角形分割の処理を行います。

Conforming Delaunay Triangulationのために新たに追加したのは、三角形の最長エッジサイズ(Minimum Edge Size)と最小角度(Maximum Angle)です。最長エッジサイズは、分割した三角形のエッジのサイズを規制するもので、このサイズが短いほど細かな三角形が生成されます。CGALのライブラリでは絶対的な長さを設定するのですが、このキットでは元のポリゴンのサイズに対する相対的なサイズでも指定することができるようにしています。これにより元のポリゴンの大きさが変わっても同じ分割を維持することができます。最小角度は、生成する三角形のコーナーの角度を指定するものです。理想的な角度は正三角形の60°ですが、ここではデフォルトを20.7°としています。いろいろ試してみたのですがこの値を大きくし過ぎるとハングしてしまうことがあったため、上限を30°にしています。三角形の密度は最長エッジサイズを主としてコントロールしたほうが良さそうです。



その他、v2.0では分割した新しい三角形とそのエッジと頂点をSelect By Previous Operationで利用できるように変更いたしました。

CGALには、他にも素晴らしいアルゴリズムが数多く公開されています。このライブラリを使って、もっといろいろなプロジェクトにチャレンジしてみたいと思います。

2025年1月15日水曜日

Modoのサブディビジョンサーフェイスについて

OpenSubdivキットをバージョンアップし、UVマップ以外のRGBマップなどの不連続頂点マップとモーフポジションの補間を行うようにしました。またメッシュモディファイアは、再分割したメッシュエレメントをエレメントグループに設定するように変更し、Select By Previous Operationから選択できるようにいたしました。

Modoでは、このOpenSubdivキットとは別にOpenSubdivをサポートしていたり、ネイティブのサブディビジョンサーフェイスもオリジナルのサブディビジョンサーフェイスとCatmull-Clarkサブディビジョンサーフェイスの2つがあるので、今回はModoサブディビジョンサーフェイスの取り扱いについて解説したいと思います。


ポリゴンタイプとしてのサブディビジョンサーフェイス

このOpenSubdivキットのメッシュモディファイアのように、多くのDCCアプリケーションではサブディジョンサーフェイスをモディファイアとして実装されていることが多いです。ModoのサブディビジョンサーフェイスはFACEポリゴンなどと同列のポリゴンタイプとして実装されています。これにより同一メッシュ内で異なるタイプのポリゴンタイプをミックスして扱うことができる自由度があります。選択したFACEポリゴンをTABキーを押すことによって同一メッシュの部分的なポリゴンをサブディビジョンサーフェイスとして扱うことができます。ポリゴンタイプはModoのコアレベルで実装されています。


オリジナルのサブディビジョンサーフェイスとCatmull-Clarkサブディビジョンサーフェイス

Modoのオリジナルのサブディビジョンサーフェスポリゴンタイプ(以下SUBD)は、Stuart Fergusonによって実装されたもので、Catmull-Clarkのアルゴリズムとパラメトリック曲面を組み合わせたハイブリッドなオリジナルのアルゴリズムを使用しています。特徴はとにかく軽量でメモリー消費も少ない優れた曲面です。負のエッジウェイトを扱える点もユニークです。欠点はウェイトを使用した場合、UVに歪みが生じてしまうのと、ほかのDCCアプリケーションでも標準となっていたピクサーのCatmull-Clarkサブディビジョンサーフェイスとの互換性が取れなかったことにあります。その後、もう一つのサブディビジョンサーフェイスのポリゴンタイプとして、ピクサーのCatmull-Clarkサブディビジョンサーフェイス(以下PSUB)を実装しました。実装当時はOpenSubdivはまだリリースされていなかったので、Subdivision Surface in Animation に基づいて一から実装いたしました。打ち合わせのためピクサーアニメーションスタジオに訪問したことを覚えています。


オリジナルのサブディビジョンサーフェイス(左からウェイト0%、100%、−100%)


OpenSubdivアイテムプラグイン

その後、OpenSubdivがリリースされましたので、ModoもOpenSubdivに対応してほしいとの要望があったのですが、PSUBはマルチレゾリューションスカルプティングなどにも対応していたため、PSUBの実装をOpenSubdivと置き換えることはできませんでした。また、Modoのコアモジュールに直接サードパーティのライブラリをリンクすることができないという制約も足かせになりました。そこで考えたのがサブディジョンサーフェイスの頂点位置データを外部プラグイン経由でOpenSubdivに計算させる方法です。OpenSubdivアイテムプラグインはModoのFACEポリゴンを読み込んで補間計算を行い、計算結果をPSUBの頂点位置情報に戻しています。ちょっとトリッキーですが、OpenSubdivを補間計算を行う計算エンジンとして使用しています。ただ、あくまでもPSUBポリゴンタイプの拡張機能として作られたプラグインですので、OpenSubdivがサポートしている様々なオプションはほとんど利用されていません。



OpenSubdivキット

今回のOpenSubdivキットは、ポリゴンタイプとは異なるアプローチでOpenSubdivの機能をModoで使用することを目的で開発しました。PSUBポリゴンタイプとは関係なくメッシュモディファイアとして実装しているのでCatmull-Clark以外のスキームやOpenSubdivが提供するUV補間方法のオプションなどもそのまま使うことができます。他のDCCアプリケーションと同様の方法ですね。Modoでは複数の方法でサブディビジョンサーフェイスが利用できるようになっていますのでワークフローに応じて使い分けていただけると良いかと思います。

2025年1月9日木曜日

OpenSubdiv キット

 ピクサーが公開しているオープンソースであるOpenSubdivを使用したModoのポリゴン分割のコマンドとメッシュモディファイアのプラグインをgithubにリリースいたしました。今回はLinux版のバイナリーもキットの中に入っています。macOS版はユニバーサルバイナリですので、IntelとARMの両方で動作します。

このプラグインではOpenSubdivが提供するサブディビジョンスキームとオプションをそのままModoのポリゴン再分割に利用することを目的としています。Catmull-Clarkの他、三角形ポリゴンを分割するためのLoopスキームも対応しています。

Modoには標準のポリゴン分割コマンドやモディファイアが初期のバージョンから実装されていますが、互換性や独自機能の保持のため、OpenSubdivの分割方法と若干ことなる結果となる場合があります。また、このプラグインではサーフェイスポリゴンのみを再分割するため、カーブやポリラインは分割できません。Modoのサブディビジョンサーフェスに関しては、また別の記事で解説したいと思います。

下記はLoopスキームを使って再分割を行った例です。Loopは三角形を再分割するスキームですので、四角形以上のポリゴンは一度三角形に分割してからOpenSubdivの機能を使って分割しています。三角形分割は標準のGenerateTriangleメソッドを使って行っていますので、ソースケージの三角形の形をコントロールしたい場合は、事前に三角形分割してからこのプラグインを使用することをお勧めいたします。Bilinearは、標準のポリゴン分割コマンドのFacetedと同じです。


OpenSubdivでは、UVなどのポリゴンコーナに属するデータをFace-varyとして補間する機能があります。このキットのv1.0では、Modoの頂点マップに保存されているUVデータのみを補間しています。将来的なバージョンでは、UV以外の頂点カラーなどの頂点マップなどの補間やGPUを使用した高速化などを計画しています。