見出し画像

今日からはじめるAnime Toolbox 第12回『”SDユニティちゃんと桜吹雪”を一緒につくる~その4:キャラの演技を作り込む!~』

こんにちは。第12回では、シーン内に配置されたキャラモデルにアニメーションを付けたり、表情変化を付けたりする「キャラ演技の導入」を行います。キャラに演技を付けていくのに合わせて、音楽を付け、音楽に合わせて各シーケンスのタイミング調整をおこなったり、キャラの演技にあわせて背景素材をフォローで動かすような演出も入れて作り込んでいきます。

この第12回での作業が終了すると、ムービーはひとまず完成段階を迎えます。続く第13回は、一旦完成したムービーをさらにブラッシュアップしていくための、仕上げ工程となります。

ここから演習をはじめる方のために、前回までの作業が終了した段階のプロジェクトをこちらにご用意しています。
必要に応じて、ダウンロードしてお使いください。


今回やること

今回やることは、大きく分けて4つあります。
1. 各シーケンスごとに、キャラが移動するポイントを設定し、キャラにアニメーションクリップを割り当てて演技を付ける
2. 音楽を付けて、各シーケンスクリップの尺を調整する
3. キャラに表情演技をつける
4. キャラの演技に合わせて、背景素材を動かす

実際の映画撮影に例えると、前回おこなった作業は、「スタジオ内に背景セットや特殊効果のための仕込みを配置し、役者さんの立ち位置を決めた後で、役者さんのテストショットを見ながら、各シーンのカメラの初期位置を設定した」ようなものです。撮影のための準備は整ってますので、「今回はアナタ自身が監督になって、役者さんに演技を指示したりする作業」をおこなうと考えると判りやすいかもしれませんね。

1. 各シーケンスごとに、キャラが移動するポイントを設定し、キャラにアニメーションクリップを割り当てて演技を付ける

本連載の第4回で、キャラを歩かせる様々な方法を紹介しました。
今回は、そこで紹介したTransform Tweenトラックを使います。Transform Tweenトラックは、フィールド内でキャラクターを歩かせる範囲が、始点と終点を結ぶ直線で十分な時に、とても便利な手法です。

Seq_01中のSDユニティちゃんのアクションを作る

Seq_01中で、SDユニティちゃんは、「画面手前に向かって走り出て、玄関前でターンし、そのまま画面左側へと走り抜けていきます」――以上のアクションを組んでみましょう。

Seq_01向けにTransform Tweenトラック用の通過ポイントを設定する

それでは、Seq_01のSDユニティちゃんのアクションに合わせて通過ポイントを設定します。
Seq_01向けに使われるゲームオブジェクトは、Hierarchy上では、Master Sequence > Seq_01以下に格納されます。Hierarchyビュー上で階層を開いたら、「+」ボタンより空(Empty)のゲームオブジェクトを4つ新規に生成し、それぞれ下のようにリネームしてください。

各通過ポイントには、以下のような値を設定しましょう。SDユニティちゃんが、Zero_point ⇒ GoFront_point ⇒ Turn_point ⇒ End_point と、順番に走り抜けていくイメージで設定します。

キャラモデルに「走る」アニメーションクリップを割り当てる

続いて、Sequencesウィンドウより、Master Sequence > Seq_01を選択し、TimelineウィンドウにSeq_01_Timelineを表示します(Timelineウィンドウのロックアイコンが有効になっている事も確認してください)。

Characterトラックサブグループを開くと、SD_unitychan_seq01というトラックがありますので、そのクリップを開きます。クリップが開くと、ぱんくずリストより、現在SD_unitychan_seq01_Timelineを開いていることがわかりますが、Timelineウィンドウにはまだトラックは何も設定されていないと思います。
そこに「+」ボタンから、新規にAnimationトラックを追加します。
ここまで終わると、以下のような画面になります。

新規に作成したAnimationトラックには、Master Sequence > Seq_01 > SD_unitychan_seq01 > ToonShader_SD_unitychan_humanoid_CelLook をバインドします。

一見、階層が複雑に見えますが、Master Sequence > Seq_01 > SD_unitychan_seq01 は、Sequenceアセットの「SD_unitychan_seq01」そのものです。これ自体はプレファブですので、その下の階層にあるToonShader_SD_unitychan_humanoid_CelLookは、プレファブ内に格納されているモデル(への参照)ということになります。つまり、Sequenceアセット内でAnimatorコンポーネントを持っているゲームオブジェクト階層を、Animationトラックにバインドしていることになります。

Animationトラックのクリップ領域で右クリックしてメニューを出し、「Add From Animation Clip」を実行します。SDユニティちゃんモデルにアタッチされているAnimatorコンポーネントから割り当てられるアニメーションクリップのリストが表示されますので、「Running@loop」を選択します。

Animationトラックにアニメーションクリップが割り当てられると、Gameビューの中のSDユニティちゃんが後ろを向いてしまいました
これは、Running@loopアニメーションクリップに記録されている、アニメーションカーブの最上位階層にあるルートの方向が逆向きだったために発生したものです。

アニメーションクリップのルートの方向を修正する

この現象を修正するために、TimelineウィンドウからRunning@loopアニメーションクリップを選択し、Inspectorにアニメーションクリップのプロパティを表示させてください。

Animation Playable Asset内のClip Transform Offsetsより、Rotationに「Y=180」を設定し、2行上の「Rotation」(回る矢印)ボタンを押します。
すると、Gameビューの中のSDユニティちゃんが再び正面を向きました。
このように、Animationトラックに割り当てた各アニメーションクリップのルートの方向を修正するには、Clip Transform Offsetsを調整します

Seq_01向けにTransform Tweenトラックを設定する

Running@loopアニメーションクリップは、「その場で走るモーションをループするだけ」のアニメーションクリップです。そこでSDユニティちゃんの最上階の階層の座標をTransform Tweenトラックで動かしてやることで、SDユニティちゃんをシーン内で走らせてやります。

