テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】Cinemachineでカメラに映る被写体のサイズをコントロールする

f:id:tsubaki_t1:20180404212402j:plain

今回はCinemachineでカメラの被写体サイズをコントロールするのをやってみます。

 

被写体のサイズ

カメラでキャラクターを撮影する時には、実際にはある程度の区分があるそうです。名前は今ひとつ統一していないみたいですが、大体こんな感じの区分です。

映像制作の基礎01

https://www.utdallas.edu/atec/midori/Handouts/camera.htm#ecu

f:id:tsubaki_t1:20180404214023j:plain

f:id:tsubaki_t1:20180404214035j:plain

f:id:tsubaki_t1:20180404214043j:plain

  • 背景の一部に全身が映ってる地理的。な位置を表現するのに適する
  • つま先まで映ってる。キャラクターの全体像が見える
  • 膝から上が映ってる。表情とアクションを表示するのに適する
  • 上半身が映ってる。表情や身振り手振りを示す距離
  • 顔や肩が映ってる。表情の微妙な違いを出すのに適してる
  • 更に拡大。凄くアピールしたい物があれば使える

 

自分はもうTVを見てないのですが(映像はdアニメとかnetflixのみ)、日本のドラマはClose Up Shot(顔のアップ)やMedium Shot(ズーム)、登場人物の関係や場所を表示するのにLong Shot…というのを多用するらしく、それが邦画ドラマがつまらない要因の一つではないかという意見もあり、中々に面白いです。

日本のドラマが安いのは、カメラワークのせいでもある - あざなえるなわのごとし

それぞれの顔を撮り(アップ、ショルダー)関係性を表現するときのみロング(引き)を使う。
寄って、切って、寄って、切って、引いて、切って、寄って、切って。
ひとつのカットが短い、それを繋ぎまくる。

被写体の大きさをコントロールする

さて、この被写体…画面をどの程度占めるのかを決めようと思います。

ここで重要になってくるのが、FOV(目に見える範囲)と距離です。
単純に視野が広い場合、画面に映る範囲は広くなり対象が小さくなります。逆もしかり。
例えば下の画面ではカメラのFOVを絞ることで見える範囲を狭め、キャラクターが画面を占める割合を増やしています。

f:id:tsubaki_t1:20180404222310g:plain

逆にFOVを固定でカメラ自体を動かすというアイディアもあります。この場合、重要になるのはカメラと被写体の距離です。距離はFOVによって違います。

f:id:tsubaki_t1:20180404223437g:plain

 

ちなみにFOVでキャラクターを拡大するのはズーム、カメラ自体を動かすのはドリーと呼ばれます。

tsubakit1.hateblo.jp

ちなみに、視野角が広くゲーム的に勢いがあるゲームはFOVが高い方が良い、日本のアニメキャラのように可愛い(ノッペリとした立体感のない)キャラクター絵はFOVが低い方が良いと言われてます。
Unityは初期設定60なので、アニメキャラやろうと思ったら40以下にしたほうが良いです。

 

被写体の大きさを求める

さて、大きさを変えるにはドリーとズームの二通りがある訳ですが、これを使用して被写体のサイズを云々するのを考えてみます。

 

FOVを固定する場合

まずFOVを固定する場合ですが、FOVが固定という事は常にカメラとキャラクターの相対距離が同じです。なので一度距離を求めて相対距離をセットしてやればOKになります。

f:id:tsubaki_t1:20180404224111j:plain

この距離ですが、以下のような式が使えます。実際には「肩から顔」や「全身」といった身長のデータを求めておいて、ソレを使います。
求め方が分からない時は、Cubeは1mなのでソレで何となく求めます。

gist.github.com

あとはFOVと被写体の大きさから求めた距離をCinemachineのBody - Transposerに設定します。

f:id:tsubaki_t1:20180404225239j:plain

f:id:tsubaki_t1:20180404224945g:plain

 

FOVが変化する場合

逆にFOVを自由に変更しても良い場合も考えてみます。

コチラの場合、キャラクターとの相対距離がダイナミックに変わった時にも障害物に突っ込んでポリゴンの裏に行ったりしない利点があります。

また被写体の大きさを固定しながらパン(カメラの向きを変える)する時に、ちょっとだけ楽出来ます。

f:id:tsubaki_t1:20180404230728j:plain

f:id:tsubaki_t1:20180404230711g:plain

こちらも数式で求められますが常に変更する項目です。面倒なのでCinemachineの機能を使います。

 

やり方は、Virtual CameraのAdd ExtensionsでCinemachine FollowZoomを追加するだけです。Wideth(Heightじゃないのか…?)と最小FOV・最大FOVを指定してやれば、LookAtで指定した対象をいい感じにズームしてくれます。

f:id:tsubaki_t1:20180404230959j:plain

f:id:tsubaki_t1:20180404231339j:plain

どっちもどっちですが、特にStoryBoad等と連携するときにコレを知っとくと凄い調整が楽です

関連

FOVや距離系の数式
カメラからの距離で求める錐台のサイズ - Unity マニュアル

PPSとFOVを合わせると、フォーカスを変えるとか色々出来て楽しい

tsubakit1.hateblo.jpTimelineでやる場合。アニメーションカーブで動かしちゃっても良いけど、Cinemachineで動かすのも中々悪くない

tsubakit1.hateblo.jp