【UE4】ポストプロセスの使い方
最初に
どうも、ろっさむです。
今回はUE4でのポストプロセスについて学んだことを自分用にまとめたものとなります。
ポストプロセス(PP)とは
基本的に**「プロセス後に適用するもの」を指します。つまりレンダリングプロセスの最終段階で追加でエフェクトのレイヤーを適用することとなります。
これによって、ゲーム等に対して映画のようなセピア調の効果をかけたり、ホラー映画のようなノイズを走らせることが可能となります。
有名なポストプロセスの例としてはブルームや被写界深度(DOF)**などがあります。
UE4ではほぼすべてのポストプロセスがデフォルトで有効になっています。
それらのデフォルトで有効となっているポストプロセスをオーバーライドして制御するにはPostProcessVolumes
か、コンポーネントが必要となります。
(ちなみに略称は「PP:Post Processing」)
ポストプロセスボリューム(PPV)とは
UE4でのポストプロセスに関する諸々を設定できるボリュームのことを指します。
PostProcess Volume
を使用する方法は2つあります。
- 普通にサイズを調整して使用する。そうするとボリュームの内側と外側で異なってくる。基本的にはこういったボリュームは1つだけ追加される。
- 設定から
Infinite Extent Unbound
を有効にするとボリュームのサイズは関係なくなり、環境全体に影響を与えるようになる。
手法の一つとしては、「全体に影響を及ぼすボリューム一つと別でかけたいポストプロセスボリュームを一つ追加して範囲指定する」などがあるようです。
ボリュームには優先順位を設定できるので、「この位置にいる時はこのPPを適用したい…」等に対応できます。
PPVの設定
ポストプロセス設定のチェックボックスは有効かどうかではなく、**「オーバーライドを有効にするかどうか」**という意味になります。
パフォーマンス節約のためや、機能をオフにしたい場合はIntensity
を上書きして0
に設定すると無効になります。これは単にエフェクトを除去するのではなく、レンダリングの一部を無効にすることとなります。
特定のエフェクトをオフにする別の方法としては、Project Settings...
で各項目のオンオフを変えたり、Rコマンドを実行したり、コンフィギュレーションファイルに追加することができるようです(が、まだ試したことはない)。
明暗順応(後述)を無効にするには自身でPPVを設定してIntensityを0にする必要があります。
ポストプロセスコンポーネントも同様の機能を持っているが、あまり一般的な機能ではないため、今回の説明からは省きます。
ブルーム
Intensity
を大きくすると画面が明るくなります。
-
Threshold
はどのピクセルがブルームを放射するかを制御する。0か-1以下の低い値に設定されている場合は、基本的にほぼすべての画面からブルームを発射する。 - 畳み込みを用いた別のタイプのブルームもある。ただし負荷が高め。シネマティクスを意図して使うものであり、ゲームとしては負荷が高すぎるため、パフォーマンスが重要な際には使用しない。
Default:
Intensity:3.0
被写界深度(Depth of Field)
画面にぼやけ効果を適用します。
-
Focal Distance
(焦点距離):カメラからの距離100単位くらいがちょうどよく遠景がぼやけます。
Default:
Focal Distance
:100
Color Grading(カラーグレーディング)
Globalの設定から確認するのがわかりやすいです。
White Balance
色温度や色合いを変えることができます。
Temp
Default:
3000
9000
Tint
Saturation(彩度)
彩度は高いほど、赤、緑、青の原色に近い状態で表示され、低いほど灰色が混じった色落ちした状態のような表示のされ方となります。
Default:
0.4
1.4
Contrast
明るい箇所と暗い箇所の色の調整ができます。値を下げるとハイライトが消えて画面が明るくなりますが、色落ちしたようにも見えます。値を上げると画面が全体的に暗くなります。
default
0.4
1.4
Gamma
画面の黒と白の中間の輝度の色を調整します。
default
1.4
Gein
画面上の白の輝度を調整します。
default
Offset
画像の黒い部分の輝度を調整します。
default
その他
-
Shadow
-
Mid-tone
-
Highlight
これらではGlobalと同じことができる。しかし、最も暗いピクセル(Shadow)、最も明るいピクセル(Highlight)を対象にするか、またはそれ以外の全てのピクセル(Mid-tone)を対象にするかで、ピクセルを分けて効果をかけることができる。
また、細かく設定したい場合は露出制御(次項)が可能。
Exposure
(Lens > Auto Exposure)
ここで最大と最小の明るさが設定可能です。
無効にしたい場合は、Min Brightness
とMax Brightness
を1.0にするだけです。
自動露出は表示する内容に応じて画面を明るくしたり暗くしたりできる機能となっています。例えばランプのような非常に明るいものをみると、ランプから受け取った大量の光を補正するために画面が自動的に暗くなります。
逆に非常に暗い場所を見た場合は、暗さを補うため画面が明るくなります。
default
露出補正:-1
露出補正:2
Ambient Occlusion
Rendering Features > Ambient Occlusion
から設定可能です。
これはScreen Space Ambient Occlusion(スクリーン空間アンビエントオクルージョン)
の項目で、「スクリーン空間~」という名称のエフェクトは多くの場合、既にほぼ完成しレンダリングされた画像に適用するエフェクトを指します。このエフェクトはスクリーン上で計算が行われています。
略称はSSAO、以下の記事がSSAOの概要について参考になりそう。
https://qiita.com/mebiusbox2/items/2a18994a5caa6d584099
Settings > World Settings
のアンビエントオクルージョンは、ライトマップにベイクされたアンビエントオクルージョンとなります。
SkylightにはDistance Field Ambient Occlusion
というセクションがあり、これは距離に基づいています。
ポストプロセスの方はスクリーン空間に基づいてアンビエントオクルージョンを生成しています。
尚、上記三つは異なるアンビエントオクルージョンである。
高品質にしたい場合はAdvanced > Quality
で試すことができるようです。
このエフェクトはレンダリングの際に負荷が軽いのでデフォルトで有効になっています。
Lens Flares
レンズフレアは画面の最も明るいピクセルを使用して自動的にレンズフレアをレンダリングする機能です。これはコントロールがきかなくなる可能性があるので、コンテンツや環境内のマテリアルを適切な明るさレベルにして慎重に設定する必要があります。また、この設定はデフォルトでオフになっているので Intensity
にチェックを入れることで有効にすることができます。
Lens Flare
からIntensity
をあげることで調整可能。明るさが十分のマテリアルなどではレンズフレアが発生します。
空のみレンズフレアを発生するようにも可能です。
また、色合いを変更したり別のテクスチャをそれにバインドすることが可能です。
フレア自体の中で個々の形の色調を変えることもできます。
Intensity:1(チェックを入れた状態)
Grain(粒子)
Lens > Image Effects > Grain Jitter(粒子ジッター)
or Grain Intensity(粒子強度)
の数値を高くすると以下のようにざらついた感じになります。
多少の効果をつけるとゲームやリアルタイムアプリケーションで、過去のような見せ方をすることができます。
default
Grain Intensity
:1.5
Vignette(ビネット)
これはデフォルトで既に有効になっていて、画面の隅が少し暗くなる機能です。値を大きくすると画面の中心部だけが見える状態になっていきます。ホラーの演出などに使用できそうですね。
1.0
Chromatic Aberration(色収差)
オブジェクトのRGB値をイメージの外縁に分散させます。フィルムと同じです。
ゲームプレイのエフェクトやプロジェクトタイルに当たった時のエフェクトとして使うとちょうど良さそうです。
必要ない場合はボリュームまどでオフにしましょう。
default
Intensity
:5.0
Dirt Mask(汚れマスク)
テクスチャマップをカメラのレンズに追加して汚れや透かしなどを再現できます(テクスチャを持ってないので例が出せません…)。
アンチエイリアス方法の変更
Edit > Project Settings > Engine >Rendering > Default Settings > Anti-Atlasing Method
- デフォルトだと
TemporalAA
。FXAA
ではサーフェス外のものは考慮しないが、TemporalAA
では考慮される。 -
MSAA
をサポートしているのはフォワードレンダリングだけ。今回はディファードレンダリングを使用しているので、このオプションは検討しない。 -
FXAA
は「高速近似アンチエイリアシング」と呼ばれる。深度アルゴリズムでサーフェスのエッジを検出する。その後、ピクセルブレンドアルゴリズムを割り当てて、そのエッジに沿ってエイリアス処理されたエッジを解決する。オブジェクトのサーフェス外のものは考慮しない。