Timelineウィンドウの「+」ボタンより、「Transform Tween Track」を選択して、新規にTransform Tweenトラックを追加します。
Master Sequence > Seq_01 > SD_unitychan_seq01、つまり「SequenceアセットのSD_unitychan_seq01」をTransform Tweenトラックにバインドしたら、新規にTransform Tweenクリップを右クリックメニューから生成します。
ここまで終わると、以下のようになります。

新規に作成したTransform TweenクリップをInspectorに表示させ、Start LocationとEnd Locationとして、すでに作成している通過ポイントZero_point、GoFront_pointを設定します。

設定が終わったTransform Tweenクリップを半分の尺に縮め、空いた場所にもうひとつ新規にTransform Tweenクリップを追加します。

追加したTransform TweenクリップをInspectorに表示させたら、Start LocationとEnd Locationとして、今度は通過ポイントTurn_point、End_pointを設定します。

ここまで終わって、Timeline上で再生ヘッドを動かしてやると、SDユニティちゃんが玄関前から走り出して、左側へと走り抜けていくアクションがざっくりとですが、設計できたことがわかります。

しかしよく見てみると、再生の途中で下のような状況が発生しています。
これは「キャラが見切れてしまっている」という状態です。つまり、再生の途中でカメラのレンダリング範囲外に、SDユニティちゃんが飛び出してしまっているのです。次は、この状況を修正しましょう。

「キャラが見切れてしまう」のを修正する

HierarchyビューからCompositorゲームオブジェクトを選択し、Visual CompositorウィンドウにCompo_01コンポジターグラフを表示します。
Charaグループを拡大して、まずは一番左のTransformノードのSceleの値を「X=0.85」にします。
これは、ちょっとSDユニティちゃんの現在の表示が大きいなと感じたために行う修正ですので、これだけではキャラの見切れは修正できません。

キャラの見切れを修正するには、Transformノードの直前のRenderingノードの設定を以下のように変更します。

  • Sizeを「Custom」に変更する

  • 有効になったCustom Valueを「X=3000, Y=1080」に設定する

レンダリング領域の横幅である「Xの値」を3000に変更すると、キャラの見切れが修正されることが確認できます。

あわせて、Timelineの再生ヘッドを送り、最後までSDユニティちゃんの姿が見切れてしまわないか、念のため確認しておきましょう。「X=3000」なら、今回は十分なようですね。

再生ヘッドを送っていっても、SDユニティちゃんの姿が見きれることはないようです。

キャラの足元に影を追加する

最後に小ネタですが、キャラモデルの足元に影を追加しましょう。

今回はリアルな影ではなく、丸影で十分なので、丸影を3Dメッシュで作成して、シーン中で使われているキャラモデルのプレファブに追加します。

Hierarchyビューより、シーンの原点位置に「+」ボタンから 「3D Object > Sphere」を選択して、新規に球(Sphere)の3Dメッシュを追加します。
Sphereは、以下のように設定します(不要なコンポーネントは削除しています)。
半透明マテリアル「Shadow」も新規作成して、Sphereに割り当てます。

最後に、設定したSphereをHierarchyビュー上で選択し、そのまま
Master Sequence > Seq_01 > SD_unitychan_seq01 直下の階層に、
図のようにドラッグ&ドロップしてやります。

これで、Seq_01向けのSDユニティちゃんモデルの足元に、半透明の丸影が現れるようになります。

Seq_02中のSDユニティちゃんのアクションを作る

Seq_02は、「走りつつけるSDユニティちゃんをカメラがフォローした後、SDユニティちゃんがジャンプしてフレームアウトする」という内容です。
以上のアクションを組んでみましょう。手順的にはSeq_01と同様です。

Seq_02向けにTransform Tweenトラック用の通過ポイントを設定し、キャラモデルにアニメーションクリップを割り付ける

Seq_01の場合と同様の手順でSeq_01向けの通過ポイントを、Master Sequence > Seq_02以下に作成します。

各通過ポイントのTransformは以下のように指定します。

続いてキャラモデルに「Running@loop」のアニメーションクリップを割り当てましょう。
TimelineウィンドウにSD_unitychan_seq02_Timelineを開き、新規Animationトラックを生成します。バインドするAnimator付きモデルは、「Master Sequence > Seq_02 > SD_unitychan_seq02」階層にある、同名の ToonShader_SD_unitychan_humanoid_CelLook になります。Seq_01とは階層が違いますので注意してください。

Anmationトラックに「Running@loop」をクリップとして割り当てると、SDユニティちゃんが背中を向けてしまいます。

こちらは、Seq_01と同様に「Running@loop」クリップのClip Transform Offsetsを調整することで、修正できます。

「Running@loop」クリップの向きの修正が終わったら、Transform Tweenトラックを追加し、「Master Sequence > Seq_02」階層下のSequenceアセットバリアント「SD_unitychan_seq02」をバインドします。

Transform Tweenトラックに新規Transform Tweenクリップを作成し、Start Location、End LocationにそれぞれZero_pointとTransit_pointを割り当てます。

さらにもうひとつ新規Transform Tweenクリップを作成し、Start Location、End LocationにそれぞれTransit_pointとEnd_pointを割り当てます。

2つのTransform Tweenクリップの設定が終わったら、2つのクリップのつなぎ目(61フレーム)の前後でTimelineの再生トラックをスクラブしてみます。

すると2つのクリップのつなぎ目の位置を越えると、「走るSDユニティちゃんが、つなぎ目を境に一歩前に踏み出すアクションをする」ことがわかります。

そこでこのつなぎ目の位置にあたる61フレーム目で、SDユニティちゃんに割り当てるアニメーションクリップを「Jumping@loop」に変更します。合わせてClip Transform Offsetsの調整もおこないます。

さらに「Jumping@loop」のスタート位置を「Running@loop」にオーバーラップするように左側に伸ばしてやります(大体、47フレームぐらいまで)。

