Mayaのプロップリグ連載 第8回|軽トラのリグに、タイヤの自動回転と全体スクワッシュを足す

Maya

AutodeskのAREA JAPANで続いている連載「Mayaにおける魅惑のプロップリグ~モジュラーリギングシステムの基本と応用~」の第8回が、2026年11月2日に公開されました。書いているのは、株式会社GAZENでリグを専門にしている久保圭之氏です。久保氏はこれまでの回で、自作のリグモジュールを組み合わせて、宝箱や廊下などの小道具をセットアップしてきました。

今回は、4月10日公開の第7回で最低限の機能だけを付けた軽トラのリグを、もう少し使いやすく手直しします。足すのは、車体の傾きの角度制限、タイヤの自動回転、支点を動かせる接地面のピボット、車体全体のスクワッシュの4つです。

車体の傾き:倒れすぎる前に、前後左右で止める

第7回のリグでは、車体の上部をワールドの向きに固定できます。ただ、車体全体を傾けると上部も傾きすぎて、記事の言い方を借りると「廃車の危機」になります。そこで久保氏は、傾く角度に上限を付けます。

傾きのコントローラーで車体を傾けた軽トラのリグ
傾きのコントローラーで車体を傾けたところ(画像:AREA JAPANより)

車体は長方形なので、上限は前・後・左・右の4方向を別々に決められるようにしました。支点のオフセットも4方向で制御しているので、それに合わせた形です。止める仕組みは、orientConstraintとmoving pivotのあいだにclampノードを挟むのではなく、transformノードに最初から付いている minRotLimit/maxRotLimit を使っています。久保氏は作業の途中で、前の回に書いた軸の向きの方針と中身がずれていたことに気づき、そこもあわせて直しています。

タイヤの自動回転:スイッチを入れれば回り続ける

タイヤは第7回の時点でも1本ずつ回せましたが、それでは面倒なので、オンにすれば回り続けるセットアップを足します。車の移動量からタイヤの回転を計算する凝った作りではなく、パラメーターは「回転のオン・オフ」と「回転速度(1秒に何回転するか)」の2つだけです。第6回の「永遠に終わりが来ない廊下」で作ったモジュール frameTranslateLoopSwitch を改造して、expressionで回す frameRotateLoopSwitch を作っています。

ところが、組んで回してみると、タイヤが止まって見えます。この設定は24fpsで、1秒に360°×N回転させるので、1フレームで回る角度は(360×N)÷24です。タイヤのモデルは円周を24分割しているので、1フレームでちょうど分割1つぶん回ることになり、形が毎フレーム同じに見えてしまうわけです。久保氏は、速度をまじめに計算して回すと、作品によっては止まって見えたり逆回転に見えたりして、見た目のためのリテイクが出ることもあると書いています。

接地面のピボット:向きを変える支点を、あとから動かせる

車の向きを変えるときに手間がかからないよう、回転の支点を動かせるコントローラーを足します。動かした量は支点の移動に、回した量はそのまま回転に割り当てます。サンプルでは、コントローラーの移動を別階層のノードの rotatePivot につなぐ型(pivotA)と、逆向きに動くノードを挟んで支点が動いたように見せる型(pivotB)の2つを比べています。

どちらの型にも、キーを打って回したあとに支点を動かすと、親の空間ごとほかの部分まで動いてしまう、という不満が残りました。支点を動かすあいだは車体を止めておきたいのですが、構造だけでそれをやるのは難しいので、スクリプトで補います。ジョイントを直接動かすオフセット用のコントローラーを別に置き、支点を動かす前にそれをワールドに固定して、動かし終えたらローカルに戻す、という流れです。久保氏はこれを slideRotPivot というモジュールにまとめました。

切り替え用のスクリプトは、編集モードをオンにするものとオフにするものの2本です。オンにするほうは、オフセット用コントローラーのワールドでの位置と回転を控え、1つ前のフレームにキーを打ってからモードを切り替え、控えた位置と回転を戻して現在のフレームにキーを打ちます。スクリプトの全文は記事に載っています。

