【Blender5.0】アニメーションデータ解説:F-Curve・スロット・アクション・NLAの関係を整理する

blender
記事内に広告が含まれています。

Blenderでアニメーションを作ると、NLA(Non-Linear Animation)、アクションエディタ(Action Editor)、ドープシート(Dope Sheet)、グラフエディタ(Graph Editor)…と、複数のエディタを使い分ける必要があります。
同じアニメーションデータを扱っているはずなのに、エディタごとに表示方法や用語が異なり、「何をどう操作すればいいのか」がわかりにくく感じることもあります。

この記事では、Blenderのアニメーションデータの構造を整理し、
どの単位が何を表しているのか」を理解することで、より効率的に作業できるワークフローを目指すための解説を行います。

キーフレーム(Keyframe)、F-Curve(Fカーブ)、アクション(Action)、スロット(Slot)など、各データがどの単位でどのように機能しているかを整理したい方にオススメの記事です。

せっかく作ったアニメーションデータが消えた!とか、意図しないアニメが再生された!などのトラブルも防ぐことができるようになります。

※ちなみにそれぞれのエディタの使い方などを解説するものではないです。一通り触ったことあるけどなんとなく使ってるみたいな方向けです。

この記事は、Blenderのアニメーションデータ(キーフレーム(Keyframe)、F-Curve(Fカーブ)、アクション(Action)、スロット(Slot))についてまとめている中級者向けの記事です。

難易度 3.0

スポンサーリンク

アニメーションデータの全体像

Blenderのアニメーションデータは以下の階層で構成されています。

キーフレーム → F-Curve → スロット → アクション → NLAストリップ

※厳密にはF-Curveはスロット内に格納されますが、理解しやすいように「概念の大きさ順」で並べています。

  • 特定のフレームにおける値…キーフレーム
  • 動きとしての単位…F-Curve
  • データブロック単位でまとめる…スロット
  • データ(保存・受け渡し用)としての単位…アクション
  • アニメーション制作作業の単位…NLAストリップ

左側のキーフレームから順番に解説していきます。

スポンサーリンク

アニメーションの最小単位:キーフレームとF-Curve

まず、アニメーションの最小単位から整理します。

オブジェクトを出して、フレームを動かして位置を移動させ、キーフレームを打つ。この作業を複数つなぎ合わせて、フレームによってオブジェクトの場所を変えていく動きをつけていくことができます。

  • キーフレーム(Keyframe)
    特定のフレームにおける値を記録したもの。例えば「フレーム24で位置をX=1m」といった情報です。
  • F-Curve(Fカーブ)
    キーフレームを繋いで補間した曲線。オブジェクトの位置、回転、スケールなど、時間による変化を管理します。

ポイント
キーフレームだけでは単なる点の集合ですが、F-Curveとして補間されることでアニメーションとして機能します。

F-CurveのFは何?

Fの文字について明確に記した箇所はありませんが、一般的な解釈として
F-Curve(Fカーブ)=Function Curve(関数曲線)と考えられています。

Fカーブとチャンネル(F-Curves & Channels)

F-Curveは、Blenderにおけるアニメーションの基本単位です。

Blenderのアニメーションエディター(ドープシート、グラフエディターなど)には、左側にチャンネルリストが表示されます。

これらのチャンネルは各プロパティをアニメーションするF-Curveに対応しています。

チャンネルは、チャンネルグループ(Channel Group)と呼ばれる簡易的な整理機能もサポートしています。
たとえば、デフォルトでは各ボーンごとにチャンネルグループが作られます。

一部のBlender機能はチャンネルグループに依存していますが、多くの場合は単なる整理用機能です。

グラフエディタでのチャンネルリストとチャンネルグループ。Channel List and Channel Groups in the Graph Editor

キーフレームとF-Curveを調整するだけでもアニメは作れますが、このデータを組み合わせたり、別のアニメとタイミングを合わせたり、ということは難しいです。他のアニメーションと組み合わせるには、スロット、アクションという概念が必要になります。

スポンサーリンク

スロットとアクションの関係