以上を、再生ヘッドを使ってスクラブ再生してみると、「ユニティちゃんが走りながら、最後に勢いよくジャンプしてカメラのフレーム外へと飛び出して行くアクション」になっていることがわかります。

前回の「【Note】作例でのSeq_02の座標について」 ですでに触れたことですが、このアクションの調整中に、カメラリグSeq_02の位置も合わせて微調整しています。
最終的には、カメラリグSeq_02のTransformは以下のようにしました。
Position (X=-0.9 , Y=-0.3 , Z=-0.9)
・Rotation (X=-40 , Y=41 , Z=0)
・Scale (X=1, Y=1, Z=1)
これらはアニメーションクリップを割り当てた後で、カメラに見栄え良く写るように調整したものですので、見栄え重視で設定してしまって構いません。

Seq_03向けにTransform Tweenトラック用の通過ポイントを設定し、キャラモデルにアニメーションクリップを割り付ける

Seq_03は、「Seq_02からのアクション繋ぎで、ジャンプから着地するSDユニティちゃんがカメラの前を横切り、そのまま画面奥へと走っていってから、その場でもう一度身体をひねりながらジャンプして、最後に立ち止まって敬礼をする」という内容です。短尺にも関わらず、今までよりも演技要素は多いですが、作業自体はSeq_01、Seq_02と同様です。

Seq_03向けの通過ポイントは、Master Sequence > Seq_03以下に作成します。下の図のように、空(Empty)のゲームオブジェクトから、通過ポイントを3つ作成したら、それぞれをZero_point、End_point、FinishTurn_pointとリネームします。

各通過ポイントの座標(Transform)を以下のように設定します。

TimelineウィンドウにSD_unitychan_seq03_Timelineを開き、新規にAnimationトラックとTransform Tweenトラックを追加します。
それぞれのトラックにMaster Sequence > Seq_03以下の各ゲームオブジェクトをバインドしたら、Animationトラックには「Running@loop」アニメーションクリップを、Transform Tweenトラックには新規Transform Tweenクリップを割り当てます。
Gameビューにブラー効果がかかっている時には、Compo_03コンポジターグラフより、Charaグループ内のBlendノードのOpacityの値を「0」にします。

ここでは、Animationトラックに「Running@loop」アニメーションクリップを割り当ててても、SDユニティちゃんの向きが180度変わることはありませんでしたので、そのまま進めます。

Transform Tweenトラックにもうひとつ新規ransform Tweenクリップを割り当てたら、それぞれのStart LocationとEnd Locationに、図のように通過ポイントを割り当てます。

続いて、2つのTransform Tweenクリップの切り替え点(70フレーム)を目安に、「Salute」アニメーションクリップを追加します。
SDユニティちゃんがTransform Tweenクリップの切り替え点を目安に立ち止まり、そのままジャンプして振り返りながら、敬礼をするアクションになります。

最後に、Seq_03冒頭のSDユニティちゃんの着地アクションを作ります。
0フレーム目から19フレーム目の間に、「TopToGround」アニメーションクリップを挿入します。「TopToGround」は名前の通り、ジャンプの最高点から地上までの着地モーションとなっています。

以上で、Seq_01からSeq_03までのキャラの基本演技を割り付けることができました。
ここまででラフに繋いだ各シーケンスをMaster Sequence上で確認してみましょう。だいぶ形になってきたことがわかると思います。

次は、各シーケンスに必要な尺(間合いの時間)を設定してやりますが、そのためには音楽を配置してやる必要があります。

2. Master Sequenceに全てのシーケンスで利用するトラックを集め、各シーケンスの尺を決定する

Master Sequence以下に配置されている各シーケンスSeq_Title、Seq_01、Seq_02、Seq_03のラフ編集ができましたので、ここからはより完成度を高めていきます。
ここでやることは大きく分けて2つあります。すなわち

・全てのシーケンスで共通で使われるアセットを制御するトラックをMaster Sequenceに設定すること
・各シーケンスの尺を決めること

「全てのシーケンスで共通で使われるアセット」の代表は、音楽です。音楽を配置することで、各シーケンスの尺も決めることができます。

また、今まで各シーケンスクリップ内にSequenceアセット、もしくはSequenceアセットバリアントとして配置していたディレクショナルライト(Directional Light_seq01)も、Master Sequenceで管理することにします(各シーケンス内で、特にディレクショナルライトの向きを変える必要がなかったからです)。まずはディレクショナルライトの配置からはじめます。

ディレクショナルライトをMaster Sequenceに配置する

ディレクショナルライトをMaster Sequenceに配置するには、Sequence Assemblyウィンドウからおこないます。

まずSequencesウィンドウのStructureセクションから「Master Sequence」をクリック選択し、そのままSequence Assemblyウィンドウのタブをクリックします。

Sequence AssemblyウィンドウのNameテキストボックスに「Master Sequence」が表示されているのを確認し、Lightingの「+」ボタンをクリックして、「Directional Light_seq01」を選択します。

Sequence Assemblyウィンドウより、Master SequenceにLightingを追加すると、Timelineには「Lighting」という名前のトラックグループが追加されます。中を開くと、「Directional Light_seq01」という名前のSequenceアセットトラックが格納されています。

ディレクショナルライトをMaster Sequence側に移動したので、Seq_Title、Seq_01、Seq_02、Seq_03に含まれているディレクショナルライトは削除します。各シーケンスからSequenceアセットを削除するのも、Sequence Assemblyウィンドウよりおこないます。
例えば、Seq_01のSequence Assemblyウィンドウを開きます。
Lightingより、以下の手順でSequenceアセットを削除してください。

  1. Lighting項目を開く。

  2. 「Directional Light_seq01」と表示されているテキストボックスのすぐ前ぐらいの位置にカーソルを近づける。周りの色が変わる。

  3. その位置でクリックし、青でテキストボックス領域が選択されたら、「ー」ボタンを押して削除を実行する。

