今回は被写界深度(Depth of Field)…ピントがあっていないモノがボケる表現についてです。
この被写界深度、何処にフォーカスを当てるのかが重要なポイントの一つなのですが、ImageEffect(Cinematic Image Effectや通常のImageEffect)と異なりPostProcessingStack(PPS)では変更が難しいです。
今回はソレを何とかします。
- PPSのピントの距離変更はCinemachineが必要
- CinemachinePost FXを導入
- PostProcessing Stack v1の場合
- Post Processing Stack V2の場合
PPSのピントの距離変更はCinemachineが必要
理由は単純で、設定がScriptableObjectに格納されているためです。*1ScriptableObject(Asset)にデータを書き込むと、大本のScriptableObjectにも変更が影響してしまうので、出来れば行うべきではない…という感じです。
Resettable Scriptabel Objectしてくれればこんな面倒な話は無いんですが…
これを、カメラ制御を担当するCinemachinePost FXで解決します。
CinemachinePost FXを導入
Post Processing Stack(PPS)にはピントを動的に変更する機能はありません。なのでCinemachineののパッケージを導入する必要があります。
ただしこのCinemachineの追加パッケージ、PPSのコードに密結合しており、PPSのバージョンによって導入するパッケージが変わります。
Post Processing Stack V1*2
Post Processing Stack V2*3
このメニュー項目が無い場合はChinemachineが入っていないか、コードがコンパイル出来ない状態です。
PostProcessing Stack v1の場合
まずはPost Processing Stack v1の場合です。
最初はPPS側の設定でDOFを有効にします。
- CameraのRendererModeをDeferredに設定
- Asset>CreateからPost Process Profileを作成
- PostProcess BehaviourコンポーネントをMainCameraに追加し、
作成したPostProcessProfileのDepth Of Fieldを有効にする - PostProcessBehaviourに作成したPostProcessProfileを設定
これでとりあえずDoFが有効になります。ならない場合は…多分どっか間違ってます。この記事か、手順か、他何らかの理由か。
上手くいったら次はCinemachine Post FXをメインカメラ…PostProcessingBehaviourコンポーネントのついているオブジェクトに追加します。
追加したら、Cinemachine Post FXのProfileに先程作成したPostProcessing Profileを設定します。
フォーカスを有効にするには、Focus Tracks Targetにチェックを入れておきます。
では、対象となるフォーカスはどうやって決めているのか?
これはCinemachineがLookAtしているオブジェクトです。
これでVirtual Cameraが有効なオブジェクトへ自動的にフォーカスがあたるようになります。
例えば下の場合、手前をフォーカスするVirtual Cameraと奥をフォーカスするVirtual Cameraを切り替えています。
ただしF値はフェードで変更出来ないので(差し替える事はできる)、その辺りは注意が必要です。
Post Processing Stack V2の場合
Post Processing Stack V2の場合も似たような感じです。
まず導入についてはコチラ
【Unity】PostProcessingStack v2を使ってみる - テラシュールブログ
さて、今回設定する上でPPS v1とPPS v2で大きく違うのは、PPS v1はメインカメラに設定を置きましたがPPS v2ではVirtual Camera毎に設定します。
- Virtual CameraのExtensionsからCinemachinePostProcessingを追加
- Focus Tracks targetにチェック
- Profileを追加し、Add EffectでDepth Of Fieldを追加
- Focus Distanceにチェックを入れて、変更可能にする
これでエフェクトがブレンドします。
PPS v2の場合はv1と異なり、ApertureやFocal Length等もフェード出来るのが良いです。