次に、もう少し大きな単位である スロットアクション です。

  • スロット(Slot)
    アクション内で個別の動きを管理する単位。例えば「手を振るモーション」「ジャンプするモーション」といった単体の動きをまとめます。
  • アクション(Action)
    F-Curveをまとめたアニメーションデータブロック。タイミングを合わせたり、データを保存・受け渡ししたりするときに使います。

アクション(Action)とは

アクションは、Blenderにおけるアニメーションデータの入れ物です。
たとえば、オブジェクトの位置をアニメーションさせると、そのアニメーションはオブジェクト自身に直接保存されるのではなく、アクションの中に保存されます。オブジェクトは、そのアクションリンク(参照)することでアニメーションされます。
これは、メッシュがマテリアルを使ってシェーディングされる仕組みとよく似ています。

アクション自体もデータブロックであるため、他の .blend ファイルに簡単にアペンド(追加)したりリンクしたりできます。
つまり、アクションは単なる保存先としてだけでなく、アニメーションデータを整理し、再利用するための仕組みとしても使えます。

※アクション内のアニメーションデータは常にスロットとして整理されているため、何かをアニメーションさせるには、最低でも1つのスロットが必要です。

アクションスロット(Action Slots)

アクション内のアニメーションデータは、さらにスロット(Slot)という単位で整理されています。
各アクションは複数のスロットを持つことができ、それぞれのスロットに異なるアニメーションデータが含まれます。

スロットはアクション内の整理用単位で、オブジェクトやマテリアルなど各データブロックはアクションにリンクして使用し、アクションが使用するスロットを指定しています。

スロットの目的

スロットの目的は、1つのアクションの中に、複数のデータブロック用の異なるアニメーションデータを保存できるようにすることです。

スロットを使えば、オブジェクト用のアニメーションとマテリアル用のアニメーションを、同じアクション内の別々のスロットに保存できます。右図のように、別のオブジェクトの動きと合わせたい、動きと合わせてマテリアルの色を変えたい、というタイミング合わせをしたいときに便利な機能です。

※例えばリグなどで、手の動き用スロット、足の動き用スロット、というように分けて使うものではありません。違うオブジェクト、またはマテリアルなど、データブロックの種類が違うものに適用すべきです。

スロットはアクションに紐づく
スロットは作成されたとき指定されたアクション専用のデータとなります。一応オブジェクト同士でアクション統合したり分離したりはできますが、簡単に別のアクションにつけたり外したりはできません

Actionメニューの中にSeparate Slotsなどの機能はあるが、特定のアクションに移動させるようなものはない。

Blenderでは
Action(アクション)というデータブロックにアニメが保存される
オブジェクトやマテリアルのデータブロックが、アクションのデータブロックをリンク(参照)してアニメーションしている

スロットとは
1つのアクションの中に、複数の「別々のアニメーションデータブロック」を置く仕組み

スポンサーリンク

データブロックとアクションの関係

さっきからデータブロックという言葉を連発していますが、データブロックとはBlenderがデータを管理する単位で、すべての要素(メッシュ、マテリアル、画像、アーマチュアなど)はこのデータブロックの一種です。詳しくは右の記事に書いています。

それぞれのデータブロックがアクションをリンクしている

データブロックがアクションをリンク(参照)しているとは、つまり、右図のような感じです。

オブジェクトデータブロックが、トランスフォームのアクションをリンクし、
メッシュデータブロックがシェイプキーのアクションをリンクし、
マテリアルデータブロックがシェーダーノードツリーのアクションをリンクしている

というイメージ図です。

だからもちろんスロットにはタイプがあって、オブジェクトにしか割り当てられないもの、マテリアルにしか割り当てられないものがあります。

スロットのタイプ

各スロットには、
関連付けられたデータブロックのタイプ(例:「マテリアル」「オブジェクト」など)があります。
これは、そのスロットが最初にどのデータブロックをアニメーションするために使われたかによって、自動的に設定されます。

スロットのタイプは、アクションエディターのチャンネルリストのアイコンや、右側のパネルのSlotにも記載されています。

アクティブなスロット

そしてそれぞれのデータブロックは複数のアクションをリンクできます。右図のようにアニメーション(Animation)パネルの中でアクティブな状態のアクションを指定することで、現在再生・編集するアニメーションを決めています。

