blender の箱を消したら

blender を覚えたい蜂砂の発見や操作メモです。オブジェクトの動かし方は覚えたので中級者を目指したい。

モノをつかんで移動して置くアニメーション

意外と見つからない「置く」

オブジェクトをつかんで他のところへ移す、というアニメーションを作ってみたい。とりあえず試してみると、キャッチして移動させるところまでは "child of" コンストレイントを使うとできた。ところが、離すときにこのコンストレイントの影響を0にする必要があり、そうするとオブジェクトが元の場所にいきなり戻ってしまう。「置く」動作ができない。

"pickup release hold drop"などのキーワードでやり方をぐぐってみたのだけど、同じ場所に「置く」(つまり、元の場所に戻すだけ)だったり、「置く」動作の時にそれっぽい位置に手動で移動させるみたいなチュートリアルがいくつかあるばかり。なんかしっくりこない。空のオブジェクトを置く位置に作って、置く際にその空オブジェクトの位置と角度をコピーするというのもあった。なんかすごそうだけど難しい。

そうだ、物理処理をしてしまえばいいのでは?

オブジェクトをアニメーションさせる際に、シミュレーションの世界で処理してしまえば、置いた位置にそのまま残るのでは?というかこれは確実に残るだろう。そこをベースにちょっと考えてみた。

f:id:beesand:20200324001717p:plain

まずは、適当に舞台を作る。UFOキャッチャーのアームぽいのとつかまれるサル、そして床。最初、床にも物理設定をして落とすイメージでいたけども最終的にそうしなくてもできることがわかった。

アームに他の位置へ移動させるアニメーションをつけるのだけど、その前に、サルにアームの子供になるよう Child Of コンストレイントを設定しておく。子供にした途端、サルが親のオブジェクトとなったアームの位置や回転の状態にひっぱられて変なところにいってしまう。これを Set Inverse ボタンを押して初期位置になおす。

f:id:beesand:20200324001733g:plain

で、アームに適当に位置・回転の LocRot キーフレームを打ってアニメーションをつけた。サルは Child Of がつきっぱなしなので、当然ずっと持ったままになってしまっているが、とりあえず今はOK。

f:id:beesand:20200324001812g:plain

こどもになったりこどもじゃなくなったり

ここで、サルに物理設定をしておく。[物理演算プロパティ]から Rigid Body ボタンを押して、 Type Active の剛体にする。ただ、物理シミュレーションをするわけではなく、アニメーションの制御は基本的にこちらでしたいので、Dynamicのチェックをはずし、Animatedのチェックをつけておく。

f:id:beesand:20200324001833p:plain

ここから、つかんだり離したりする際の設定をしていく。基本的に以下の通りにする。

  • つかむ:直前のフレームおよびその直後のフレームで・・・
    • Child OfInfluence0.000 → 1.000 にする。
    • Rigid BodyAnimatedを オフ → オン にする。
  • 離す:直前のフレームおよびその直後のフレームで・・・
    • Child OfInfluence1.000 → 0.000 にする。
    • Rigid BodyAnimatedを オン → オフ にする。

f:id:beesand:20200324001841p:plain

画像がちょっとわかりづらいけども、これは離してる状態から掴む状態に移行するところ。左が10フレーム目で、離した状態の最後。Child Ofの影響が0(子供になっていない)で、かつAnimatedをオフにしてアニメ制御していない状態。右が次の11フレーム目で、掴む状態の最初。Child Ofの影響を1(子供にする)にして、かつAnimated をオンにすることでアームの動きに追従してアニメーションすることができる。

離すときは、コレの逆(「つかむ」→「離す」)のキーフレームを打てばよい。んでできたアニメーションがこれ。

f:id:beesand:20200324001856g:plain

問題なくキャッチ&リリースができた。つかむ・離すをまた繰り返したいときは、前述の通りキーフレームを何度でも打つことができる。

物理設定、いいんだろうか

正直、物理設定(Rigid Body)をした際のコストがわからない。シミュレーションはしていないので動作が重くなることはないと思うけども、本当は最初にあげた「離すときにそれっぽい位置に移動させる」とした方がいいのかもしれない。

ただ、移動先の正確な位置や角度を見つけ出すのは若干めんどくさい。親子付けして移動されたオブジェクトは、位置などのパラメタが変わらない。なので、離す位置で Apply(Ctrl+A) - Visual Transform を選び一旦確定させる。すると、ツールシェルフの Item にパラメタが反映されるので、それを「メモ」しておく。メモしたら Ctrl+Z で動作を確定前に巻き戻して、手でメモどおりに入力していく。という方法しか思いつかなかった。

これをいっぺんにやってくれるアドオンがあった。これが一番ラクなのかも。

blender-addons.org