Seq_01のLighting項目を削除すると、以下のようになります。
同時にSeq_01_Timelineからも、Lightingというトラックグループが削除されます。

Seq_Title、Seq_02、Seq_03からも、同様にLighting項目のディレクショナルライトを削除してください。

オーディオトラックをMaster Sequenceに配置する

次にMaster_Sequence_Timelineにオーディオトラックを追加します。
TimelineウィンドウにMaster_Sequence_Timelineを開いたら、Timelineウィンドウの左上にある「+」ボタンより「Track Sub-Group」を選択します。新規「Track Group」が追加されます。

追加された「Track Group」を「Audio」とリネームします。そして「Audio」トラックグループの右にある「+」ボタンを押して、「Audio Track」を選択してください。
Audioトラックグループに新規Audioトラックが追加されたら、Audioトラックのクリップ領域にカーソルを当てて右クリックメニューを出します。

メニューより「Add From Audio Clip」を選択すると、「Select Audio Clip]ウィンドウが現れます。リストから、プロジェクトに前もってインストールしてあるオーディオクリップ「MusMus-BGM-139」を選択します。

「MusMus-BGM-139」が新規クリップとして、Audioトラックに追加されますので、「MusMus-BGM-139」クリップを選択し、Inspectorより以下のように設定します。

End「460フレーム」、Clip In「10フレーム」、Volume「0.7」

音楽に合わせて各シーケンスクリップの尺を調整する

音楽を配置しましたので、音楽を聴きながらキレのよいタイミングで各シーケンスクリップの尺を決めていきます。
今回は以下のようにしてみました。

各シーケンスクリップのInspector表示は以下のとおりです。

Seq_01とSeq_03は、元の尺(2秒/48フレーム)よりも伸ばしましたので、後ほどアクションのタイミングを再調整することにします。

またLightingトラックグループも開き、中のクリップを460フレーム目まで伸ばしておきます。

3. フレーム単位でキャラのアクションを調整する

音楽が入り各シーケンスの尺も決まりましたので、ここからはフレーム単位でキャラに演技を付けていきます。まずは先ほど尺を伸ばしたSeq_01のアクションの再調整をします。

Seq_01のタイミング調整

SequencesウィンドウのStructureセクションより「Master Sequence」を選択し、TimelineウィンドウにMaster Sequence_Timelineを表示します。
Sequencesトラックより「Seq_01」クリップを選択し、ダブルクリックします。

パンくずリストに「Seq_01_Timeline」が表示されたら、Characterトラックグループを開き、SD_unitychan_seq01クリップを、Seq_01全体の尺と同じ112フレーム目まで伸ばします。伸ばしたら、「SD_unitychan_seq01」クリップ上でダブルクリックします。

パンくずリストに「SD_unitychan_seq01_Timeline」が開きます。
ここで注意してみてみると、全体の尺が112フレームではありません。
Timelineのギアアイコンから「Frame Rate」選択し、現在の表示フレームレートを確認してやると、「Game: 60 fps」になっていますので、「Film: 24 fps」に変更してやりましょう。

ネスト下部のTimelineトラックと、その直前の階層のTimelineトラックとで表示フレームレートの値が違っていたのは、Unityのアニメーションはあくまで時間ベースで管理されており、Timeline上のフレームレートは表示ベースのものだからです。
映像編集をする際には、全てのトラックでフレームレート表示を共通にしておいたほうが作業上安全ですので、Sequencesを使ってTimelineを階層化して使っている場合には、階層下部のTimelineに移動したら必ずフレームレートをその上のトラックを合わせるようにしてください。
なお上の方法で一度、そのトラックの表示フレームレートを設定したら、その設定は保持されます。

表示フレームレートを24fpsに設定したら、各Transform Tweenクリップを以下のように調整します。

・1つめのTransform Tweenクリップ:End位置を37フレームまで伸ばす。
・2つめのTransform Tweenクリップ:Start位置を25フレームまで伸ばす。End位置を113フレームまで伸ばす(Durationは88フレーム)

このシーケンスでは、キャラに割り当てられているアニメーションクリップ「Running@loop」はシーケンスの範囲内で「ループ状態のまま」で構いませんので、Running@loopクリップを選択したら、InspectorよりAnmation ExtrapolationのPost-Extrapolateのドロップダウンを「Loop」に設定します。
このように設定することで、アニメーションクリップの外側でも同じモーションをループし続けるようになります。

Seq_02のタイミング調整

Seq_02全体の尺は変更しませんでしたが、音楽合わせでタイミングよくジャンプしてフレームアウトするように調整をおこないます。

TimelineウィンドウにSD_unitychan_seq02_Timelineを開きます。
このTimelineも開くとフレームレート表示が60 fps表示なので(※2秒の尺が120フレームで表示されているからです)、ギアアイコンより表示フレームレートを「Film: 24 fps」に変更します。

Seq_02では、「音をきっかけに(※38フレーム目)、SDユニティちゃんをジャンプさせてフレームアウト」させますので、以下のように設定します。

Seq_02のAnimationクリップの設定
・Running@loop:End位置を38フレームまで伸ばす。
・Jumping@loop:Start位置を32フレームまで伸ばす。

Seq_02のTransform Tweenクリップの設定
・1つめのTransform Tweenクリップ:End位置を44フレームまで伸ばす。
・2つめのTransform Tweenクリップ:Start位置を38フレームまで伸ばす。

Seq_03のタイミング調整

同様にSeq_03も音楽合わせで調整していきます。
まず、Master Sequence上で、Seq_03クリップの尺を少し詰めます。End位置を384フレームにしてやります。
最終的には、384フレーム以降は、画面全体をブラックアウト(暗転)させようと考えています。

続いて、TimelineウィンドウにSD_unitychan_seq03_Timelineを表示し、こちらもTimelineの表示フレームレートを「Film: 24 fps」に変更します。

