Green Coordinates によるケージデフォーマーのMayaプラグインのテスト実装。
上記の論文と Hans Godard 氏の動画 を参考にしました。
Python API 2.0 で MPxDeformerNode クラスがサポートされていなかった為、旧 API で実装しています。
元のシェイプを維持するような変形が可能で、非常に粗いケージを使用しても品質が良いです。 反面、一つのポイントの変形位置を算出するのにケージの全頂点と全トライアングルが参照されるので重いです。 C++ で並列化実装すればその恩恵を受けやすいかも知れません。
- scripts: デフォーマーを生成するための簡単なスクリプト。
- plug-ins: Pythonによるプラグイン。
- examples: ごく簡単なMayaシーンの例(バインド済み)。
デフォームする一つ以上のターゲットシェイプ(ポイント選択で部分的なデフォームも可能)、 一つのケージメッシュを用意します。
ケージ、ターゲットの順に選択し、スクリプト scripts/createGreenCageDeformer.py を実行するとバインドされます。
勉強として実装したので、そこそこ動作はしますが、実用レベルのものではありません。
-
ケージはターゲットシェイプの外側にある必要があります。 もしケージの外にターゲットポイントがあると酷い結果になります。
-
Python 実装(しかも 2.0 でない)であり、何の最適化もしていないため、動作が大変重いです。 ターゲットはそこそこ大丈夫ですが、ケージにはごく簡単な形状しか重すぎて使用できません。
-
ターゲットの全ポイントはケージの全頂点の影響を受けます。 そのため重いですし、良い結果を得にくい部分かも知れません。
-
バインド情報をアトリビュート保存していない為、シーンを開く時間がかかります(シーン開く際に再バインドされる)。
-
デフォーマーのウェイトや envelope アトリビュートを無視しています。