VR Inside

VRの未来を創るビジネスメディア

【チャリ走VR】キャラクターアニメーションの制御方法 - VR Inside

【チャリ走VR】キャラクターアニメーションの制御方法

     

※本記事はCyber Agent 公式エンジニアブログの中からVRに関連する技術記事を寄稿いただいております。

本投稿では、今年2月21日にリリースされたPlayStationRVR専用ソフト「チャリ走VR」で利用されているキャラクターアニメーションの制御方法についてお話しさせて頂きます。

bikerider-vr_tyarisovr-1024x591

BikeRiderVR_Download

アニメーション制御

チャリ走VRにおいて、アニメーションは酔いの軽減をしている役割もあったりと、実は見た目以外の役にも立っています。

本章ではアニメーションの種類とその利用方法を紹介していきます。

キャラクターとチャリのアニメーションはそれぞれが別々に動作していますが、共にアニメーションブループリント内のアニムグラフでキャラクターブループリントの変数の値に基いたアニメーションをブレンドすることによって動作を表現しています。

共通変数

キャラクターおよびチャリのアニメーションブループリント内のイベントグラフでは、キャラクターブループリントによって変更された変数の値を取得することでアニメーションのブレンドウェイト値を制御しています。

bikerider-vr_animation_commonvar

ハンドル

共通変数のPlayXとPlayYはハンドルに関わるアニメーションの制御を行います。下図のブループリントは、HMDの左右の傾きとコントローラの入力値に応じてPlayXとPlayYの値が変更されるようになっている例です。

bikerider-vr_animation_playerhandle-1024x244

ジャンプ

ジャンプのアニメーションに関してですが、実はゲームプレイヤーにジャンプアニメーションは付いておらず、NPCのみがアニメーションを再生するようになっています。従って下図のブレンドウェイト値の変更はNPC限定の処理となっています。

bikerider-vr_animation_commonjump-1024x336

着地

ジャンプのアニメーションと同様に着地のアニメーションもNPC限定の処理になります。ここで登場している「PlayFrame」という変数は全てのアニメーション再生で利用されており、アニメーションを再生するフレームを指しています。

この変数で再生フレームを指定しているため、キャラクターとチャリのアニメーションを連動させることができています。

ただ再生するだけですと、タイミングによってはキャラクターの足とペダルの位置がずれてしまうといった不具合が発生します。

bikerider-vr_animation_commonland-1024x421

坂道

ステージには坂道がところどころに設置されていますが、チャリを回転させる動作を省いた場合は坂道であっても下図のように走ってしまいます。

bikerider-vr_animation_rotation-1024x564

地面の傾きを考慮してチャリを回転させてあげることで違和感のない走りが実現できます。

bikerider-vr_animation_rotation2-1024x566

ただ回転させるだけですとどうしても違和感を感じてしまうので、タイムラインを使って徐々に素早く回転させることで違和感の低減に効果がありました。

ただし、ゲームプレイヤーのチャリを回転させると視点が勝手に動かされてしまい、酔いの誘発に繋がるので回転処理はNPCのみが実行します。

bikerider-vr_animation_slopingroad-1024x460

キャラクターの制御

ハンドル

共通変数の章で紹介していた変数「PlayX」と「PlayY」の値は下図のブレンドスペースに効いてきます。後から気付きましたが「X軸範囲」はマイナスにも設定できたので座標(0,0)を初期値にしておけば良かったです(遅)。

bikerider-vr_animation_bicycleblendspace-1024x636

右方向に移動する時は「PlayX」の値を加算します。

bikerider-vr_animation_bicycleblendspace2-1024x636

左方向に移動する時は「PlayX」の値を減算します。

bikerider-vr_animation_bicycleblendspace3-1024x637

立ち漕ぎにするには「PlayY」の値を加算すれば良いです。

bikerider-vr_animation_bicycleblendspace4

ギミック設置

ギミック設置のアニメーションはNPC限定の動作ですが、状況によっては立ち漕ぎと座り漕ぎの両方で設置動作をすることがあります。

立ち漕ぎ時のギミック設置と座り漕ぎ時のギミック設置動作をそれぞれ制御しても良かったのですが、「ギミック設置をする時はこのアニメーションをした時だ!」とユーザにとって分かりやすいルールを決めたかったことに加え、処理の複雑さの回避とアニメーション作成コストを考えると1つにした方が良いという結論に至りました。

bikerider

ジャンプ

ジャンプ動作は走っている時であればいつ実行されてもキレイに遷移させなければなりません。

ジャンプ動作の流れとしては、座り漕ぎ(立ち漕ぎ)をしている時にジャンプ前の溜めをして、その後ジャンプを開始します。

ここで問題になったのがジャンプ前の溜めの動作をどうやって実現するか?でした。

ジャンプ前の溜めは足の回転動作が無いため、普通にブレンドすると足が動いてしまい違和感がありました。

そこで足の回転動作を止めるために、0.2秒で溜めアニメーションの1フレーム目のモーションをするだけの30フレームアニメーションへブレンドした後、ジャンプ前のアニメーションを再生すると自然に見える一連のジャンプ動作を表現できました。

bikerider-vr_animation_jump-1024x273

着地

着地アニメーションに関してもジャンプと同じ方法で表現することができています。

bikerider-vr_animation_land-1024x273

チャリの制御

基本的にはチャリのアニメーション方法はキャラクターのアニメーション方法と同じです。ここではキャラクターと異なる動作部分のみを紹介します。

車輪の回転

右折や左折をするために車輪を左右に回転する処理はアニメーションが代わりに実行してくれるので、あと一つ考える必要があるのは車輪を回す処理についてです。

この処理は「Convert Spacesノード」を利用することで解決します。

このノードにより、ローカル空間とコンポーネント空間のポーズ変換が可能なので「ボーンをトランスフォーム(修正)する」ノードに値を渡して車輪の回転を実現します。

bikerider-vr_animation_wheel-1024x226

この時、「F_Wheel」のZ値に20.0と入力してみるとプレビューウィンドウのチャリの車輪が右に回転します。Y値を編集すると前方、後方に車輪が回転しますが分かりにくいのでZ値を例に説明いたしました。

bikerider-vr_animation_wheel2

死亡時のチャリ

ゲームプレイヤーが死亡するとなぜかチャリが崩壊するのですが、これはアニメーションではなく物理アセットの修正で実現しています。

下図では既にいくつかコンストレイントを削除していますが、残りの2つも削除してしまいましょう。

bikerider-vr_animation_constraint-1024x597

コンストレイントの削除はデリートキーを押すだけです。

bikerider-vr_animation_constraint2-1024x597

これで縛られるものがなくなったチャリは物理挙動時に崩壊します。

bikerider-vr_animation_constraint3-1024x597

まとめ

今回はキャラクターとチャリのアニメーション制御方法について紹介させて頂きました。

実際にはペダルやチェーンにも別々の動作が仕込まれていますが、実装内容としてはキャラクターやチャリとほぼ変わらないため今回は省かせて頂きました。

ゲームに合ったアニメーションを作成するために様々な試行錯誤をするのは当たり前であり、根気の必要な作業であるため苦労しましたがアプローチを変えてみて試すことは重要だと思いました。

この記事が気に入ったら
いいね!しよう

最新情報をお届けします

TwitterでVRInsideをフォローしよう!

キュン佐藤

Writer: TechnoloGEEK/Twitter 最新技術が好きなプログラマー!

技術開発関連の寄稿受け付けています VRに関する開発メモやブログ、関連記事の寄稿をしていただける方は以下のフォームよりご連絡ください。
技術開発記事の寄稿フォーム