#author("2022-09-06T20:20:41+09:00","default:inoue.ko","inoue.ko") *第13回 様々な形状変形の方法 [[3DCG演習/2022]]|''2022.09.06 -'' ~ ***解説動画 #youtube(-GDaF_Kid6k) -録画済み動画です。再生して視聴してください。 -以下名簿が表示されます。''既読確認(出欠確認)''をお願いします。 &fontawesome(far fa-hand-point-right); __[[既読確認>https://docs.google.com/spreadsheets/d/1lpnwY25De5WG7l72sVfHjIFK40BYKqaKcvbH0ZK0SfU/edit?usp=sharing]]__ ~ ***CONTENTS #contents2_1 ~ ~ **はじめに 前回は、オブジェクトがシーンの中で移動・回転する事例を紹介しましたが、今回は、オブジェクトの形状を変形されるアニメーションを紹介します。 ~ ~ **SapeKeys アメーバのように形を変えたり、顔の表情を変えたり、特定のオブジェクトを構成する頂点座標の相対的移動によって変形するアニメーションを作成する際に使用する技術です。以下、メッシュの変形事例を紹介します。 ~ ***シェイプキーの作成 #image(Blender/ShapeKeys.jpg,right,30%) 対象オブジェクトを選択して、プロパティーエディタ の ObjectData タブを開きます(右図)。 '''以下の作業は、ワイヤーフレームモードで行うことを推奨します。''' -ShapeKeysのところで、[+]を押す → Basisというデフォルトが用意されます。 -EditMode で、デフォルト形状を編集する -ObjectModeに戻る → 以上で、デフォルト形状が Basis に記録されました。 -ShapeKeysのところで、必要な動作項目の数だけ [+] を押す → Key1、Key2、Key3 とキー記録用の変数(アイコン)が用意される -EditMode に入って Key1 を選択し、形状を編集する -Key2、Key3 についても同様に形状を編集する -ObjectMode にもどる -各 Key の Valueを0から1.0へ変化させてみて下さい。 各Key の値に応じて、形が変化するのがわかるはずです。 --Value 0.0:デフォルト形 --Value 1.0:変形しきった状態 ~ ***キーフレームの記録 キーフレームの記録方法は、これまでと同様です。 アニメーションの当該フレームまでタイムカーソルを進める 各キーの変形度合いをValueで調整して目的の表情をつくる 各キーごとに ''Value入力エリアの上で [ I ] Key'' ~ ~ **Armature Armature はキャラクターアニメーションを実現する際の骨組みとなる部品で、単体ではレンダリングされませんが、Armature に関連付けられたオブジェクトはArmature の関節を利用して自在に変形させることが可能になります。 ~ ***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の頂点の起伏に応じて滑らかにその形状を変化させた形でレンダリングされます。波打つような形状変化をさせたい場合などに有効な手段です。 ~ ***設定の手順 -Latticeの配置 Add > Lattice プロパティエディタ > U と V の値でグリッドの数を調節 エディットモードで Lattice 各頂点の位置を編集 -関連付け オブジェクト → Latticeの順に選択 Object > Parent( [CTRL] + [P] ) > Lattice Deform オブジェクトを動かし、Latticeによる形状変形の効果を確認してください。 ~ ~ ~ ~