なので、意図せずアニメーションが再生されてしまっているときは、アイコンクリックでアクションやスロットをアクティブな状態から外し、アニメーションさせないようにできます。

アクションスロットの用途の条件

上でも書いたのですが、アクションスロットシステムを使ってタイミングを合わせるのは、違うデータブロックのアニメに限られます。ドライバーで別々のアニメーションのタイミングを合わせていたような作業を、もっとアニメーションデータとして編集しやすくなったというイメージです。

リグなどで手足の動きを合わせたい、という場合は今まで通りNLAでアクションのタイミングを合わせます。
アクションスロットでのアニメタイミング合わせは条件が限られているという話でした。

スロットは特定のデータブロック専用ではない

スロットは、特定のデータブロックのためのものではありません。どのデータブロックでも、どのスロットでも使用できます。(※ただしスロットのタイプ(Object / Materialなど)は一致している必要があります。)

例えば、以下のように別々のファイルでアニメーションを作ったとします。1つはCubeの位置を36フレームで5m移動、もう1つはSphereの位置を48フレームで8m移動するアニメーションです。

まず、キーフレームを打つと自動でアクションスロットが作成されます。名前は以下のように、オブジェクトのデータブロックに沿ったものが作られます。

  • Cube…アクション名:CubeAction、スロット名:Cube
  • Sphere…アクション名:SphereAction、スロット名:Sphere

CubeにつけたアクションをSphereにつけてみます。

File > Append をクリックして、
Test01.blendファイル ー Action ー CubeActionを選択して
Appendを押します。

アクションエディタ(Action Editor)でアクションのメニューを開くと、CubeActionが入っていて選択できるようになっています。スロットのメニューも開くと、Cubeというスロットが入っていて、Appendしたアクション、スロットのデータがきちんと選択できるようになっていることがわかります。

SphereのアクションにCubeActionをつけ、スロットにCubeを選択します。

アニメーションさせると、CubeにつけたアニメーションをSphereにつけることができました。

アクションやスロットは、ある特定のオブジェクト専用のデータではないので、スロットのタイプが同じで、同じプロパティがあるならば、アニメーションデータを共有して使うことができます。

※例えばこの場合はLocationの値なので、どちらのオブジェクトもそのプロパティを持っていてアニメーションをさせることができました。これが例えばマテリアルやドライバーのプロパティで、片一方が持ってないプロパティだったら、アニメーションさせることはできません。

スポンサーリンク

アクションの扱い方

オブジェクト(または他のデータブロック)を初めてアニメーションするとき、キーフレームを打った時点で、Blenderは自動的に適切なアクションを割り当て、見つからなければ、新しいアクションを作成します。

アクションが割り当てられると同時に、そのデータブロック用の新しいスロットも作成・割り当てされます。

アクション選択の自動判定

Blenderは、密接に関連したデータブロックのアニメーションは、同じアクションに入るべきという考えに基づいて、アクションを自動選択します。(※これはBlender内部の設計思想であり、必ずしもユーザーの意図通りとは限りません。)

たとえば、カメラオブジェクトがすでにアニメーションされている状態でカメラ(Camera)プロパティのカメラデータ(焦点距離など)にキーを打つとカメラオブジェクトに割り当てられているアクションが、カメラデータにも再利用されます。(下図でいうと、左側でCameraActionを作成し、Locationを変えるCameraというスロットを作っていたが、Focal Lengthの値にキーフレームを入れると、勝手にCameraActionの中のCamera.002スロットにアニメーションが作成された。)

この関係は双方向で、カメラデータが先にアニメーションされている場合も、カメラオブジェクトにアニメを作成すると同じアクションが使われます。

同様に密接に関連していると見なされる例:

  • マテリアルとそのノードツリー
  • ワールドとそのノードツリー
  • メッシュとそのシェイプキー

つまり、意図せず既存のアクションに勝手にスロットが割り当てられてしまう恐れがあるということです。作ったはずのアクションが見当たらない、作った覚えのないスロットが入っているときはこの仕様を思い出してみましょう。

例外

1つのデータブロックが複数のユーザーを持つ場合、この「密接に関連している」という判定は無視されます。
たとえば、1つのメッシュデータを複数のオブジェクトが使用している場合、通常は関連していると見なされるメッシュとオブジェクトであっても、別々のアクションが割り当てられます。