Seq_03の編集のポイントですが、アクションとの音合わせのタイミングを、120フレームの位置に合わせてやるとよいでしょう。

Seq_03のAnimationクリップの設定
・TopToGround:End位置を36フレームまで伸ばす。
・Running@loop:Start位置を21フレームまで伸ばす。End位置を131フレームまで伸ばす。
・Salute:Start位置を120フレームまで伸ばす。

Seq_03のTransform Tweenクリップの設定
・1つめのTransform Tweenクリップ:End位置を120フレームまで伸ばす。
・2つめのTransform Tweenクリップ:Start位置を120フレームに合わせる。End位置を131フレームに縮める。

以上で、Timelineの設定が終わりましたので、頭から通し再生をしてみてください。キャラクターのアクションと音楽がシンクロするようになったと思います。

4. フレーム単位で、キャラに表情演技をつける

ここまでの作業で、キャラクタームービーにとって一番大事な、キャラクターのアクションと音楽のシンクロが完成しました。ここからは、さらにキャラの演技を魅力的に見せるために、表情をつけていきます。

キャラの表情は、フェイスエモーションと口パクのそれぞれのアニメーションクリップを、元のキャラのモーションにブレンドすることで付けていきます。

Seq_01のアクションに表情演技をつける

ここからは、キャラのアクションを見ながら、それに相応しい表情を足していく作業ですので、下の例のように、大きめのGameビューの下にTimelineウィンドウをドッキングしておくと、作業が捗ります。

TimelineウィンドウにSeq_01_Timelineを開き、新規にAnimationトラックを追加します。新規に作成したAnimationトラックには、すでに存在するAnimationトラックと同じゲームオブジェクトをバインドします。

ゲームオブジェクトのバインドが終わったら、新規に作成したAnimationトラックにアバターマスクを適用します。
Animationトラックを選択し、Inspector表示からAvator Maskテキストボックスの右にある目玉ボタンを押します。すると「Select AvatarMask」ウィンドウが開きますので、_faceOnlyアバターマスクを指定してください。_faceOnlyアバターマスクは、SDユニティちゃんモデル用に作成されているアバターマスクです。

アバターマスク機能を有効にするためには、その上にあるApply Avatar Maskが「有効(✓)」になっている必要があります。

アバターマスクを使うことで、そのAnimationトラックに登録されるアニメーションクリップが、主モーションにオーバーライドされることになります。

それでは、アバターマスクを適用したAnimationトラックに、フェイスモーションを含むアニメーションクリップを登録します。
空白のクリップ領域で右クリックメニューを出し、メニューより「Add From Animation Clip」を選択します。

「Select Animation Clip」ウィンドウから、「default@sd_hmd」を選択します。

「@sd_hmd」という名前が後半に付いているアニメーションクリップが、SDユニティちゃんに搭載されている、フェイスエモーション用のアニメーションクリップです。これらはSDユニティちゃんのAnimatorに登録されています。

「@sd_hmd」が付くアニメーションクリップには、さらに「mth_a@sd_hmd」のように、先頭に「mth_」が付く名前のクリップがありますが、これは母音「あ」の発音の形をする口パク用のフェイスエモーションです。口パク用のフェイスエモーションは、a、i、u、e、o の5つあります。

同様の手順で、「smile@sd_hmd」「default@sd_hmd」を追加してください。各クリップの尺を下の図を参考に設定します。

default@sd_hmdは、「口を閉じている」表情なので、いくつかのフレームに「口を開く」アニメーションをさらに追加しましょう。

Animationトラックをもうひとつ追加し、先程と同じゲームオブジェクトをバインドした後で、_faceOnlyアバターマスクを適用します。
そのトラックに今度は「mth_o@sd_hmd」アニメーションクリップを配置します。アニメーションクリップには、Startを9フレーム、Endを14フレームに設定します。

上は、「mth_o@sd_hmd」アニメーションクリップを配置し終わった状態です。この時、「mth_o@sd_hmd」の前後に再生ヘッドを動かしてみると、SDユニティちゃんの口が常に「お」の形に開いていることが確認できます。これは、「mth_o@sd_hmd」アニメーションクリップの前後に「∞」が付いていることから判りますように、アニメーションクリップの前後のフレームでもクリップの効果が継続されるような設定となっているからです。

これを「クリップがあるフレーム区間でのみ有効」にするためには、Inspectorから各クリップのAnimation Extrapolationの設定を「None」に変更します。Animation Extrapolationには、前方向への外挿補完(Pre-Extrapolate)と後ろ方向への外挿補完(Post-Extrapolate)がありますので、共に「None」に変更します。

Animation Extrapolationの設定を「None」に変更すると、クリップ外の領域に表示されていた「∞」マークが消え、「mth_o@sd_hmd」のクリップ外では、SDユニティちゃんが口を閉じるようになったことが確認できます。

「mth_o@sd_hmd」を2つデュプリケートして、上のようにSDユニティちゃんの口元が見える範囲で、タイミングよく配置してやりましょう。

Seq_02のアクションに表情演技をつける

同様の手順で、Seq_02のアクションに表情演技をつけます。
TimelineウィンドウにSeq_02_Timelineを開き、アバターマスクを適用した新規Animationトラックを2つ生成してください。
各トラックにバインドするゲームオブジェクトは、Seq_02用モデルのゲームオブジェクトなことに注意します。

フェイスエモーション用のアニメーショントラックと、口パク用のアニメーショントラックには、以下の図のようにアニメーションクリップを割り当ててます。Seq_02では、終始キャラの表情がアップで表示されますので、丁寧に表情をつけていきましょう。

フェイスエモーションとして使用する「smile2@sd_hmd」は最初から口を大きく開けて笑っている表情ですので、今回、口パクとして使用するアニメーションクリップはそれと差をつけるために「mth_e@sd_hmd」を使用します。また口パクを挿入する位置としては、アオリ気味のレイアウトを考慮して、SDユニティちゃんの袖口で口元が隠れないタイミングを狙います。

