Mayaスクリプト(12):平面投影ツール ”StmPlaneProjection”
こんにちは、Steemです。
今回は前回記事(スクリプト「StmRayDrop」の紹介)に似たMaya用Pythonスクリプトを紹介します。
スクリプトの概要
機能
- 一定方向のコンポーネント移動による、ポリゴンサーフェスの異なるポリゴンオブジェクトへの貼り付け。
- サーフェスの貼り付けに伴う変形を用いた、立体ジオメトリの滑らかなデフォーム。
用途
- 地形に追従させたジオメトリの変形 等。
操作・UI
動画
UI
UI:クリックで拡大
操作
スクリプトを実行してUIを開きます。
-
変形させるオブジェクト(①)を登録(任意)
このオブジェクトは厚みのあるもので構いません。 -
貼り付けるサーフェスオブジェクト(②)を登録
厚みのないものを使用します。(厚みのあるオブジェクトを使用すると、圧縮され潰れた結果になります。)
このオブジェクトを登録せずに①・③のみを使用した場合、自動的にオブジェクト①の最小ローカルYの高さにプレーン②が存在するものとして実行されます。
- 貼り付け先(ターゲット)のサーフェスオブジェクト(③)を登録
- 実行ボタンを押して実行
追加機能
-
ブレンドシェイプの追加
実行後は「オブジェクト①」「サーフェス②」のそれぞれに投影前後のブレンドシェイプが作成されます。変形前の形状に戻すことが極めて容易です。 -
プレーン作成機能
選択したオブジェクトのバウンディングボックスの大きさに合ったプレーンをローカルY軸に垂直な平面で作成します。分割数の指定も可能です。
作成されると自動でUIのボックスに名前が入ります。
※このスクリプトの機能の転用です。 -
Blend Shape トグルボタン
選択したオブジェクトのヒストリにある全てのBlendShapeノードをトグルします。
スライダーの変更ではなく、ノードの有効化/無効化(Node Behavior > Node State の "Normal" と "HasNoEffects" )の切り替えをする機能です。
追加説明
-
変形の方向について
プレーンの変形の方向ですが、プレーンのローカルY軸方向になっています。(地面・壁にペタリと貼り付けたいオブジェクトに対しての使用を想定したものです。) -
メカニズムと注意点
プレーンをサーフェスに貼り付けるメカニズムですが、 Shrink Wrap デフォーマは用いていません。
それはこの方法を用いようとしてもあまり動作の予測可能性が高くなく頂点位置にがたつきが生じること、法線方向の投影もプレーンに起伏がある場合は結局きれいな変形をさせることが難しいことによります。
その代わりに前のスクリプトでも用いた、レイを飛ばしてサーフェスとの交点を得る方法の平行投影を用いています。このため投影の結果プレーンがサーフェスからはみ出るような場合はその部分の頂点の移動が発生しません。
おわりに
今回はコンポーネントの吸着を行うPythonスクリプトを紹介しました。
皆さんの参考になれば幸いです。
当スクリプトの配布・販売予定については未定(調整中)です。
続報をお待ちください。