アクションとスロットを手動で割り当てる

Blenderに任せるだけでなく、アクションとスロットを手動で指定することもできます。
同じデータブロックのアニメーションを作成する場合は、自動で既存のアクションに割り当てられないためにもなるべく手動で割り当てた方が安全です。

基本的なアニメーションのアクション/スロット作成

基本的なオブジェクトのトランスフォームや、リグを動かすようなアニメのアクション作成は、Action Editorで行えます。

キーフレームを打つ前に、ActionやSlotの名前のところのNewボタンを押して作成し、名前を変更したりできます。

例えば、以下のように名前をつけることができます。

  • アクション名…Suzanne_Smile
    スロット名…Object
  • アクション名…Suzanne_Sad
    スロット名…Object
  • アクション名…Suzanne_Sleep
    スロット名…Object

アクション名で各アクションを区分するように使い、スロット名はデータブロック名などをつけておきます。(アクション名が違うなら、同名でもスロットは違うデータとされます。)

データブロックが違うもので、タイミングを合わせたいものだけ、同じアクションを使うようにしましょう。

また、ビューポートで選択できるオブジェクトデータや、カメラ、リグ以外のデータブロックのスロットはアクションエディタでは選択できません。次のセクションで解説するように、各データブロックのプロパティで作成・選択することができます。

その他のデータブロックのアクション/スロット作成

各データブロックのプロパティエディタには、アニメーション(Animation)パネルがあり、
そこでアクションとスロットを作成・選択できます。

例えばマテリアルデータブロックなら、
Material Property > Animationに
MaterialShader Node Tree のアクション設定があります。
ノードを使ってアニメーションをつける場合はShader Node Treeの方を使います。

マテリアルプロパティのアニメーションを行うとき(ビューポートディスプレイのプロパティを変えるなど)はMaterialの方を使います。

ジオメトリノードの場合は、エディタの右側パネル、Groupタブの中の下側にアニメーションパネルがあり、そこでアクションなどを作成・選択できます。

スロット選択のドロップダウンには、
タイプが一致するスロットのみが表示されます。

スロット名の重複ルール

1つのアクション内では、「スロット名 + 関連タイプ」の組み合わせが一意である必要があります。

  • オブジェクト用「Cube」
  • マテリアル用「Cube」

ならOKですが、

  • オブジェクト用「Cube」
  • オブジェクト用「Cube」

は不可です。

この場合、Blenderは自動的に「Cube」「Cube.001」のように名前を調整します。

スポンサーリンク

NLAでのアニメーションデータ

実際のアニメーション作業では、アクションを NLA(Non-Linear Animation)エディタ のストリップとして並べて編集するのが一般的です。
アクションをストリップ化し、手、足、胴体などの動きを重ねて複雑な動きを簡単に組み上げることができます。

NLAとアクション

アクションをストリップ化する過程でアニメーションデータがどのような扱いになっているかを見ていきます。

右図はオブジェクトに位置移動のアクションを作ってNLAエディタを開いたところです。

まず、アクティブなアクションを何も設定してない場合、NLAエディタにはトラックが表示されず<No Action>と文字が出ます。

アクティブなアクション、スロットを設定すると、トラックにアクションが表示されます。

Push Down Actionをしてアクションをストリップ化すると、そのアクションはアクティブではなくなります。

アクティブではないけど、ストリップがそのアクションをリンク(参照)しているためアクションデータが消えることはありません。

スロットが複数ある場合

スロットが複数ある場合、トラックはスロットごとに別れます。

スロットごとにストリップ化されます。

NLAでもアクションはそのまま使える

下図は、同じアクションを、

  • アクティブなアクションの状態
  • ストリップ化したアクション

で並べたものです。このような場合、アクティブなアクションは必ずトラックの一番上に並ぶことになります。

このときBlendingの設定がデフォルトだとReplace(置き換え)になっているため、下のストリップのアニメは無効化されますが、Add(加算)にすると、どちらのアニメも再生して合成ができます。(例えばZ方向の移動アニメだとすると、移動距離が二倍になります。)

ただ、ストリップ化した方が移動や複製などができるのでアクションのままで使うのはあまりオススメしません。

