ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【Blender】オブジェクトを掴むアニメーションを作成する方法

 今回はオブジェクトを掴むアニメーションをBlender上で再現する方法です。


1:掴む物がない状態でのアニメーションを作成する
 今回は以前の記事で作ったアニメーションをそのまま流用します。
【Blender】ボーンを使わないでアニメーションを作成する - ソースに絡まるエスカルゴ

 以下の記事のやり方に沿って新規ファイルに元のファイルを読み込ませます。
【Blender】別のBlenderファイルを読み込む方法 - ソースに絡まるエスカルゴ

 動きとしては以下のような形です。何かを掴んで移動させるという動作をさせています。
f:id:rikoubou:20180402152546g:plain


2:掴む対象物のオブジェクトを作成する
 掴む対象物専用のモデルを作成するのでもよいですが、面倒なのでここではTorusを掴むことにします。

 最初のフレームになっていることを確認してから、左側の「Create」タブから「Torus」を選択します。
f:id:rikoubou:20180402182826p:plain

 このままだと大きいので追加された「Torus」を右クリックで選択した状態で「Objectアイコン」の「Scale」を調節します。
f:id:rikoubou:20180402183040p:plain

 今回はScaleの値全てを「0.3」に設定しました。
f:id:rikoubou:20180402183212p:plain


3:掴む対象物の座標を合わせる
 今回のアニメーションでは60フレームのところでハンド部分を閉じて物を掴むようにしているので、60フレーム目を選択します。
f:id:rikoubou:20180402183516p:plain

 この時のハンド部分に合うように「Torus」を移動させて座標を合わせます。
f:id:rikoubou:20180402183709p:plain

 「Torus」を移動させたら、「Torus」を選択した状態で「iキー」を押して現在の位置などを登録します。
f:id:rikoubou:20180402183833p:plain

 これで選択した項目だけ(Torusだけ)がキーフレームとして登録されます。
f:id:rikoubou:20180402183953p:plain

 1フレーム目から「Torus」は今の位置にいて欲しいので、1フレーム目を選択して「iキー」を押して現在位置を登録します。
f:id:rikoubou:20180402184142p:plain

 これで「Torus」は1フレーム目から60フレーム目までは同じ位置になります。
f:id:rikoubou:20180402184236p:plain


4:掴む対象物に「Child Of」を追加する
「Torus」を選択した状態で「Constraintsアイコン(鎖のようなアイコン)」を選択し、「Add Object Constraint」から「Child Of」を選択します。
f:id:rikoubou:20180402184733p:plain

 追加したら親にしたいオブジェクトを「Target」から選びます。今回はグリッパ部分で掴んでいるので、グリッパの右側のオブジェクトを選択します。
f:id:rikoubou:20180402184831p:plain

 選択するとおかしな位置に「Torus」が移動しますが、「Influence」の値を0にすると元の位置に戻ります。
f:id:rikoubou:20180402185129p:plain
f:id:rikoubou:20180402185205p:plain


5:掴む対象物をキーフレーム登録していく
 1〜60フレームまではグリッパの影響を受けないので、1フレーム目にして「Influence」にマウスカーソルを乗せた状態で「iキー」を押して「Child Of」のキーフレームを登録します。
f:id:rikoubou:20180402185501p:plain

 キーフレームが登録されると項目が追加され、登録された部分が黄色くなります。
f:id:rikoubou:20180402185604p:plain

 同様にして60フレーム目も「Influence」の内容を登録します。
f:id:rikoubou:20180402185725p:plain

 これで1〜60フレーム目までは親の影響を受けないことになります。

 61フレーム目からは親の影響を受けるので、61フレーム目にして「Influence」の値を1にします。
f:id:rikoubou:20180402190040p:plain

 すると「Torus」がおかしな位置にいくので「Clear Inverse」ボタン→「Set Inverse」ボタンの順番で押します。
f:id:rikoubou:20180402190200p:plain

 これで「Torus」が元の位置に戻りました。
f:id:rikoubou:20180402190256p:plain

 この状態で「iキー」を押して61フレーム目に「Influence」を登録します。
f:id:rikoubou:20180402190609p:plain

 ここまでで動きを確認すると1〜60フレーム目は何も起きませんが、61フレーム目からはロボットアームのグリッパ部分に連動することがわかります。
f:id:rikoubou:20180402190510g:plain

 動きとして84フレームまではグリッパが閉じていて85フレーム目からグリッパが開き始めているので、今度は85フレームから親の影響を受けないようにします。
f:id:rikoubou:20180402190933p:plain

 そのために84フレーム目を選択した状態で、「Influence」の値が1であることを確認して「iキー」でキーフレームを登録します。
f:id:rikoubou:20180402191203p:plain

 また親の影響を受けて移動しているので3D View画面上で「iキー」を押して位置や回転などの情報もキーフレームとして登録します。
f:id:rikoubou:20180402191936p:plain

 これで61フレーム目から84フレーム目までは親の影響を受ける設定になりました。

 次に85フレーム目からは親の影響を受けないようにしないので、85フレーム目を選択した状態で「Influence」の値を0にして「iキー」でキーフレームを登録します。
f:id:rikoubou:20180402192139p:plain

 ただしこの状態だと親の影響を受ける前の位置になってしまうので、「Torus」の位置を調節してから「Torus」の位置情報などを「iキー」でキーフレームとして登録します。
f:id:rikoubou:20180402192323p:plain

 これで85フレーム目以降は親の影響を受けないで移動した先の座標に置かれることになります。

 この状態でアニメーションとして再生すると以下のように「Torusを掴んで移動させる」という動きになります。
f:id:rikoubou:20180402192650g:plain


 以上がオブジェクトを掴む動作を作成する方法です。同様に剛体シミュレーションにおいても「あるところまでは物理演算、あるところではオブジェクトの動きに従う」みたいな使い分けも設定できます。

 人型にすればアイテムを持つというようなものにも応用できると思います。


・参考資料
www.youtube.com