【cluster】乗り物機能で多脚ロボットを作る
どうも、バーチャルYouTuberのカティアです。
この記事はcluster向けワールド「電脳都市トロットミュージアム」を制作した際の忘備録です。
◆そもそも乗り物とは
clusterにおける乗り物機能とはわかりやすく言うと、「操作を受け付ける椅子」です。
2021年後半の大幅アップデートで椅子、及び乗り物用の「Ridable Item」という要素が追加されました。テンプレートワールドでは車、ヘリ、馬といった乗り物を運転することができます。
このうち車やヘリはRigidbody、つまり物理エンジン制御で動きます。
一方でポニーはCharacter Controllerという、プレイヤー制御用のコンポーネントを利用します。今回はこちらの方法で歩行ロボットを作っていきたいと思います。
◆ロボットをデザインする
さて、上の画像はミュージアム公開より何か月か前、別のワールドで先行投入していた四脚ビークルです。
このビークルは全長全幅を2m以内とかなりコンパクトに納めました。前後のパーツは飾りと考えると、大事なのはコクピットの大きさです。
あくまで私の目安ですが座席の幅は40㎝、床からの座面は40~50㎝。屋根を付ける際はアバターの視界に注意してください。
より高級な機能を持たせたい場合は、座席の高さをアバターの背に合わせてシフト出来るようにする手もあります。
一からモデリングする場合はサイズ感が狂いがちなので、大まかな形が出来た時点で実際にアバターを座らせてみるといいと思います。操縦桿やハンドルに手が届くかも確認してください。
また歩行ロボットの場合、脚がアバターの足を巻き込むようなモーションになりそうかも確認しておくといいでしょう。
…もっとも、これだけ言いましたが50㎝とか3mのアバターで来られたらどうしようもありませんが…そこまでいくと自己責任で。あるいはご自身がそういうサイズで活動の場合、小人/巨人仕様機も面白いと思います。
現実の多脚ロボットの関節は一般に、脚一本当たり3~6か所の関節を持ちます。動きの自由度と手間のトレードオフですが、歩幅が極端に狭くなっていないかなど可動範囲を確認しておくといいでしょう。
今回制作したモデルはどれも、関節部分の回転軸がはっきりしています。モデリングする際にどのボーンに追従するかウェイト付けする際に簡単になるというメリットを取ったわけですが、アニメのロボットでよくある関節部全体をカバーで覆った形状にするのもいいでしょう。
また、放射状に脚を広げるタイプのメカでも、モデリングの時点では左右に足を伸ばしておいた方が後々の計算が楽になる気がします。
◆歩行バリエーションを知る
さて、多くの歩行ロボットは犬や馬、昆虫やクモなど生物の歩行を模しています。しかし実際にこれらの生き物が動いている動画を見ても中々わからない。そこで参考になった動画をご紹介させて頂きます。
四足歩行といっても色々種類があります。一時停止しながら採用する動きを見定めましょう。
あるいは、入力量によって走り方を変えるのもいいですが、デスクトップのWASD操作だと常に0か1な点に気を付けてください。
こちらは虫編、苦手な方は注意してください。
昆虫の歩行法として有名なのが、三本の足を交互に接地させるトライポッド歩容という歩き方。この歩き方は常に重心が接地した足の中にあるので安定する反面、歩幅を稼ぎにくく、また後ろ足が後方を向いているため、走るのに向いていない難点があります。
一方昆虫がゆっくり歩く時やムカデの場合、脚を一本ずつ前に繰り出していくウェーブ歩容という歩き方もあります。虫は苦手だけど調べたい場合はこれらの歩容名で検索すると、ロボット研究の記事がヒットするのでこれを参考にすることをお勧めします。
もちろん、モチーフにした生物の動きに厳密に沿う必要はなく、動かしたとき歩いて見えるよう落とし込んでいくことが大事です。
上の画像はアラクネⅡ世のボーン構造ですが、第一関節を90度曲げても干渉しない設計にしてあります。これによりカニのような横歩きも、犬や馬のような歩き方もできるようになっているのです(実際は上の動画におけるクモの歩容から、一対目と四対目の足を模した動きで実装しましたが)。
中にはこんな方もいるでしょう。SFの多脚メカでしばしばみられる、足先に車輪が付いていて歩行と車輪移動を両立できるメカを作りたいと。しかし困ったことにCharacter Controllerは物理制御を受け付けてくれません。
そのため取れる選択肢は…。
Character Controllerで移動に合わせて車輪をアニメーションさせる。
RigidBody制御で車輪にWheelColliderを入れる。転倒リスクが高い。
歩行モデルと車輪モデル、座席を別アイテムとしてConstraintで繋ぎ、切り替えコマンドで差し替える(アニメのロボットも大抵、歩行と車輪でギアを切り替えてるよね)。試してないので可能か不明。
…辺りでしょうか。飛行能力を持たせたい場合も同様の問題にぶち当たることが予想されるので、試行錯誤する価値はあるかもしれません。
◆アニメーションを設定する
さて、制作したロボットに歩行や旋回、あるいは移動以外のアニメーションを設定していきます。
基本的にロボットのアニメーションはSteerItemTriggerでプレイヤーの入力を受け付け、その値に合わせてアニメーションを再生させます。
歩行アニメーションというと難しそうですが、私の場合は1サイクル当たり4つのポーズを繰り返しています。これは自作歩行ロボットのモーション作成を参考にしたものです。1モーション4ポーズならいける気がしませんか?
ポイントととしては、乗り物の移動量と移動モーションが揃っていること。これがあっていないと足をぶんぶん振りながら前に滑っているようにしか見えなくなり、歩いて見えなくなります。
もしどうしても歩幅が小さく移動量が稼げない場合は、跳ねるモーションにするのも手です。
まず必要なモーションは前進後退と左右旋回、それに入力がないときのアイドリングモーション。これをAnimator上のBlendTreeに設定します。
操作の際にはSteerItemTriggerのMoveInputを二次元ベクトルの値であるVector2で取得。
このうちx成分を旋回用、y成分を移動用のパラメータとしてAnimatorに渡して、BlendTreeに反映させます。
横歩きなどを設定することも可能ですが、あまり細かくアニメーションを設定するとスマホやVRでは動かし分けるのが難しく、暴発しがちです。
なお注意すべき点として、
乗り降りの際に入力をリセットする(降りてもマシンが歩いて行ってしまう)
Apply Root Motionをオンにする(その場で藻掻くだけになってしまう)
追加入力を利用する際は起動用のSignalと値参照用のFloatの両方を取得する
ジャンプする際は着地判定が必要(ポニーのプレハブを参照。無限空中ジャンプさせたいなら別ですが…。)
辺りが挙げられます。
◆メックに乗ろう
今回はコンセプトの関係で四脚ロボットを取り扱いましたが、同じ方法論で二足歩行のパワーローダーなども作れると思います。
あるいは前述の装輪歩行ロボットやユニット連結型のメックの動かすもっといいやり方があるかもしれません。
この広大なバーチャル空間を駆ける、まだ見ぬメックを夢見て。