レイアウトの基本とカメラ設定

この記事は[Houdini Apprentice Advent Calendar 2019](https://qiita.com/advent-calendar/2019/happrentice) 13日目の記事です。

2018年のアドカレから、なぜかぴったり1年ぶり12/13を選んでしまいました。
今回もコードはほとんど出てこないポエムです。

##レイアウトとカメラを選んだ理由
CGを学ぶ方のTwitterなどを見て、初心者向けの内容には需要があるのだ、と何かで見た気がするので、

「何をどうすればいいのか全くわからん」

という方への想定で、基本的な部分を主観を交えて書いています。

デモリールやポートフォリオ作成の際に少しでも役立てばと思います。
雰囲気が伝わればヨシとして、あとは各自で果てしない研究の旅に出てほしいです。

##レイアウト（構図）とは
レイアウトは視覚によって意図を伝えるためのツールの一つです。
視覚による言語といえます。

言語は習得する必要があり、レイアウトも学習して習得します。
受け手が言語を知らないと通じませんが、映画をはじめとする視覚情報に触れている現代人の多くは共通言語として無意識に理解しています。
映画産業の発展とともに、多くのレイアウトが意図を伝えるための文脈の中で生まれてきました。

##基本レイアウト
代表的なレイアウトを紹介します。
画面に映る大きさによって変わるものが多く、時間軸によって変化するものもあります。
全てに厳密な定義が決まっているわけではなく、ここでの呼び方や内容は大まかなものです。

動きのあるショットもありますが、
基本ということで静止状態でのレイアウトのみです。

###クローズアップ
![01_closeup.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/2daed38e-a03e-ba6f-32b5-6d2f501369a7.jpeg)
Tommyです。
人物の感情（表情、しぐさ）や重要なアイテムの詳細を伝えるために有効です。
多くの場合は顔を映し、必然的に頭部が見切れることになりますが問題ありません。

Tommyからはあまり伝わってきません。

###ミディアムショット
![02_medium.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/02fd1c55-81d7-25e2-6e15-96805c7b8a5c.jpeg)
人物の腰から上あたりを映すことが多く、表情や演技を見せる他に、背景を見せて場面の説明的な要素を伝えることもできます。
複数の登場人物が入ることもあります。

この後もTommyのステージが続きます。

###ロングショット
![03_long.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/63104287-57b2-ea70-ceb5-45460346370e.jpeg)
人物の全身が映り、必然的に周囲の様子が多く入ります。
表情まで確認することはできない場合が多くなり、場面全体で意図を伝えます。

###エスタブリッシングショット
![04_establish.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/cc2ea8b7-75e6-1aec-1f2a-6ecaeeb25964.jpeg)
超ロングショットともいえる、遠景ショットです。
物語の世界観を伝えるのに適しているほか、近景ショットではわからなかった状況を明かすために使われることもあります。
冒頭や新たな状況になった際、物語の終わりに使われることが多いです。

Tommy物語も一旦終了です。

##Houdiniでのレイアウトとカメラ設定
ようやくHoudini登場です。
紹介したレイアウトは、通常のカメラ設定で問題なく可能ですが、それでは面白くない（？）ので、手間を減らしたり、イメージをつかみやすくするhipを作りました。

##hipファイル
労力が減らせる（かもしれない）[hipファイル（hiplc）](http://www.thespidersthread.com/wp-content/uploads/2019/12/Houdini_advent_2019_12_13.zip)です。
カメラはコントローラー（Null）のパラメータ操作が参照されるように設定されています。
Tommyももちろん入っています。

以下、コントローラーの説明です。
![parameter.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/d69f312d-ad6e-7586-b28d-878f62cccf0b.jpeg)

パラメータの変更は[Houdini Apprentice Advent Calendar](https://qiita.com/advent-calendar/2019/happrentice) 2日目MIN0NIUMさんの投稿がわかりやすいです。
[Houdiniでパラメータを作る話](https://qiita.com/MIN0NIUM/items/e23a5b3b62b344b621f5)


###layout style 距離の変更
今回のカメラ設定の特徴です。
画角を変えないカメラ位置と焦点距離の調整に使用します。
数値が少ないと近く、大きいと遠くなります。

**transform Z**は直接操作しません。
理由は焦点距離を変更しても映る範囲を変化させないためです。

###perspective ratio　調整用パラメータ
焦点距離とZ距離の調整用のため基本的に使いません。
※画像はlatio（日産車）になってしまいました。

###focal length 焦点距離の変更
小さくすると広角（ワイド）になり、大きくすると望遠（テレ）になります。

焦点距離を変更すると、現実では対象の映るサイズが変わります。
この設定では、カメラ位置を焦点距離と連動して変更することで画面内での大きさを（ほぼ）保持します。
純粋に焦点距離による効果に注目してレイアウトを検討可能です。
![200-50mm.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/3bcc3444-4ff2-5322-0f9a-85a0e6559d5d.jpeg)
Tommyとの位置関係。
焦点距離に応じてカメラ位置が変わり、画面内での大きさを保ちます。
![99_50mm.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/3f7d6403-6f30-c72a-6637-0c0982e5f8cc.jpeg)
50mm
![99_100mm.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/0f186b98-9141-b814-4ae6-b3668dba6cc4.jpeg)
100mm
![99_200mm.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/9867f2d0-cb9a-a6c5-80dd-04ad0c964098.jpeg)
200mm

広角側では歪みが極端になり差が大きくなります。
100mmと200mmの差は50㎜に比べ小さく、無限遠に近づくほど差は小さくなります。

###camera transtorm　カメラの位置
- X　X軸の移動
- Y　Y軸の移動
- Z　自動のため使いません

※注視点はfocusに向きます。
　focusを向かせたくない場合は、cameraノードからEnable Constraintsのチェックを外してください。

###pivot rotate　回転、周囲を回る
- X　X軸の回転（90°を超えると反転）
- Y　Y軸の回転（360°でfocusオブジェクトの周囲を一周。ターンテーブルではない）
- Z　使いません

X軸回転は、Tommyを下から見上げると力強く、上から見下ろすと弱く見えるとされます。
角度は少しで効果があり、あまり極端につけない方が自然です。
いずれも意図によって例外があります。

Y軸回転はモデルチェックに便利かもしれません。


###focus transform 注視点の位置
XYZ軸それぞれ、注視点の位置を変更します。
![40_superclose.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/cb2fc839-705f-bb90-f69d-543e867557f1.jpeg)
スーパークローズアップの調整もしやすいです。

###f stop 絞り、被写界深度設定
被写界深度の説明ができませんでした。
少ないほど絞りが開き、ボケが大きくなります。
大きいほど絞りが閉まり、ボケが少なく、ピントが合う範囲が広がります。
（絞りすぎて回折が起きるか検証していません）

※Jyuraj氏のコードを参考にフォーカスの自動追尾を設定しています。
（https://gist.github.com/jtomori/64a83a252056b2675b710a103d927fb2#file-parm-py）

###レイアウトとカメラ設定パラメータ
レイアウトを決めるための主要パラメータはTransformとFocal Lengthです。

※今回のファイル内では、**Transform Z**は使わず、**Layout style**で距離を調整します。

####Transform（変移位置）
近づけば大きく、離れれば小さく映ります。
![10_transform0.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/0b6cb558-ddb7-e5af-e73a-e942fd9c104f.jpeg)
大きいTommy
![10_transform.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/7813dc59-fd5f-7054-07a2-cb5b6e822420.jpeg)
小さいTommy

####Focal Length（焦点距離）
焦点距離によって、画面に映る範囲がワイド（広角）かテレフォト（望遠）かが決まります。
ごくごく単純に言えば、広角では広い範囲が映り、望遠では狭い範囲（圧縮効果）が映ることになります。

※技術的な説明は種々のサイトに譲ります。
![20_focal24.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/628870f3-6080-e32e-8104-cedfc36a98e2.jpeg)
ワイドなTommy
![20_focal100.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/2d88a6b2-341f-e929-8be7-dadcfad4a1c5.jpeg)
タイトなTommy

###レイアウトと焦点距離、位置の関係
シンプルな関係ですが、少し組み合わせを考えてみます。

広角の焦点距離で、近くにカメラがある場合
望遠の焦点距離で、遠くにカメラがある場合

それぞれ被写体が同じ大きさで画面に映ることがあるでしょうか。
あるとしたら、何が違うのでしょうか。

####広角で近く
![30_focal28_near.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/7b21327d-87f8-c9cf-df6a-7b53ee53635f.jpeg)

広角レンズの特徴で周囲が広く映ります。
近づきすぎると周辺に歪みが生じます。
周囲の状況を見せたいときに有効です。

Tommyの顔が強調されて見えます。

####望遠で遠く
![30_focal300_far.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/6a5fd472-79b9-ccff-2c29-62c4edf36da0.jpeg)

望遠レンズの特徴で周囲のものが近くにあるように見えます。
近い範囲のものを集めて見せたいときに有効です。

##終わりに
焦点距離と位置によって、レイアウトで見えるものは変えられます。
どのような場所で何を見せたいのか、逆に見せたくないのか、意図を明確になれば伝わりやすくなります。

大事なのは、何を見せ、どう感じてもらいたいのか、**アナログな感情**の部分です。
目的が決まれば、デジタルツールに乗せて伝えられます。

###意図する表現によって使い分ける
レイアウトはストーリーや演出とも深くつながるものです。
意図を効果的に伝えるために欠かせないので、ぜひ色々試してほしいと思います。

ライティング（照明）についても紹介できればよかったのですが、Tommyと遊んでいたら追いつきませんでした。（続きは1年後かも）
ここまで読んでいただきありがとうございました。