以前から開発を始めたVoronoi分割によるMayaの破壊モデル生成プラグインですが、ようやく与えた2点の中央の面でモデルを分割するところまで作り終えました。
分割前のトーラス
分割後のトーラス
これでCut Face Tool程度の機能はMayaのAPIに全く頼らずに自作できたことになります。速度は未検証ですが、少なくともCut Face Toolを使ったVoronoi分割よりは圧倒的に速いはずです。
ここまで作るのに少しずつステップを踏みながらやってきたので予想以上に時間がかかりました。 せっかくなのでここまで作るのに踏んできた手順を無駄に詳細に記しておきます。
- 平面とは何で定義されるか調べる
>> 法線ベクトル、平面上の点と法線ベクトルの内積 - 平面と直線の交点の求め方を調べ、C++でプログラムにしてみる
- 平面と平面の交線の求め方を調べ、C++でプログラムにしてみる
- 与えた2点の中点にロケータを生成するだけのMayaプラグイン開発
- Mayaでポリゴンを定義するのに最低限何が必要か調べる
>> 頂点座標リスト、各ポリゴンの頂点数リスト、各ポリゴンの連結頂点番号リスト - 自分で数値で定義したモデルがMayaで表示されるか試す
- 与えた2点の中央面とひとつの三角ポリゴンのエッジの交点にロケータを生成するMayaプラグイン開発
- 与えた2点の中央でひとつの三角ポリゴンを2等分するMayaプラグイン開発
- 与えた2点の中央でひとつの四角ポリゴンを2等分するMayaプラグイン開発
- 与えた2点の中央で複数の四角ポリゴンを2等分するMayaプラグイン開発
- ポリゴン2等分アルゴリズムの最適化
>>分割後のポリゴンの頂点番号を元のポリゴンの頂点番号と同じ点の場合は同じ番号で定義してゆき、最後にとびとびになった頂点番号をとびとびな値がなくなるように正すことで無駄を省略(多分もっと賢い方法があると思います)
Mayaの頂点番号表示機能はユーザ側では全く使いませんでしたが、開発側になって初めてこの機能のありがたみがわかりました。本当にデバッグ時の助けになります。なかったら、もっと時間かかっていました。
何はともあれここまで出来てしまえばあとは一度MELで書いたことあるので、高速なアルゴリズムを求めなければ、すぐにVoronoi分割するツールは完成しそうです。
次はVoronoi分割に必要な点群のそれぞれの点における最近傍点の探索プログラムの実装を行おうと思います。