「mth_e@sd_hmd」はAnimation Extrapolationの設定を「None」にしてから、クリップをデュプリケートして配置するとよいでしょう。

トラブルシューティングをしつつ、Seq_03のアクションに表情演技をつける

Seq_03についても同様の手順で、アクションに表情演技をつけますが、途中でトラブルが発生します。どんなトラブルが発生するか、実際に作業を進めてみましょう。
下は、Seq_03_Timelineに対してフェイスエモーション用のアニメーショントラックと、口パク用のアニメーショントラックの配置が終了した段階です。各トラックにSeq_03で使用するモデルのゲームオブジェクトをバインドするのも済んでいます。

ここでフェイスエモーション用のアニメーショントラックに、default@sd_hmdをクリップとして配置します。

すると、Gameビュー内のSDユニティちゃんが180度反転してしまいました。

しかも「default@sd_hmd」クリップをInspectorで確認しても、「Clip Transform Offsets」の項目が見当たらないので、クリップのルートモーションを180度回転して元に戻す方法が使えません。

プレファブバリアントを直接修正して、モデルの向きを元に戻す

このような現象は、アバターマスクを使ってオーバーライドをしたいアニメーションクリップの作り方にも依存するので、トラブルが発生するかどうかはその時々の実装次第です。とはいえ、ここまでTimeline上に様々なトラックを重ねて編集してきた後でこのようなトラブルが発生すると、困ってしまいます。

このような場合、現在使用してるモデルのプレファブやプレファブバリアントの向きを直接修正することで、トラブルを解決できます。その手順を紹介します。

Hierarchyビューより、Seq_03で使用しているモデルのプレファブバリアントSD_unitychan_seq03を選択します。

「SD_unitychan_seq03」の右端にある「>」ボタンをクリックしてください。
するとHierarchyビューのタイトルが「SD_unitychan_seq03」に変わり、プレファブ編集モードに入ります。SD_unitychan_seq03の階層を開き、ToonShader_SD_unitychan_humanoid_CelLookを選択します。

Inspectorより、ToonShader_SD_unitychan_humanoid_CelLookのTransform、RotationのYの値を、180から0に変更します。

再びHierarchyビューに戻り、「SD_unitychan_seq03*」(※変更が生じているので、最後に*が付いている)の左端にある「<」ボタンをクリックします。

「Prefab Has Been Modified」ウィンドウが現れるので、「Save」ボタンを押して、更新したプレファブを保存して、プレファブ編集モードから抜けます。

再びGameビューを確認すると、モデルが正しい方向を向いているのが確認できます。

モデルの向きのトラブルも解消しましたので、引き続きSeq_01やSeq_02と行ったのと同じ作業を続けます。

アニメーションクリップを配置して、Seq_03の表情づけを完成する

フェイスエモーション用のアニメーショントラックと、口パク用のアニメーショントラックには、以下の図のようにアニメーションクリップを割り当ててます。

「mth_a@sd_hmd」は、Animation Extrapolationの設定を「None」に設定した上でクリップを配置します。

以上で全てのシーケンスでキャラの表情づけが終わりましたので、Unityエディタのプレイボタンを押して、全ての要素を確認してみます。

Unityエディタのプレイボタンから再生確認をすると、SDユニティちゃんに割り当ててある、髪の毛や裾などの揺れ物(Spring Manager)のセカンダリーアニメーションも確認できます。
見たところ、プレイボタンからだと揺れ物が効き過ぎている印象を受けますので、微調整します。

Sequenceアセット(プレファブ)内のSpring Managerの調整をする

Spring Managerの調整は、Sequenceアセット(プレファブ)であるSD_unitychan_seq01を調整すれば、他のシーケンス内で使用されているSequenceアセットバリアント(プレファブバリアント)は全て同じ変更を継承します。

Hierarchyビューより、Master Sequence > Seq_01直下にある、「SD_unitychan_seq01」を選択し、右端にある「>」ボタンをクリックして、プレファブ編集モードに入ります。

Hierarchyビューのタイトルが「SD_unitychan_seq01」に変わったら、ToonShader_SD_unitychan_humanoid_CelLookを選択します。

Inspectorをスクロールして、Spring Manaderコンポーネントを探します。
Spring Managerを見つけたら、Dynamic Ratioの値を「0.5」に変更します。

再びHierarchyビューに戻り、「SD_unitychan_seq01」の左端の「<」ボタンをクリックします。

「Prefab Has Been Modified」ウィンドウが現れるので、「Save」ボタンを押して、更新したプレファブを保存して、プレファブ編集モードから抜けます。

他のシーケンス内で使用されているSequenceアセットバリアントにも変更が継承されます。確認してみましょう。

Seq_03用の「ToonShader_SD_unitychan_humanoid_CelLook(プレファブバリアント)」ですが、バリアントの親となっているSequenceアセット側におこなった変更「SpringManager/Dynamic Ratio=0.5」を継承しつつも、先程バリアント自身に直接おこなった変更「Transform/Rotation.Y=0」はそのまま維持されています。
Sequenceアセット(プレファブ)とSequenceアセットバリアント(プレファブバリアント)の関係が理解できると、アセットの設定管理が楽になります。

5. キャラの演技に合わせて、背景素材などをTimelineと連動させて動かす

キャラの演技が全て入りましたので、ここからはそれらの演技に合わせて2D背景素材のアニメーションを入れていきます。作画アニメーションでは、キャラクターの演技に合わせて背景素材を撮影時に動かすことを「フォローアニメーション」(※フレームのみを動かす時には、「パンアニメーション」ということもあります。)といいます。ここからの工程では、Transformノードを使ってコンポジターグラフ上でフォローアニメーションを設計していきます。
その他にも、コンポジターグラフ上のBlendノードをTimelineと連動することで、ブレンドの強度が変わる演出をつけていきます。
これらは全て、同じ手順で実現することができます。

