Tips

modoで車リグの作り方

modoで車リグの作り方について書いてみたいと思います。本格的で複雑なリグではなく、タイヤが地形に合わせて動くような単純なものです。

 

タイヤの回転

車のタイヤ(ホイール)の回転にはRevolveノードを使用します。Revolveノードはオブジェクトの移動距離から、回転を計算してくれる便利なノードです。

スケマティックはこんな感です。

ロケータに円柱をペアレントして、ロケータに移動アニメーションを設定しています。Revolveの「方向軸」はロケータをどの軸方向に移動したとき回転するかを指定します。また画像では直径1mのプリミティブの円柱を使用しているので、「半径」に半径500mmを設定します。

ロケータを直接アニメーションする場合は、ロケータの進行方向に沿って回転する必要があります。スケマティックを見るとわかる通り、Revolveは「ワールド位置」と「ワールド回転」を計算に使用します。移動方向に回転が設定されていない場合は、回転の計算が正しくおこなわれません。

Revolveを使用する場合は、パスコンストレイントを使用すると手軽に回転させることができると思います。

 

タイヤの接地

タイヤと地面の接地には、Intersectノードを使用します。Intersectはメッシュにロケータを沿わせることができるノードです。メッシュに近い位置のパーティクル色パーティクルのサイズを変えたりすることもできる便利なノードです。

Revolveで制御してるタイヤをIntersectでメッシュに沿わせたロケータにペアレントすると、地面の起伏に沿って回転するタイヤを表現することができます。ただしRevolveは平面上の移動から回転を計算するので、起伏がある地形では少しずれが発生してると思います。

 

車体の制御

起伏がある地形で車を走らせる場合、タイヤの位置にあわせて車体の傾きを制御したいと思うかもしれません。車体の傾き制御は以下の2つの処理で行います。

  • 車体のバンク角は前輪と後輪の平均した角度を使用します。
  • 車体ピッチ角は前輪と後輪の位置を使用します。

スケマティックはこんな感です。

左上の水色のグループはIntersectを使用して接地させる処理です。タイヤ4個ぶんロケータを作成しています。

左下の緑色のグループはRevolveを使用してタイヤを回転させる処理です。タイヤは全部同じように回転しています。Time Offsetはロケータの移動から、自動でステアリングを回転させる処理に使ってます。現在の回転値と-10フレームの回転値を減算することで、カーブでステアリングが回転して10フレしたら回転値が0になるようにしてます。動かないと違和感があったので、いいかげんな処理ですが入れてみました。RelationShipはステアリングの角度を±35°に制限するためと、イーズの効いた自然な動きにするために使用してます。

右側の紫色のグループが車体の制御の処理です。Position Constraint に2つのロケータの「ワールド位置」をリンクすることで、左右のタイヤの中間位置にロケータをコンストレイントしてます。Direction Constraint も同様で、左右のタイヤの平均にするためにコンストレイントしてます。(Position Constraintの変わりにMatrix Blendを使用しても問題ありません。気分的にDirection Constraintに合わせて、コンストレイント系のノードにそろえてみました)

前輪と後輪の中間位置にあるロケータの「ワールド位置」を Matrix Blend_1 にリンクして、前輪と後輪の中間位置を車体制御用のロケータ(Body_Rotation)にリンクします。Direction Constraint はピッチ角制御です。前輪と後輪の高さに合わせて、車体の前後方向をコンストレイントしています。Matrix to Eulerを使用して マトリクスを3軸の角度に分解して、車体制御用のロケータにリンクします。

Matrix Blend_2 はバンク角制御です。Matrix Blendを使用して前輪と後輪の中間の回転値を求めてます。Time Offsetは車体が回転するタイミングをずらすことで、サスペンションが揺れてる感じが出せないかと思って入れてみました。本格的にバネのようなサスペンションの揺れを再現するには、CBOXのマッスルデフォーマを使用すると作れると思います。

手作業で車体の揺れが調整できるように、車体制御用のロケータ(Body_Rotation)に車体のメッシュをペアレントしています。下の画像の最後の揺れは、自動ではなく手付けです。

 

制御用のロケータを表示した画像です。青色のシリンダーがホイールの中心位置、紫のピラミッドが車体の傾き制御用のロケータです。

 

実際にはこれだけでは不完全です。Intersectのモードに「レイ」のY軸を使用しているので平面や多少の起伏なら問題ありませんが、傾斜が大きい場合に前輪と後輪の距離が離れてしまいます。タイヤの距離を一定に保つシャーシのような仕組みが必要です。

Direction Constraintを使用してタイヤの距離を一定に保ったり、Relationshipを使用してタイヤの距離を調整することはできるのですが、すっきり解決する方法が思いつかなかったので、とりあえずここまでの記事としておきます。

 

参考

車はフリー化されたignition-masterのモデルを使用しました。タイヤの回転やスケールに望ましくない値が入っていたので修正して使ってます。
https://github.com/9bstudios

Modo Tips



 

記事のまとめページ

コメントを残す