チュートリアル / MotionBuilderでカットシーン制作
第3回:シーンを制作するための準備 カメラ編
- MotionBuilder
- アニメーション
- カメラ
- ゲーム
- コラム
- チュートリアル
- 中級者
- 学生・初心者
みなさん、こんにちは。
今回は、カメラの準備編です。プロジェクトの仕様に沿ってAspectRatio(フィルムサイズ)や解像度を設定し、アニメーションしやすくカメラ用のリグを作成、焦点距離(レンズのミリ数)をアニメーションしやすい値になるようにちょっとした仕込みをします。
と、その前に前回告知した通り、NoiseFilterプラグインを使用して手振れカメラの作り方もやるので、MBを起動する前にプラグインをインストールしていきましょう。
プラグインのインストール
MBを起動する前に、Nagao_Noise_Filter.dllのプラグインをインストール。
Nagao_Noise_Filter.dll はこちらからダウンロードできます。
インストールと言ってもpluginsフォルダにdllファイルを配置するだけです。
MBがデフォルトのパスにインストールされていれば以下のフォルダにプラグインを配置します。
C:¥Program Files¥Autodesk¥MotionBuilder 2018¥bin¥x64¥plugins
配置出来たらMBを起動してプラグインが使えるか確認してみましょう。
このフィルターのプラグインは、既存キーフレームに対しランダムな値を加算するフィルターです。
では、使い方を説明していきます。
Filterの機能を使うにはオブジェクトにキーフレームがないとFiltersウィンドウにFilter群が表示されませんので、適当にCubeを出してキーフレームを打ちます。[動画 00:06~]
AnimationLayer1にResampleフィルターを使ってフラットなキーで埋める。[動画 00:23~]
フラットなキーのカーブにNagao_Noise_Filterを適用。[動画 00:41~]
加算される値は以下の式の範囲です。
このフィルターを使って後程、お手軽手振れカメラアニメーションを作っていきます。
カメラの準備のお品書き
カメラの準備は大まかに以下の工程です。
① 画角、解像度、フィルムサイズを設定
② カメラリグを作成
③ 35mmフィルムの焦点距離に変換
④ 10個セットのカメラを作成
⑤ 補助線の設定
では、この工程を1つ1つ見ていきましょう。
① 画角、解像度、フィルムサイズの設定
カメラを作成し注視点を削除。[動画 00:00~]
注視点ありの場合、Rollはカメラのプロパティーで設定します。これだとカメラのRollプロパティーを表示してキーフレームを打つという作業なので手数が多いので、カメラのRotationだけで制御出来るように注視点を削除します。他の利点として、手振れアニメーションを注視点で動かして作る時、カメラと注視点の距離によって動かす値が毎回変わってしまいます。注視点無しの場合はカメラのRotationだけで制御するので手振れの具合の値は毎回同じで済むというメリットあります。
カメラリグで操作しやすくするため、Zプラス方向に向ける[動画 00:18~]
※Rotation[0,-90,0]がZプラス方向に向く
画角の取り方をApertureModeで設定しますが、これもプロジェクトの仕様によって変わってきます。
MBで設定出来るApertureModeは以下の通りです。
Horizontal&Vertical(垂直と水平両方とも画角設定)
これはほとんど使用したことはないですね。
Vertical(垂直画角)
垂直画角でカメラのズームをアニメーションします。Verticalを採用している代表的なゲームエンジンだとUnityがあります。
Horizontal(水平画角)
水平画角でカメラのズームをアニメーションします。Horizontalを採用している代表的なゲームエンジンはUE4です。
FocalLength(焦点距離)
焦点距離でカメラのズームをアニメーションします。Mayaとカメラアニメーションをやりとりするならこれが相性いいですね。MBでキーを打ったそのままの状態でMayaにImport出来ます。けどVerticalやhorizontalの場合、Importする際に内部的に画角から焦点距離へ再計算しベイクされたキーになります。
今回はApertureModeをFocalLengthに設定[動画 00:27~]
次に大事な設定としてAspect Ratio(Filmサイズの縦横比)。
これもゲームエンジンの仕様により決定します。
Unityはデフォルトだと表示解像度の比率からそのままAspectRatioが設定されます。例えば1920x1080の解像度だとAspectは「1.77…」になります。
UE4はAspectRatioを設定する箇所があります。
据え置き機のゲーム機(PS4やXBOX ONEなど)の想定し、横縦比16:9のフィルムでAspectRatioが「1.78」になるようFilmサイズのWidthを0.980インチ、Heightを0.551インチに設定し、表示解像度はHDを設定します。[動画 00:31~]
フィルムの縦横比と表示解像度の縦横比は合わせるようにしてください。
カメラの枠に色を設定して認識しやすいようにします[動画 00:47~]
② カメラリグの作成
カメラリグと言っても簡単で、カメラアニメーションを制御しやすいようにNULL階層を作るだけです。
NULLを6個作成します[動画 01:04~]
AssetBrowserでNULLをダブルクリックすると作成モードになってスケマティックビューでクリックする度作成できます。右クリックで作成完了。
NULLをリネームし親子付け[動画 01:18~]
NULLの名前はコントローラーとしてわかりやすい名前にします。
親子付けの方法は、デフォルトのキーコンフィグなら、選択してからAltキーを押しながら親にしたいノードへD&DしてParentを選択。
動かしやすくするために各NULLにLockをかけます[動画 02:30~]
今回のカメラリグで使用する各NULLの想定する動作は
CAM_TOP1:オフセット用
PAN1:パン方向(左右)の動きと全体的な移動
TILT1:ティルト方向(上下)の動き
ROLL1:傾きの動き
NOISE1:手振れなどのノイズを入れる動き
DMY_CAM1:本来のカメラとコンストレイントするための物
Rotationの軸にLockをかけた場合、ジンバルロック発生時にマニピュレーター操作した際おかしな挙動になるのでRotationOrderを変更します[動画 03:27~]
RotationOrderを決めるときは、動かしたい軸が最後にくるOrderを選択します。
PAN1ならY軸なのでRotationOrderをXZY。
TILT1ならX軸なのでRotationOrderをYZX。
ROLL1ならZ軸なのでRotationOrderをXYZ。
DMY_CAM1とCamera1をParent/Childコンストレイントを使ってSnapで拘束。[動画 04:02~]
簡単にリグの挙動確認[動画 04:28~]
コンストレイントにフォルダを作成して整理[動画 04:52~]
③ 35mmフィルムの焦点距離に変換
カメラのレンズの話で、50mmは人間が見たときと同じような見た目とか、人物を撮るときは60~70mmが良いよとか、風景は広角がいいよとかよく聞きますよね。
ここで言われているミリ数っていうのは35mmフィルムサイズ時の焦点距離のおはなし。
同じ焦点距離でもフィルムサイズによって見え方が変わってきます。逆に言うと、画角が同じ時フィルムサイズによって焦点距離が変わるってことです。
ちょっと何言っているか分からないって声が聞こえてきそうなので図で説明すると
FOV:画角 B:焦点距離 C:フィルムの半分のサイズ θ:画角の半分の値
画角を固定してフィルムサイズを変更すると、レンズからフィルムに結像するまでの距離、いわゆる焦点距離が変わっていますね。上図でいうとBのところが変わっているのがわかりますね。
これらの関係式を表すと高校数学で習った以下の式になります。
これをBについて整理すると
と、なります。この時θはFOVの半分の値。
つまり、画角とフィルムの半分の長さがわかれば焦点距離が算出できるということです。
つまり、常に35mmフィルムの焦点距離でアニメーション出来るようにすれば、どんなフィルムサイズでもレンズ(焦点距離)の選択に当たりをつける事が出来るようなります。
では、これらの計算はRelationコンストレイントを使って作成していきます。
最初にRelationコンストレイントを作成[動画 05:05~]
カメラに35mmフィルム換算の焦点距離を入れるカスタムプロパティを作成[動画 05:12~]
アニメーションノードがアクティブ化されてないとRelationに表示されないのでアクティブ化します。[動画 05:38~]
RelationコンストレイントにXキーを押下しながらD&DしてSenderとして作成[動画 05:43~]
あとはRelationコンストレイントに、35mm換算の時の画角を算出して、その画角を元にカメラのフィルムサイズに合わせた焦点距離を算出し、ノードをつなげていきます。[動画 06:40~]
ちなみに、ApertureModeがFocalLengthの時、FOVで表示されている値は垂直画角の値です。
ところで35mmフィルムサイズは
縦24mm、横36mmの大きさです。35mmフィルムと呼ばれるのはフィルムの幅が35mmだからだそうです。これを踏まえてノードをコネクションしていきます。
縦フィルムサイズの半分と35mmの焦点距離を用いてまずはtanθを算出
tanθの結果に逆関数のarctanを用いて
tanθの値を度として算出。
θの値を2倍してFOV(垂直画角)を算出。
焦点距離を算出するためにFOVの半分が必要なので0.5を乗算します。
Bについて整理した式の通りに(縦フィルム半分)÷(tanθ)を計算し
焦点距離を求め、カメラのFocalLengthにつなげます。
完成すると以下の図のコネクションになります
ちゃんと動くか動作確認[動画 09:28~]
次にこのRelationコンストレイントをマクロ化します。[動画 10:08~]
マクロ化とは、自分で作ったRelationコンストレイントを1つのノードとして扱えるようにすることです。その時入力と出力のコネクターも自由に作成することもできます。このマクロ化をプログラム的に言うと関数です。完成すると下図のようなノードとして扱えるようになります。
マクロ化した時に入力コネクターと出力コネクターを作成するのは簡単で、Macro Toolsにある「Macro Input○○○」、「Macro Output○○○」にノードを置き換えるだけです。
35mm焦点距離を「Macro Input Number」に置き換えて、右クリック→Renameで「35mm
」に名前を変更[動画 10:21~]
カメラの縦フィルムサイズをつなげている部分を「Macro Input Number」に置き換え、名前を「Film_Height」にします[動画 10:34~]
出力として、計算結果の焦点距離を「Macro Output Number」で置き換えて、名前を「00_FocalLength」にします[動画 10:55~]
今回は垂直画角、水平画角の出力は使わないですけど、色々なゲームエンジンに対応できるように出力しておきます。
垂直画角は既に算出されているので、つなぐだけです。[動画 11:59~]
水平画角は、算出された焦点距離とフィルム横半分の値を用いて算出します。
フィルム横サイズの値を「Macro Input Number」で受け取れるようにしします。[動画 12:28~]
受け取る値はインチ想定なのでミリに変換し半分にする[動画 12:50~]
焦点距離とフィルム半分の値からtanθを算出[動画 13:03~]
その値を元にarctanを使いθ算出[動画 13:23~]
θを2倍にして水平画角を算出[動画 13:34~]
完成すると下図のコネクションになります。
これらのコネクションを式で表すと以下の計算をしています。
マクロ化したRelationコンストレイントの名前を「35mm_Convert」にします。[動画 14:40~]
続いて、マクロ化した「35mm_Convert」を使ってRelationを作成[動画 14:48~]
これでベースのカメラのリグは完成です。
④ コピーして10個セット作成
次はシーン制作しやすいように同じカメラをコピーして10個1セットを作成します。
10個1セットのカメラファイルのベースを作成し保存します。このファイルを使用すればシーン制作する度にカメラを作成する必要がなく人為的なミスを減らせ、読み込めばいいだけなので効率的になります。ちなみに10という数はキリが良い数字なので余裕をもたせて30や50という数でも問題ありません。
早速、コピーして作成していきましょう。
カメラとリグを選択しCtrl+C、Ctrl+Vでコピー&ペーストします[動画 16:25~]
カメラとリグをまとめるNULLを作成し親子付け[動画 16:45~]
コピペされたリグのLockはコピーされないので、一括選択して再度Lock[動画 17:45~]
コピペされたリグとカメラをParent/Childで拘束[動画 18:40~]
35mmのコネクションも同様に作成[動画 20:49~]
一応、全部のカメラの動作確認[動画 22:45~]
グループ別けを設定[動画 25:34~]
⑤ 補助線の設定
次は、レイアウト作業の手助けになるようカメラに補助線を表示する設定をします。
補助線には3分割、黄金3分割、螺旋黄金比などなど色々と種類はあります。イラストや写真、映画なんでもそうですが、プロが作っている作品はレイアウト(構図)がしっかり考えられていて、補助線を乗っけてみるとその補助線を意識したレイアウトになっていることがほとんどです。
補助線に関して説明するとそれこそ本1冊分になってしまう位奥が深いものなので興味ある人は調べてみてくださいね。
さて今回は、一般的に使われている3分割の補助線を使用します。
補助線の画像を読み込みます。[動画 26:17~]
読み込んだ画像を各カメラのFrontPlateに割り当てます。[動画 26:27~]
本来ならForntPlateタブの下側にあるForeground Textureの横にあるてんてんのマーク […]をクリックして割り当てますが、デスクトップを録画した際上手く映らなかったので、Propetiesウィンドウから割り当てています。
補助線が各カメラにしっかり割り当たっているか確認します。[動画 27:30~]
完成したので名前を付けて適当な名前「MyCam_set10」などにして保存します。[動画 27:45~]
Noise_Filterを使って手振れカメラ
手振れ風カメラアニメーションはNoiseフィルターとButterWorthフィルターを使って作成します。
Noiseフィルターでギザギザな形状のキーフレームを作成し、ButterWorthフィルターを適用してギザギザの形状を連続的な波にします。
今回想定しているのは主観視点で軽く走っている状況のカメラアニメーションです。
まずは、シーン制作の本番を想定しShotTrackにカメラD&DしShotクリップ作成[動画 00:06~]
次の第4回のコラムで詳しいStoryの使い方を説明するので安心してください。
走っている想定で前進するようにPAN1ノードにキーを作成[動画 00:23~]
NOISE1ノードにキーを打ちResampleフィルターでキーを埋める[動画 02:18~]
NOISE1ノードのRotationにNoiseフィルターを適用[動画 02:38~]
Noiseフィルターを適用しただけの状態で再生するとガチャガチャ動いているだけなので
ButterWorthフィルターを適用します[動画 02:54~]
このButterWorthフィルターをヘルプで見ると「インテリジェント ローパス スムージングを使用して、すべてのキーフレームを平均化します」と書いてあります。ローパスとは低い周波数のみ残して、高い周波数の物は取り除きます。つまりFカーブを離散的フーリエ変換して、Cut-off Frequencyで指定された閾値より高い周波数を取り除くものです。
フムフムなるほど!これは使える!!って、普通のデザイナーはなりませんよね。
ざっくり言うと大きなカーブの形状は維持しつつ細かいカーブを取り除くものです。
Cut-off Frequencyの値を小さくすると除去できるノイズが増えますが、小さくしすぎるとカーブの形状まで変わってしまいます。
ButterWorthフィルターをうまく活用すれば、モーションキャプチャーの動きのニュアンスを残しつつノイズだけを除去することも出来ます。
ButterWorthフィルターを適用するStartとEndの範囲を少しだけ増やします[動画 02:56~]
StartとEndのフレームにはButterWorthフィルターの効果が適用されません。なのでのりしろ部分として幅を持たせてStartとEndを設定しギャップが発生するのを防ぎます。
カーブの形状とアニメーションを再生して、必要そうならStartとEndの範囲を増やしてください。
アニメーションを再生しながらCut-off Frequencyを調整[動画 03:10~]
NOISE1ノードのTranslationにNoiseフィルターを適用[動画 03:32~]
PAN1、TILT1、ROLL1ノードに横方向、縦方向、ロール方向のアニメーションを入れて全多的なカメラの動きを付けます[動画 05:02~]
あとは納得のいくまでアニメーションを調整[動画 05:15~]
さて、今回はカメラの準備でした。いかがでしたでしょうか。
カメラの画角と焦点距離については難しくて覚えるのが大変です。なので、画角、焦点距離、変換などのキーワードだけ覚えてあとで検索できるようにしておくか、このコラムをブックマークするのがおすすめです(笑)ゲームの場合、カメラの仕様は細かく決まっていているので特にAspectRatioと画角の取り方はよく確認して、シーン制作始める前にはMBとゲームエンジンで見え方が同じになるように予め確認することも重要です。
次回は、いよいよシーン制作をしていきます。
これまでのコラムで準備した、キャラクタライズファイル、BG、MCデータ、カメラのデータを使い、Story機能でシーン制作をします。乞うご期待!
まとめ
・プラグインはMBを起動する前にインストール
・カメラの設定はAspectRatioと画角の取り方を要確認
・35mmフィルム焦点距離でレンズのアニメーション
・補助線は奥深いけど重要
・Noiseフィルターで手振れカメラアニメーションを効率的に作成
今回のシーンファイルがダウンロードできます。