takeyohのおぼえがき

気になったこと、試したことの記録です。

バイク用のドライバアニメーション作成

ようやく目標だったバイク用のドライバアニメーションの作成の覚書です。

driver_rigged_v1.blendを使うと、ハンドルのアニメーションは簡単に作れるのですが、バイクは車のハンドルのような動きはせず、もっと体を動かすアニメーションが必要ですよね。

ということで、driver_rigged_v1.blendの仕組みを解析してみました。

(以下、左手を例に続けています。右手はLをRに読み替えてください)

この構成は、

Wheel_Position→Hand_L_Helper→DRIVER:RIG_HAND_L

の順番につながっています。つまり、ホイール(ステアリング)の回転のHand_L_Helperのオブジェクトに反映させ、Hand_L_Helperに対して手のボーンをつなぐことで、ハンドルを回すアニメーションを実現しているということになります。

今回はバイクなので、ハンドルを回すアニメーションは不要。ってことは、Hand_L_Helperのところから作れば、できるんじゃね?ってことになります。

Hand_Grip_Lのオブジェクトプロパティから「関係」のペアレントがWheel_Positionにつながっているので、これを削除。これでハンドルの制御と連動しなくなります。

話の流れ上こうしていますが、新しくオブジェクトを作って、コンストレイントからインバースキネマティクス(以下IK)で設定し紐づけることも可能です。

要は、何かしらのオブジェクトを作成し、それにボーンを紐づけ、オブジェクトを動かしてアニメーション設定することで、ドライバ本体のアニメーションを作成するってことになります。

車のアニメーションからバイクのアニメーションに変えるにあたり、制御用オブジェクト(以下都合上Hand_L_Helperとします)は手首のボーンに割り当てられているので、そのまま流用しようと思ったのですが、手首をひねるだけでは、バイクのように体を沈みこませるような動きが表現できませんでした。

そこで、手首ではなく、肘のボーンに割り当てれば、体がもっと沈み込むのではないか?と思って、試してみました。手首のボーンはDRIVER:RIG_HAND_Lでしたが、肘はDRIVER:RIG_ForeArm_Lです。

で、DRIVER:RIG_ForeArm_LにIKを設定したのがこちら。

肘部分にオブジェクトを割り当てています。

(ちなみにデフォルトでは、ボーンのテール部分にオブジェクトが紐づきます。)

あと、チェーンの長さを0にしています。この数字を挙げると、途中の関節を使ってアニメーションを再現してくれるのですが、バイクの場合、このオブジェクトの動きを体全体に反映したかったので、あえて0を設定しています。

 

紐づけができたので、アニメーションの設定です。

アニメーションフレームが100まで(たまたま)あったので、この前提で進めます。

ステアリングアニメーションはフレームが100まであると、真ん中が50フレーム目で、ステアリングを左に回すと0に近づき、右に回すと100に近づくように動きます。

まず、50フレーム目を選択し、Hand_L_Helperの位置と回転をマークします。

で、次は左に倒した時のアニメーション。0フレーム目に設定してしまうと、ステアリングを全開に切った状態のアニメーションになってしまいますが、実際ステアリングを100%切った状態というのはあまりないので、40フレームあたりにアニメーションを追加しました。(この辺はカンと好みの世界)

Hand_L_Helperの位置や回転を変更して、右旋回時の腕の良さげな形を作ります。

で、設定出来たらまた位置と回転をマークします。こんな感じ。

わかりにくくてすみません。Hand_L_Helperの位置を下げることで、体が左に傾いています。

これを普通のアニメーションでやろうとすると腕がちぎれたり、変な動きをしますが、ドライバmodを使うとアーマチュアが使えるので、メッシュがいい感じで伸び縮みしてくれるので、自然なアニメーションが作れます。

次に右に傾けたときのアニメーション。右に傾いたときは、左手は肘が伸びた状態になりますので、Hand_L_Helperの位置と回転を設定します。こんな感じ。

肘を伸ばしてます。

左右に倒した時、腕の形を調整しますが、合わせて、手がハンドルからあまり離れないように位置を合わせておきます。

(手首にオブジェクトを紐づけていたときは、この辺自動でやってくれるので便利ですが、体の傾きがいまいちだったため、肘で制御することにした影響です。)

 

ここまで左腕の話をしてきましたが、同じことを右腕にも設定します。

 

腕の設定が終わったのですが、体全体が動く影響で、足も動いてしまい、バイクに足がめり込んでしまったりしてたので、足にも腕同様新しいオブジェクトを作成、割り当てし、こちらは固定して、腕が動いても足が動かないようにしました。

結果はこんな感じ。真ん中(ステアリングまっすぐ)はこれ。

ステアリングを右に切った状態がこれ。

そして、左に切った状態がこれ。

です。

ここまでできたら、いつものように、assettocorsa用のエクスポートツールを使って、steer.ksanimとdriver_base_pos.knhをエクスポートします。(これも以前書いた通り)

オリジナルのドライバmod(kn5)はassettocorsa\content\driverの下に置きます。

driver_base_pos.knhはcar modフォルダ直下、steer.ksanimはcar mod内のanimationsフォルダ内に配置します。

最終的にゲーム内でのアニメーションはこちら。

youtu.be

曲がった方向に体重を載せていく感じ、に見えますでしょうか?

あと、タイヤがスリップしたときは、逆ハンドルを切るので、右に曲がっても体は左に起きてきます。このへんもいい感じでひょうげんできたかな、、、と思います。

 

 

/* -----codeの行番号----- */