Seq_Titleの背景フレームを動かし、「見上げる」演出をつける

Seq_TitleのコンポジターグラフCompo_01を開きます。
すでに仕込んでおいた背景素材のTransformノード(下では、BGグループからBG_PANグループに移動してあります)を確認します。

続いて、Seq_Title_TimelineをTimelineウィンドウに開いておいてください。

BG_PANグループ内のTransformノード内で右クリックメニューを出し、「Expose As Component」を選択します。

すると、Transformノード内でTimelineと連動できるプロパティが反転します。合わせてTransformノードの名前を「BG_PAN」とすることで、このノードの機能をはっきりとさせておきます。

TimelineウィンドウのSeq_Title_Timelineに移動し、「+」ボタンより Unity.VisualCompositor > Transforn Node Track を選択します。

新規Transform Nodeトラックが追加されますので、InspectorのNote欄に「BG_PAN用」と記入しておきます。
続いてBG_PANノードのObject項目にある「TransformNode (Transform Node Proxy)」をマウスでドラッグして、トラックにバインドしてください。

TransformNodeをバインドしたら、空のクリップ領域で右クリックメニューを出して、「Add Transform Node Playable Asset」を選択します。

TransformNodePlayableAssetがクリップとして追加されたら、作業しやすいように両方のクリップの尺をSequenceの有効範囲(48フレーム)にまで縮めてやります。

ここまで準備ができたら、いよいよアニメーションを記録していきます。
BG_PANノードのObject項目の一番右にある赤丸ボタンをクリックします。

ボタンをクリックすると、赤丸部分が点滅しはじめます。この状態でプロパティの数値を変更すると、アニメーションキーとして記録できます。
Timelineの再生ヘッドの位置が0フレーム目にあることを確認した上で、下の図のようにScaleとOffsetの値を設定してみてください。
両方の値を設定したら、点滅中の赤丸ボタンをクリックして、キーを確定します。

続いて、Timelineの再生ヘッドを「47」まで移動し①、再度赤丸ボタンを押してキー記録を開始します②。

下の図のようにScaleとOffsetの値を設定した後で③、点滅している赤丸ボタンをクリックして終了④します。

以上が終わった後で、Timeline上で再生ヘッドをスクラブしてやると、2D背景素材のアニメーションが確認できます。

Seq_Titleにブラックイン演出を入れる

Seq_Titleの冒頭に、黒画面から次第に桜吹雪が散るタワーへ切り替わるブラックイン(B/I)演出を入れます。
まず、Layersノードの直前に新規グループを作成し、「B/I」とリネームします。

新規Blendノードを作成し、B/Iグループに入れます。Blendノードは下のように接続します。

SolidColorノードを作成し、B/Iグループに入れます。SolidColorノードのColorに黒(サンプルは、RGB=(10,10,10)ぐらいです)を設定し、BlendノードのInputポートに接続します。
BlendノードのOpacityの値を「0」にします。

Blendノード上で右クリックメニューを出し、「Expose As Component」を選択します。

Timelineウィンドウの「+」ボタンより、Unity.VisualCompositor > Blend Node Track を選択します。

B/Iグループ内のBlendノードのObjectから、「BlendNode (Blend Node Proxy)」をドラッグして、新規にできたBlend Nodeトラックにバインドします。トラックのNoteには、「Black In」とメモしておきます。

Blend Nodeトラックの空のクリップ領域で右クリックメニューを出し、「Add Blend Node Playable Asset」を選択します。

「Blend Node Playable Asset」クリップが配置されたら、B/Iグループ内のBlendノードに移動し、Object項目の右端にある赤丸ボタンをクリックし、点滅状態にします①。
Timelineの再生ヘッドが「0」の位置にあることを確認したら、Opacityの数値に「1」を入れ直します②。(スライダーを軽く動かして元の「1」に戻すでもよい。)

赤丸ボタンをもう一度クリックして、点滅を止めます③。
続いて、Timelineの再生ヘッドを「24」まで移動します④。

B/Iグループ内のBlendノードに移動し、もう一度、赤丸ボタンをクリックし、点滅状態にします⑤。Opacityのスライダーを動かし「0」にします⑥。
以上が終わったら、点滅している赤丸ボタンをクリックし、点滅を止めます。

以上の手順が終わった後で、Timelineの再生ヘッドをスクラブしてやると、画面が全面黒から桜吹雪が散るタワーへと切り替わるのが確認できます。

Seq_01の背景素材中のドアを動かす

Seq_01の背景素材にもアニメーションをつけます。Seq_01でアニメーションをつける場所は、玄関のドアです。
玄関ドアの素材には、すでにTransformノードを仕込んであります。

それでは、Seq_Titleと同様の手順でSeq_01_TimelineにTransform Nodeトラックとクリップを追加してください。

アニメーションキーは、「0」フレームの位置に「Offset X=-218」を設定します。

続いて、「13」フレームの位置に「Offset X=0」を設定します。

以上の設定が終わったら、Timelineの再生ヘッドをスクラブしてみましょう。SDユニティちゃんが玄関を飛び出した後で、開いているドアが閉まるのが確認できます。

Seq_02の「空」の背景素材を動かす

Seq_02では、SDユニティちゃんはフレーム内の固定位置で、ループ状態で走る演技をしています。その背景である「空」を流してやることで、「走っている」印象をより強めてやります。
BGグループ内のTransformノードをTimelineと連動して動かしていきます。

それでは、Seq_Title、Seq_01と同様の手順でSeq_02_TimelineにTransform Nodeトラックとクリップを追加してください。

アニメーションキーは、「0」フレームの位置に「Offset X=0, Offset Y=0」を設定します。

続いて、「47」フレームの位置に「Offset X=-80, Offset Y=-30」を設定します。

設定が終わったら、Timelineの再生ヘッドをスクラブして、走るSDユニティちゃんに合わせて背景が良い感じに流れているか、確認してみてください。

