アニメーション事始め (8)
~第8回「ピックアップ」
本連載記事ではたまにスクリプトを公開しつつ進めていますが、手間がかかる部分はスクリプトで補助するようにします。
今回はおそらくスクリプトを使わないと難しい箇所、離れているものを拾い上げる動きについて。
なお、本連載でダウンロードできるデータやスクリプトはご自由に利用/改造/改造したのを公開していただいて問題ありません。
あ、いいスクリプトやプラグインのツールができれば「Shade3Dマーケットプレイス」で公開/販売いただければ。
モデリングやモーション作業では個々人で異なった「この機能があればっ!」ということがよく発生しますが、そういうときはピンポイントにスクリプトやプラグインを作ってしまうのも手ではあります。
アニメーションの連載記事では、そろそろスクリプトにがっつり頼るということも増えていきそうです。
また、本連載記事ではあるアニメーションを作るのをゴールとしています(ミノタウロスとか骸骨とか武器を持たせたりだとか、なんとなくバレてるとは思いますが)。
そこを目指して進めていきますが、先は長いですね。その道筋でアニメーションに必要な要素を拾い上げていく、というのが本連載の柱になります。
前回に引き続き、骸骨をモデルとし、武器として「中世の武器セット」を使用しました。
所有権の変わる動き
さて、能書きは置いておいて。
第7回で武器を手に取って攻撃するという動きを行いましたが、所有権が変わる動きの場合は結構難しい問題があります。
前回の攻撃のモーションでは、ボーン構成として手の中に武器のボーンを入れていました。
この場合は、落ちている剣を拾い上げたり、剣を投げて手を離れて飛ばす動き、といった所有権がキャラクタから変わる動きは対処しにいくいです。
剣がキャラクタと親子関係のボーンになっている場合に剣を投げてその後にキャラクタが動くと、剣がキャラクタに合わせて動いてしまいますよね。
それを打ち消す必要が出てきてしまいます。
このような動きの場合は、剣はキャラクタと親子関係にしないでキャラクタに合わせて剣が一時的についてくる、とするほうがすっきりしそうです。
まず、オブジェクトモードで、ブラウザ上の剣のポリゴンメッシュとボーンをキャラクタのボーン階層から外に出します。
この親子関係のキャラクタのボーン構造から特定ボーンだけを階層の外に出す、とする場合は、必ずオブジェクトモードで行うようにしてください。
ボーンやパートの変換行列として移動や回転、スケーリングが指定されている場合、シーン階層の位置を移動した際に姿勢が同じになるように逆変換が行われます。そうすると本来入ってほしくない回転やスケールが入ってしまったりします。
本連載では、すべてのボーンの変換行列での回転は(0, 0, 0)、スケールは(1, 1, 1)であることを前提としていますので、オブジェクトモードでのシーン階層の位置移動では、回転やスケールはそのままで移行できることになります。
ここから、まずはキャラクタのモーションを与えていきましょう。
なお、盾はキャラクタのボーン構造内に持たせたままにしました。
剣の位置をオフセット移動
ジョイントモードで剣のボーン(ここでは claymore_1 としました)を移動させておきます。
少し地面に突き刺さる感じにしてみました。この状態をフレーム0でキーフレーム登録しておきます。
この剣を骸骨がつかんで持ち上げる、という動作を行います。
キャラクタのモーションを与える
剣はそのままで、キャラクタで剣を拾いあげる動作を行います。
剣のある位置に右手を伸ばし、引き上げる動作になります。
0-100フレームのモーションで、35フレーム目から剣を手に取って持ち上げる、としました。
剣をキャラクタの動きについてこさせる (Motion Keyframe Tools - Tracking スクリプト使用)
次に、35フレーム目から剣を骸骨の右手の動きについてこさせます。
剣のボーンは骸骨とは別のボーン構造に分離しましたので、ジョイントモードで剣のボーンのオフセットを変えてキーフレームに登録していけばよいですが、手間ですよね。
そこで指定のフレーム範囲で、特定のボーンAを特定のボーンBに同期させたキーフレームを打つスクリプトを作ってみました(Motion_Keyframe_Tools_Tracking.zip)。
これを解凍し、「Motion_Keyframe_Tools_Tracking」フォルダをShade 3Dのドキュメントディレクトリのwidgets内にコピーします。
Windows環境の場合は「C:\Users\ユーザ名\Documents\Shade 3D ver.15\widgets」、Mac環境の場合は「/Users/ユーザ名/Documents/Shade 3D ver.15/widgets」内に配置します。
その後、Shade 3Dを起動してください。
Shade 3D ver.14以降のBasic/Standard/Professionalのいずれでも動作します。
詳しい使い方は、zipファイル解凍後のreadme_jp.txtをご参照くださいませ。
メインウィンドウの「スクリプト」-「Motion Keyframe Tools - Tracking」を選択すると操作ウィンドウが表示されます。
この例では、35フレーム目で剣を手にして持ち上げる動作を開始、これを100フレーム目まで続けています。
「開始フレーム」に35、「終了フレーム」に100を指定、「キーフレーム間隔」で追加するキーフレーム間隔を指定。
[A]に追従させるボーン名を指定(ここでは剣のclaymore_1 を指定)、[B]に手のボーン名を指定(ここではbone_RightHand)。
注意点として、ウィジットとしてのウィンドウにはキーボードショートカットでテキストをコピー&ペーストできません。
ペーストは、入力フィールドを右クリックしたポップアップメニューより「貼り付け」を選択するようにします。
「回転の反映」のスライダで、ボーンBの回転要素をどれだけボーンAに反映させるか、の割合を指定します。
0だと、回転は加わりません。この例では、若干手首(bone_RightHand)にスナップを効かせて回転を加えてますので、それを反映させるようにしてみました。
「実行」ボタンを押すと、「開始フレーム」から「終了フレーム」の間で「キーフレーム間隔」ごとにキーフレームが登録されます。
「開始フレーム」と「終了フレーム」にはフレーム間隔に関係なく必ずキーフレームが登録されます。
以下のようになりました。
剣が手についてきてますね。オフセット移動と回転、どちらも反映されました。
キャラクタの動きが急な場合(キーフレーム間隔が短い場合)は、「Motion Keyframe Tools - Tracking」の「キーフレーム間隔」は短くするようにしてください。
ただし、あまりキーフレーム間隔が短い場合は、この後のキーフレームごとの手動の微調整が面倒になるので注意です。
剣のボーンでのキーフレームは以下のように割り当てられています (skeleton_bone_pickup_01.shd)。
この後は、右手の握り具合や剣の回転などを手動で微調整していきます (skeleton_bone_pickup_02.shd)。
手の握り具合や剣の位置や向きを修正。
なお、手の握り調整で第7回の「Motion Keyframe Tools - Modify」を使って作業を短縮してます。
こんな感じで、部分部分で追従させる/させない、のキーフレームを割り当てることで、さらに動きにバリエーションを与えることができるようになりました。
剣を投げる
では、所有権の移り変わりのついでで、この手に取った剣を投げてみましょう。
手順は同じです。
35-100フレームで剣を手に取って持ち上げたので、100フレーム目以降で勢いをつけて剣を放り投げるモーションを与えます。
この作業中は、剣はまだ放置しておいてください。
100フレーム目以降は剣がついてきていないので、「Motion Keyframe Tools - Tracking」スクリプトでキーフレームを登録します。
タイムラインは以下のようにしています。
35-100フレーム目で剣を取って持ち上げる動き(すでに追従済み)、
100-135フレーム目で剣を振り上げて投げる直前までの動き。
135-180フレーム目で剣は手離れして飛んでる動きです。
ということで、100-135フレーム目で剣を右手についてこさせればよさそうですね。
「Motion Keyframe Tools - Tracking」ウィンドウで以下のように指定して「実行」ボタンを押しました。
開始フレーム100、終了フレーム135、キーフレーム間隔10、ボーンAに剣の「claymore_1」、ボーンBに右手の「bone_RightHand」を指定して「実行」ボタンを押します。
剣を投げる瞬間は、特に135-140フレームあたりは急激に剣の動きが変化します。
そのため、スクリプトである程度追従させたのちに手作業で剣のボーンを調整していくようにします。以下のようになりました(skeleton_bone_pickup_03.shd)。
135-140フレーム目は急激に変化するため、手作業で剣のボーンの姿勢を調整。ここで手から剣が離れる動きになります。
以下、剣(claymore_1)のキーフレームです。
剣とキャラクタはそれぞれ独立しているため、手離れした剣の動きをつけるのは簡単ですね。
ということで、今回はここまで。
剣を手に持って投げる、という動きを行いました。
ここで作成した最終的なモーションについてはダウンロード(anim_8_skeleton_motions.zip)できるようにしました。
ただし、骸骨/剣/盾のモデリングデータはつけておらず、ボーンとモーションだけになります。
ここまでで、待機/歩く/走る/攻撃/武器を取る/武器を投げる、という動きをパターンごとに行いました。
後はこれを組み合わせることでストーリー性を出していくことになります。
では、次から本格的に動きをつなげていきましょう。
と、その前に、、、、。
実は今までのポージングやモーション付けは、FK(Forward kinematics)と言う、ボーンの親から子を順番に回転させて制御してました。
モーションの動画を見ると、足が小刻みに動いているものがあるのに気付いた方もいらっしゃるかと。
接地や屈伸運動については、FKだけの操作は慣れていないとなかなかうまくいかないものでもあります。
ここで、IK(Inverse kinematics)についても述べておこうかと思います。
でも、それは次回のお話しになります。
ということでちょっと予告を小出しにして、次回もお楽しみに。
文:ft-lab
この記事へのご意見・ご感想などはこちらで受け付けております。