LogoMark.png

Blender/Animation の変更点


#author("2023-08-07T13:20:56+09:00;2022-02-22T10:55:09+09:00","default:inoue.ko","inoue.ko")
#author("2023-08-07T13:27:42+09:00;2022-02-22T10:55:09+09:00","default:inoue.ko","inoue.ko")
*Animation
Blender Tutorial
~

Blender では、オブジェクト全体の座標・形状、またカメラ、マテリアル、ライト、ワールドなどのプロパティーを、時間経過ととも変化させるかたちで、様々なアニメーションを実現することができます。

__[[&color(red){''&fontawesome(fas fa-film); 解説動画(アニメーションをはじめるにあたって)''};>https://youtu.be/weSuIY3uBhE]]__

~
~

**はじめに
***様々なアニメーションの手法
-キーフレームの設定によるオブジェクトのトランスフォーム
時間の経過とともに''移動、回転、拡縮''などの変化を与えることができます。また「タイヤを回転させながら移動する車」のように、車のボディ(親)の移動とタイヤ(子)の回転を階層化することで、複合的なアニメーションも実現できます。
-パスアニメーション
アニメーションパスにオブジェクトを紐付けすると、パスに沿った移動制御が可能になります。
-オブジェクトの形状変形
以下のような方法で形状の変化をアニメーション化することができます。
--シェイプキー:基本形状と変形パターンを複数設定して制御する
--アーマチュア:不可視の内骨格(スケルトン)を持たせて動きを制御する
--ラティス:不可視の外骨格を持たせて動きを制御する
-様々なプロパティーの変化
アニメーション化できるのは、オブジェクトの動きだけではありません。マテリアルの各種パラメータやライトの輝度、カメラのズームなども変化させることができます。
~

***キーフレーム
アニメーションの基本は「キーフレームの設定」にあります。移動・回転・拡縮あるいは変形、いずれも変化の「節」となるフレーム(時刻)に、その時点でのパラメータを記憶させることで、中間の状態を自動的に補間するかたちで、アニメーションが実現します。

アニメーションの設定作業では、今見ているシーンが何フレーム目であるかを意識する必要があります。現在フレームは、タイムライン上に表示されます。
#image(Blender/CurrentFrame.jpg)
上の図では、現在位置は 30フレーム、キーフレームが 1, 40, 80 にあります。
~

***プロパティーの状態色
オブジェクトの持つプロパティ(座標等)は、アニメーションの設定状況に応じて以下のような状態色で表示されます。
-灰色:アニメーションなし
-黄色:現在のフレームがキーフレーム
-緑色:異なるフレームにキーフレームが設定されている
-橙色:キーフレーム値から変更されている
-紫色:ドライバーによって制御されている
~


***アニメーションのプレビュー
オブジェクトにアニメーションが設定されている場合、以下の操作でアニメーションをプレビューすることができます。
 キーボード:[SPACE](トグル)
 タイムラインの利用:再生(▶︎)・停止(I I)・頭出し(I◀︎)
~

***アニメーションの設定に使うエディター
-Timeline Editor:初期ワークスペースに表示されています。
-Dope Sheet:タイムラインとほぼ同様です(メニュー構成が異なる)。
-Graph Editor:キー値の変化をグラフで表示します。

尚、いずれのエディタも、画面左端のプルダウンメニュー(>)をクリックすることで、キーフレームの状態を詳細に確認することができます。
~

***アニメーションのレンダリング
アニメーションのアウトプットは当然動画ファイルとなります。以下の方法で、動画ファイルとして出力されます。
 Topbar > Render > Render Animation

出力仕様は、プロパティーエディターの Render Property タブと Output Propertyタブで、必要な項目を設定します。
-Render Property
--Render Engine:Eevee(高速) または Cycles(高画質)
--Frame Rate:30 fps など
-Output Property
--Format:X 1920, Y 1080 など
--Frame Range:開始フレームと終了フレームの間が動画出力されます
--Output:書き出しディレクトリ、File Format(FFmpeg など)
~
~

**Keyframes
アニメーション制御の大半は、キーフレームを用いて行います。キーフレームとは、当該フレーム(時刻)において実現されるべき、位置、回転角その他のプロパティ(属性値)を保持したフレームのことで、時系列に複数のキーフレームを持たせることで、キーフレーム間のプロパティは自動的に補完されます。
-__[[&color(red){''&fontawesome(fas fa-film); 解説動画|キーフレームの基礎)''};>https://youtu.be/mCiApvdCFH8]]__
-__[[&color(red){''&fontawesome(fas fa-film); 解説動画|キーフレームの基礎''};>https://youtu.be/mCiApvdCFH8]]__
-__[[&color(red){''&fontawesome(fas fa-film); 解説動画|キーフレームの編集・1''};>https://youtu.be/u14rFUuV7us]]__
-__[[&color(red){''&fontawesome(fas fa-film); 解説動画|キーフレームの編集・2''};>https://youtu.be/Bu0MHMRTUKE]]__
-__[[&color(red){''&fontawesome(fas fa-film); 解説動画|キーフレームの編集・3''};>https://youtu.be/H1YMxO7eK3A]]__
-__[[&color(red){''&fontawesome(fas fa-film); 解説動画|マテリアルのアニメーション''};>https://youtu.be/u2gzuwQGgZw]]__
-__[[&color(red){''&fontawesome(fas fa-film); 解説動画|カメラ・照明のアニメーション''};>https://youtu.be/wXgFlPNgpMA]]__
~

***キーフレームの設定
オブジェクトのキーフレームは、キーボードの [ I ] (Insert Keyframe)をプレスして設定します。
 [ I ] Key ( Header Menu > Object > Animation > Insert Keyframe )
#image(Blender/InsertKeyframeMenu.jpg,right,30%)
''3D Viewport 上で対象となるオブジェクトを選択した状態で [ I ] Key をプレス''すると、Insert Keyframe Menu が表示されるので、設定したいプロパティー項目を選択します。
#clear

#image(Blender/InsertKeyframeZoom.jpg,right,30%)
''プロパティーパネル上の対象項目の上にマウスを合わせた状態で [ I ] Key をプレス''すると、その値がキーフレームに記録されます。

右の図は、カメラズームのアニメーションを想定して、カメラの焦点距離 50mm をキーフレームとして設定した事例です。このようなキーフレーム設定によって、あらゆるプロパティを時間軸上で変化させることが可能です。

~
***キーフレームの自動記録
#image(Blender/AutoKeying.jpg,right,30%)
タイムラインヘッダー上にある自動記録ボタンが ON になっていると、プロパティの値が変更された場合に、設定されたフレームにキーフレームを自動的に追加します。
~

***キーフレームの削除
オブジェクトのキーフレームは、設定時と同様の状態下で、キーボードの [ALT] + [ I ] のプレスで削除できます。
  [ALT] +[ I ] Key ( Header Menu > Object > Animation > Delete Keyframe )
タイムラインやグラフエディタ上では、キーフレームのアイコンを選択して [ x ] あるいは [Delete] で削除することもできます。
~

***Interpolation(内挿)
キーフレーム間のプロパティー値は、自動的に補間(Interpolation)されます。グラフエディタ上では、補間された値の変化がアニメーションカーブとして可視化されます。
#image(Blender/GraphEditor.jpg)
上の図では、Cubeオブジェクトの座標について、XとYの値がそれぞれ変化している様子を見ることができます。

キーフレームの補間には、''定数、線形、2次曲線、ベジエ曲線''などの方法があります。特に、ベジェ補間は、ハンドルのタイプと制御点によってカーブの形が決まります。Illustrator のパスの編集と同様の操作です。
~

***Extrapolation(外挿)
最初のキーフレームの前と最後のキーフレームの後の状態を外挿補間する方法には、''定数(状態キープ)、線形(慣性)、繰り返し''などがあります。
~
~

**Parent & Track
アニメーションの設定では、オブジェクトの階層構造、カメラのターゲットロックといった、要素間の関係設定が必要になる場合があります。
__[[&color(red){''&fontawesome(fas fa-film); 解説動画''};>https://youtu.be/Rl4LKiR4F2I]]__
~

***ペアレント設定
複数のオブジェクトからなる被写体でアニメーションを実現する場合、オブジェクト同士の親子関係を正しく設定する必要があります。
 オブジェクトを 子 → 親の順に選択
 Object > Parent( [CTRL] + [P] ) 
-親を動かす → 子はそれにしたがって動く
-子を動かす → 親の位置から相対的に動く
~

***トラッキング設定
被写体の動きにカメラを追随させたい・・という場合は、カメラを特定の被写体に Track to Constraint します。
 カメラ→被写体の順に選択。
 Object > Track( [CTRL] + [T] )> Track to Constraint  
~
~

**PathAnimation
Curveオブジェクトのひとつである ''Path'' を使うと、オブジェクトをパスに沿って移動させるアニメーションを簡単に実現することができます。

#image(Blender/PathAnimation.jpg,right,30%)
パスとオブジェクトに親子関係(Make Parent)を設定するだけで、パスに紐付けられたオブジェクトは、キーフレームの設定なしにパスの始点から終点まで、パスの形状に沿って移動します。
__[[&color(red){''&fontawesome(fas fa-film); 解説動画''};>https://youtu.be/4DAjlsgw174]]__

-上面ビューからモーションパスを配置する
    Add > Curve > Path
-パスの形状を編集する(通常の曲線の編集と同様)
-パスとオブジェクトに親子関係を設定する
 オブジェクト → パスの順に選択
 Object > Parent( [CTRL]+[P] ) > Follow Path
-アニメーションのフレーム数が始点になっていることを確認
-オブジェクト(子)を移動して、パス(親)の始点に合わせる
-アニメーションを再生すると、オブジェクトがパスに沿って移動する様子が確認できるはずです。

#image(Blender/PathAnimation2.jpg,right,30%)
プロパティーエディタ > Object Data Property パネル > Path Animation の項目で、以下のような各種調整が可能です。
-Frames : パスの始点から終点までのフレーム数
-Follow:オブジェクトの向きを進行方向に調整
#clear
~
~

**アニメーションの階層化
例えば、プロペラを回しながら飛ぶヘリコプターを表現するには、以下のように階層的にアニメーションを設定する必要があります。

__[[&color(red){''&fontawesome(fas fa-film); 解説動画''};>https://youtu.be/yAPFnkGjhUM]]__
~

***設定事例
-ヘリコプターの胴体(親)に、プロペラ(子)をペアレント設定
-胴体(親)は、シーンの中を(パスに沿って)移動するように設定。
-プロペラ(子)は、ひたすら回転だけを続けるように設定。
&small(プロペラのキーフレームに位置情報が含まれると、親から離れてしまいます。);
~
~

**SapeKeys
アメーバのように形を変えたり、顔の表情を変えたり、特定のオブジェクトを構成する頂点座標の相対的移動によって変形するアニメーションを作成する際に使用する技術です。以下「顔」を例として、そのメッシュの変形によって「目と口を動かす」事例を紹介します。

__[[&color(#999){''&fontawesome(fas fa-film); 解説動画(準備中)''};>https://youtu.be/ABC]]__
~

***シェイプキーの作成
#image(Blender/ShapeKeys.jpg,right,30%)
対象オブジェクトを選択して、プロパティーエディタ の ObjectData タブを開きます(右図)。

-ShapeKeysのところで、[+]を押す
→ Basisというデフォルト用意される

-EditMode で、デフォルト形状を編集する
例えば、両目と口を開けた状態にする

-オブジェクトモードに戻る
以上で、デフォルト形状が Basis に記録されました。

-ShapeKeysのところで、必要な動作項目の数だけ [+] を押す
顔の例でいえば、口閉じる、右目閉じる、左目閉じるの3項目分[+]を押す
→ Key1、Key2、Key3とキー記録用の変数(アイコン)が用意される

-Key1 を選択し、EditMode に入って形状を編集する
例えば、標準形状から口だけ閉じた状態をつくる
-Key2、Key3 についても同様に形状を編集する

-オブジェクトモードにもどる

-各 Key の Valueを0から1.0へ変化させてみて下さい。
各Key の値に応じて、形が変化するのがわかるはずです。
--Value 0.0:デフォルト形
--Value 1.0:変形しきった状態
~

***キーフレームの記録
キーフレームの記録方法は、これまでと同様です。
 アニメーションの当該フレームまでタイムカーソルを進める
 各キーの変形度合いをValueで調整して目的の表情をつくる
 各キーごとにValue入力エリアの上で [ I ] Key

すべてのキーを記録することで、その瞬間の表情が記録できたことになります
例えば、「口を半開きにして右目だけ閉じた」表情は、以下のように3つのキーのそれぞれの値の組み合わせとして記録されます。
 Key1 0.50  ← 口が半開き
 Key2 1.00  ← 右目閉じ
 Key3 0.00  ← 左目開いたまま
~
~

**Armature
Armature はキャラクターアニメーションを実現する際の骨組みとなる部品で、単体ではレンダリングされませんが、Armature に関連付けられたオブジェクトはArmature の関節を利用して自在に変形させることが可能になります。

__[[&color(#999){''&fontawesome(fas fa-film); 解説動画(準備中)''};>https://youtu.be/ABC]]__
~

***Armature オブジェクトの配置と骨格づくり
Armature は、他のオブジェクトと同様に、原点(origin)、位置(position)、回転(rotation)、倍率(scale factor)といった情報を持つとともに、EditMode 内で編集可能なデータブロックを持っています。

編集モードでは、位置・回転・倍率に関するデフォルト形状を ''Rest Position'' というデータとして保持していますが、Object Mode とPoseMode でキーフレームを設定することにより、ポーズを付けていくことができます。

#image(Blender/Armature1.jpg,right,25%)
Armature を配置する場合は、一般に以下の手順で作業を行います。
 [SHIFT] + [C] でカーソルをワールドの原点に置く
 [Numpad1] で ワールドを正面ビューに切り替える
 HeaderMenu > Add > Armature

#image(Blender/Armature2.jpg,right,25%)
骨格は、初期 Bone を Extrude してつくります。
 [TAB] で EditMode に入る
 Bone の端点を選択して、[E] Key > 枝を伸ばす
~

***Skinning
Armature 自体はデフォーマ(変形制御のためのオブジェクト)であって、レンダリング時には透明になります。Armature を骨格として機能させるためには、動かしたいオブジェクトと親子関係を設定する必要があります。

Armature は通常複数の Bone(骨)から構成されますが、オブジェクトとの対応関係には2通りの方法が考えられます。ひとつはオブジェクトの関節に相当する部分の頂点をArmatureの関節に関連付ける方法、もうひとつは複数のオブジェクトをArmatureを構成するBoneひとつひとつに関連付ける方法です。前者は「Armatureの動きに従ってオブジェクトが変形」、後者は「Armatureの動きに従って各オブジェクトが移動」という違いになります。
~

***Object > Armature
-Armature と オブジェクトの位置調整
オブジェクトの関節(その場所に頂点があることが前提)となる位置と Armature の Joint の位置が一致するように調整します。

#image(Blender/SetParentArmatureDeform.jpg,right,25%)
-関連付け
 Object Mode に入る(TAB)
 オブジェクト → Armatureの順に選択して
 Object > Parent( [CTRL]+[P] )
 > With Automatic Weight
自動的に近接する頂点が関節に結びつけられます。
~

***Object > Bone
-Armature と 複数オブジェクトの位置調整
Boneの数に相当する数のオブジェクトを配置して、各オブジェクトと Armature の各 Bone の位置が一致するように調整します。

#image(Blender/SetParentBone.jpg,right,25%)
-関連付け
 オブジェクト → Armature の順に選択
 PoseMode に入る( [CTRL] + [TAB] )
 オブジェクトと関連づける Boneを選択
 Pose > Parent( [CTRL]+[P] ) > Bone
すべてのオブジェクトとボーンについて、この関係づくりを行います。
#clear()
~

***Pose 編集
Armature の Bone をアニメーションさせるには、PoseMode を使用します。
 [CTRL] + [TAB]

//#image(Blender/Skinning2.jpg,right,25%)
#image(Blender/Skinning1.jpg,right,25%)
PoseMode では、それぞれの Bone を回転させて、ポーズをつけながらキーフレームを記録することで「振り付け」ができます。
-現在フレームを確認
-ポーズ形状を編集
-Bone を全選択
-[I] Key で(回転情報)を記録
&small(普通、骨は伸びないので、ポーズは各関節の回転角を記録することになります。 );
~

***Inverse Kinematics|IK
関節の動きを伴うキャラクターのアニメーションでは、階層上の親が子をコントロールする Forward Kinematics と、子から逆に親をコントロールする Inverse Kinematics とがあります。特に後者は、指先をつかんで腕の動きをコントロールするなど、「振り付け」がしやすい点で重要な手法です。

-オブジェクトとArmatureの準備・関連付け
ここまでは上述した手順と同様です。

-IKの設定
PoseMode に入って、先端のボーンを選択して、以下のいずれかの操作
 Header Menu > Pose > Inverse Kinematics > Add IK to Bone 
 プロパティエディタ > Bone Constraints Property > Add Constraint > IK

-IKのターゲット
#image(Blender/IK1.jpg,right,25%)
--Without Target を選択した場合
先端の Bone がハンドルになって、これを動かすと、その親となるBone が連鎖的に動きます。
#clear
#image(Blender/IK2.jpg,right,25%)
--To New Empty Object を選択した場合(推奨)
Empty(空オブジェクト)がBoneの先端位置に配置されて、それがハンドルになります。ObjectMode で Empty を動かすだけで、Armature が追随するので(PoseMode に切り替える必要がないので)、操作は楽になります。

-振り付け
ハンドルを動かしながら、通常の記録と同様、キーフレームを記録します。
Empty を Target に設定した場合は、ポーズの記録ではなく、Emptyの動きだけを記録すれば良いということになります。
~
~

**Lattice
Latticeは3Dの格子から成る外部コントロール構造で、それ自体はレンダリングされませんが、関連付けられたオブジェクトは、Latticeの頂点の起伏に応じて滑らかにその形状を変化させた形でレンダリングされます。波打つような形状変化をさせたい場合などに有効な手段です。

__[[&color(#999){''&fontawesome(fas fa-film); 解説動画(準備中)''};>https://youtu.be/ABC]]__
~

***設定の手順
-Latticeの配置
 Add > Lattice
 プロパティエディタ > U と V の値でグリッドの数を調節
 エディットモードで Lattice 各頂点の位置を編集

-関連付け
 オブジェクト → Latticeの順に選択
 Object  > Parent( [CTRL] + [P] ) > Lattice Deform

オブジェクトを動かし、Latticeによる形状変形の効果を確認してください。
~
~

//**Constraints
//~
//~
//~

//**Actions
//~
//~
//~
~