全体スクワッシュ:レイヤーを分けて、ラティスで潰す

最後は、車体全体をつぶしたり伸ばしたりできるコントローラーです。スクワッシュ自体は、ラティスと長さからスケールを出すモジュールで作れます。ただ、セットアップが込み入ってきたので、ここからは作り方を変えて「レイヤーセットアップ」を足します。これまでの変形を別のレイヤーに移し、ワールドでの変形はなるべくラティスだけにする、という考え方です。

久保氏がよく使うやり方では、メッシュを複製して、最終的なメッシュの上流にシェイプをつなぎます(outMesh → inMesh)。スケルトンも特定のジョイントから下だけを複製してワールドのスケルトンからつなぐことで、そのジョイントを親とした限られた空間で変形を組めるようにします。概念が分かりにくいので、腕の簡単なサンプルデータも用意されています。

球と棒でできた腕のサンプルが2つ並び、右のほうが長く伸びている画面
頂点の移動履歴が残ったメッシュをつなぐと、移動が足されて形が変わる(画像:AREA JAPANより)

メッシュをつなぐときの注意点が2つ挙がっています。1つは、頂点を動かした履歴が残っているメッシュをそのまま複製してつなぐと、移動が足し算されて形が変わること。もう1つは、ポリゴン単位でマテリアルを割り当てたメッシュは、つないだ直後は問題なく見えても、保存して開き直すと割り当てが崩れることです。後者は、割り当ての情報を持つgroupIDとgroupPartsのノードを、セットアップの最後に直す処理を入れて対処しています。

スクワッシュには、latticeDeformer・aimConstraintSetup・lengthToScaleSetup・pointCtrl の4つのモジュールを使いました。ラティスのシェイプをスクワッシュ用のジョイントでバインドして動かしています。

モデラーへの注文:均等な分割と、1点に集まらないエッジ

ラティスで変形させてみると、メッシュの分割が少なすぎて形がいまひとつで、タイヤもトポロジーのせいできれいに曲がりませんでした。

ラティスで変形させた車体とタイヤを拡大した画面。分割の少ないタイヤが崩れて曲がっている
分割が少なく、タイヤも思ったように曲がらない(画像:AREA JAPANより)

そこで久保氏は、モデラーに出したい注文として次の2つを挙げています。

  • メッシュはある程度均等に分割する(極端に分割の少ない所は、曲がらずに直線的に見える)
  • 1つの頂点に何本ものエッジが集まる割り方を避ける(変形させたときに変な角が立つ)

今回はモデルも久保氏が自分で作っているので、モデルを直して差し替え、セットアップをやり直しています。

完成したリグとサンプルデータ

差し替えたモデルで仕上げたリグを使って、テストアニメーションを付けています。

この先の手直しの案として、地面の凹凸に合わせてタイヤを上下させる、ヘッドライトやウインカーを足す、サスペンションまわりをモデリングしてセットアップする、接地面でタイヤを少しつぶす、といった項目が挙がっています。手順ごとのMayaシーンとリグモジュールのPythonファイルは、AREA JAPANの記事の末尾からダウンロードできます。

管理人のひとこと

自分もモデリングからセットアップまでやる立場なので、モデラー(自分)に修正を頼むくだりは他人事ではありませんでした。均等に割る、1点にエッジを集めない、という2つは、ラティスやスキンで曲げてみて初めて差が出る話で、モデルを作っているあいだは見落としやすいところです。

タイヤが止まって見える話も、24分割と1フレームの回転角がそろうと起きる、と数字で説明されているので、速度をどこでずらせばいいか見当がつきます。Mayaの記事ですが、レイヤーを分けて親の動きを切り離す考え方は3ds MaxやBlenderでも同じように使えそうです。以前紹介したeST3でプロップリグを組む記事とあわせて読むと、既製のフレームワークで組む場合と自作のモジュールで組む場合の違いも見えてきます。

コメント

タイトルとURLをコピーしました