こんにちは、Steemです。
今回は、前回記事(StmRayDrop)に似たスクリプトを紹介しますが、前回とは少し異なるものになっているかと思います。
こちらはPythonスクリプトです。
動画
機能説明
ポリゴンサーフェスに別のポリゴンプレーンを平行投影します。これを使って、厚みのあるオブジェクトをサーフェスに沿ってなめらかに変形させることが可能です。
UI:クリックで拡大
基本機能
以下の項目を設定して実行:
- 変形させるオブジェクト①(厚みのあるもの)を登録
- 変形させるプレーン②(厚みのないもの)を登録
- 投影先のサーフェス③を登録
実行後は最終的に
- オブジェクト①
- プレーン②
のそれぞれに投影前後のブレンドシェイプが作成されます。
一つ目の欄には厚みのあるオブジェクトを、
二つ目の欄には厚みのないプレーンを登録します。
プレーン②はオブジェクト①のWrapデフォーマとして機能すると考えると分かりやすいです。
プレーン②は完全に変形先のサーフェスに吸着します。凹凸がある曲面でも構いません。厚みのあるオブジェクトを登録していると、Y方向に潰れた結果になるので注意しましょう。
なお、オブジェクト①のみを登録した状態で実行をする際は、プレーン②がオブジェクトの最小ローカルY座標の高さに存在していた場合の処理を行います。この場合は変形後のオブジェクト①のみが残ります。
変形後の形状はブレンドシェイプとして作成されており、変形前の形状に戻すことが容易です。
追加機能
- プレーン作成機能
- 選択したオブジェクトのバウンディングボックスの大きさに合ったプレーンをローカルY軸に垂直な平面で作成します。分割数の指定も可能です。
- 作成されると自動でUIのボックスに名前が入ります。
- (こちらのスクリプトの機能の転用です。)
- Blend Shape のトグルボタン
- 選択したオブジェクトのヒストリにある全てのBlendShapeノードをトグルします。
- スライダーの変更ではなく、ノードの有効化/無効化(Node Behavior > Node State の "Normal" と "HasNoEffects" )の切り替えをする機能です。
追加説明1:変形の方向
プレーンの変形の方向ですが、プレーンのローカルY軸方向になっています。(地面・壁にペタリと貼り付けたいオブジェクトに対しての使用を想定したものです。)
追加説明2:メカニズムと注意点
またプレーンをサーフェスに貼り付けるメカニズムですが、 Shrink Wrap デフォーマは用いていません。平行投影を用いようとしてもあまり動作の予測可能性が高くない部分があり(結局頂点をスムーズさせる必要がありそう?)、法線方向の投影もプレーンに起伏がある場合はきれいな変形をさせることが難しいためです。
その代わりに前のスクリプトでも用いた、レイを飛ばしてサーフェスとの交点を得る方法の平行投影を用いています。投影の結果プレーンがサーフェスからはみ出てしまう場合は頂点の移動が発生しないためご注意ください。
おわりに
こちらは今まで作成した中で2つ目のPythonスクリプトです。もとはMELで作成していたスクリプトなのですが(レイを飛ばさずにwrapデフォーマだけで完結させる特殊な貼り付け方をしていました。)、前のスクリプトを作成したのを機にPython化しました。
レイキャストの機構については Maya API を用いています。自分自身学習中の身のためコメントアウトは残したままです。
こうした方がよいのではというアドバイスがあれば投げかけてください。
=================
こちらのスクリプトを無料配布しています↓
ダウンロードページはこちら
(2025.12.28更新)
=================
お問い合わせはこちらまでお願いします。