Seq_03で2Dブラーの強さを変える

Seq_02とSeq_03は、SDユニティちゃんの「ジャンプ」を使った「アクション繋ぎ」でつなげています。それを強調するために、Seq_03の冒頭に2Dブラーを使った、被写体深度風演出を追加します。
2Dブラーの強度を変えるには、Blurノードの設定を直接変えるよりは、Blendノードの強さを変えたほうが、上手に絵作りできます。

それでは、今までと同様の手順でSeq_03_TimelineにBlend Nodeトラックとクリップを追加してください。

アニメーションキーは、「0」フレームの位置に「Opacity=1」を設定します。

続いて、「17」フレームの位置に「Opacity=0」を設定します。

設定が終わったら、Timelineの再生ヘッドをスクラブして、SDユニティちゃんが着地するタイミングに合わせて、キャラにピントが合う感じが出ているか、確認してみてください。

Seq_03にブラックアウト演出を追加する

Seq_Titleの冒頭に、画面黒から最初のカットに入る演出を入れましたが、Seq_03には最後のカットが暗転して画面黒になる演出を追加します。このような演出をブラックアウト(B/O)演出といいます。

ブラックイン演出の時と同様に、Layersノードの直前に新規グループ「B/O」を作り、中に新規に生成したBlendノードとSolidColorノードを入れます。各ノードは図のように接続しておきます。
BlendノードのOpacityを「0」から「1」へと動かしていくと、画面が暗転していく様子が確認できます。確認が終わったら、再びOpacityを「0」に戻しておきましょう。

Seq_Titleの時と同様に、Seq_03_TimelineにBlend Nodeトラックとクリップをもうひとつ追加します。

今回アニメーションキーは3ヶ所に打ちます。
まず「0」フレームの位置に「Opacity=0」を設定します。

続いて「165」フレームの位置に、再度「Opacity=0」を設定します。

最後に「175」フレームの位置に「Opacity=1」を設定します。

それぞれのフレームの位置で、Object項目の右端にある赤丸ボタンをクリックして点滅させ、Opacityの数字を入力し、再び赤丸ボタンをクリックして点滅を停めるを繰り返すことを、忘れないでください。

キーを3つ打ち終わったら、一番下のBlend Nodeトラックの「カーブボタン」をクリックしてください。BlendNodePlayableAssetクリップの下にカーブビューが開きます。
図の赤い矢印の3ヶ所にキーが打たれていることが確認できます。

カーブを見てみると、1つめのキーと2つめのキーの間が曲線になっています。これを直線に修正します。

まず1つめのキーにマウスカーソルを合わせ、右クリックメニューを出します。図のように「Free Smooth」と「Flat」の両方に「✓」を入れてください。

続いて2つめのキーにも同様の変更をおこないます。

メニューを閉じると、1つめと2つめのキーの間が直線で結ばれるようになりました。修正が終わったら、再び「カーブアイコン」をクリックして、カーブビューを閉じてください。

6. Sequencesアセットバリアントのアニメーショントラックとクリップの名前を整理する

最後に、次の第13回に進む前に、Sequenceアセットバリアントとして配置しているCharacterのアニメーショントラックとそのクリップの名前を整理します。下の図の各々2ヶ所になります。

Seq_02_Timeline内のCharacterグループ内のアニメーショントラックとそのクリップ

「SD_unitychan_seq01」を「SD_unitychan_seq02」に変更します。

Seq_03_Timeline内のCharacterグループ内のアニメーショントラックとそのクリップ

「SD_unitychan_seq01」を「SD_unitychan_seq03」に変更します。

両方とも、オリジナルのSequenceアセットである「SD_unitychan_seq01」が名前として使われてますので、実際に使われているSequenceアセットバリアントの名前に変更しておきます。
「実際に使われているアセットバリアントの名前のほうに合わせておく」ほうが、後々間違いをする可能性が減りますので、使うアセットが決定したら合わせて直しておくとよいでしょう。

ここまでの成果を通しで見てみよう!

一緒に手を動かして演習をしてくださった方も、ご自身のプロジェクトで確認してみてください。
この段階まで終わったら、ムービーはひとまず完成といってもいいでしょう。

今回のまとめ

最後に今回作業しながら学んだことをまとめておきましょう。

  • 今回は、各シーケンスに配置したキャラクターモデルに対して、具体的な演技をつけていく方法を学びました。

  • キャラクターの演技は、身体全身の動きを表現するアニメーションクリップと、表情や口の形を表現するアニメーションクリップを、それぞれモデルに足していくことでつけていくことができます。それらのクリップはTimelineのAnimationトラックで管理することができます。また移動は、Transform Tweenトラックを使うことで、移動ポイントを指定するだけで表現することができます。

  • 背景素材を動かすには、Transformノードトラックを使って、Visual CompositorとTimelineを連動します。Transformノードの他にも、Timelineと連動できるノードは、BlurノードやBlendノード等、沢山あります。

  • さらに音楽を追加することで、各シーケンスやアクションのタイミング調整ができるようになります。音楽は、背景素材の動きを通じて表現されるカメラワークとキャラクター演技の統合の面でも欠かせないものです。

  • また作業の途中で、割り当てるアニメーションクリップが影響して、キャラクターモデルの向きが反転してしまうトラブルも経験しました。それらトラブルの解決方法として、以下の2つの例を紹介しました。
    ● Clip Transform Offsetsを調整することで、解決できる例、
    ● プレファブバリアントに含まれるモデルの方向を更新することで、解決できる例、
    いずれの方法も有用ですので、ぜひ覚えてください。

今回の作業が終了した時点のプロジェクトをこちらにご用意しています。
参考にしてください。

次回の予告

今回で、ムービーはひとまずの完成段階を迎えました。
次回は、一旦完成したムービーをさらにブラッシュアップしていく仕上げ工程を紹介します。
お楽しみに!

この記事が気に入ったらサポートをしてみませんか?