また、NLAのほかにアクティブなアクションがどこかに残っていると、予期しないアクションが再生されてしまう恐れがあるので、アクティブなアクションを削除するか、すべてストリップ化しておくと安全に作業できます。

ストリップのキーフレーム編集とリンク複製

ストリップからキーフレーム編集

ストリップを選択しTabキーを押すと、キーフレームを編集できるモードに入ります。これは実際アクションデータを編集して書き換えています。

リンク複製

ストリップを複製するときは、以下の2つの複製方法があります。

  • Shift + Dリンク複製
  • AltD複製

実際やってみると、リンク複製した方は、後から元のアクションデータを書き換えると、その変更が反映されていますが、ただの複製は反映されていません。

ただの複製は中身が同じアクションを新規作成しています。

複製コマンドが逆になっている
例えばオブジェクトを複製するときは、Shift + Dがただの複製、Alt + Dがリンク複製になっています。エディタによってコマンドが違うので注意してください。(NLAでストリップを複製するときは普通アクションを参照したいだろうということで、ユーザーが慣れてよく使うShift + Dにリンク複製を割り当ててるんだと思います。)

スポンサーリンク

アクションはいつ消えるのか

作業してて、一番心配になるのは、作ったアクションが消えてしまうことだと思います。

Blenderはリンク(参照)されてないデータは消してしまうので、アニメーションデータも同様に消えてしまうことが普通にあります。

アクティブでないアクションは消える可能性がある

アクティブなアクションを設定すると、アクティブでないアクションには0という数字がつき、
0ユーザーに参照されている→誰にもリンク(参照)されていない
と認識されます。

そうなると、ファイルを保存してもう一度開き直すと、0と表示されたアクションは消えてしまいます。

フェイクユーザー(Fake User)化

これを防ぐために、使わないアクションには、盾のようなアイコンをクリックしてフェイクユーザー(Fake User)化する方法があります。

フェイクユーザー化とは、ユーザーがリンクしてるから0ユーザーじゃないよとBlenderに伝えて、データの削除を防ぐ機能です。こうするとファイルを閉じても消えません。

※また、NLAでストリップ化することでも、アクションをリンク(参照)するようになるので削除されなくなります。

アニメーションデータが消えないようにするには以下のような対処をしておくと安心です。

  • 0とついたアクションはフェイクユーザー化する
  • NLAエディタでストリップ化しておく

ちなみに、このようにいきなり消えないようにするためか、Blenderが勝手にアクションをストリップ化して、アクションが消えないようにすることがあります。消したいのにアクションが消えないときはNLAエディタをチェックしてみてください。

スポンサーリンク

キーフレームからNLAまでの全体像

一番最初でも出しましたが、もう一度まとめると、Blenderのアニメーションデータは以下の階層で構成されています。

キーフレーム → F-Curve → スロット → アクション → NLAストリップ

  • 特定のフレームにおける値…キーフレーム
  • 動きとしての単位…F-Curve
  • データブロック単位でまとめる…スロット
  • データ(保存・受け渡し用)としての単位…アクション
  • アニメーション制作作業の単位…NLAストリップ

各エディタでの作業

  • アクションエディタ…アクション作成・タイミング合わせ(キーフレーム)
  • ドープシート…全体のキーフレーム移動など全体の調整・一覧確認
  • グラフエディター…動きそのものを編集(F-Curveを編集)
  • NLAエディタ…ストリップを組み合わせたアニメーション作成

大体の目安ですが、自分がどんなデータを扱っていて、どのような目的でエディタを使っているかざっくりわかっておくと、作業がスムーズに進むようになると思います。

また、自分が初心者のころにアニメーションデータが消えたり、意図しないアニメが再生されたりと苦手意識があったので、そのような心配することなくアニメーション作成作業ができるようになると思います。

レイヤー(Layers)とストリップ(Strips)

内部的には、アクション内のアニメーションデータは、さらにレイヤー(Layers)ストリップ(Strips)に整理されています。

これは現在のところUIには公開されておらず、現時点でのアクションの使い方に影響するものではありません。
ただし、Python APIではレイヤーとストリップが公開されているため、アクションを扱うスクリプトやアドオンを書く場合は、この構造を理解しておく必要があります。

コメント