ようやくUnity2018.1に手をつけたところ、PostProcessing Stack v2でつまづいたのでメモです。
※PPS用のレイヤー追加を手順に加えました(2020/8/2)
目次
PostProcessing Stack v2の初期設定
Asset Storeにある古いやつと比べると少し手順が増えているので、公式ドキュメントに沿った手順です。
PostProcessing Stack v2をプロジェクトに追加
既存のPostProcessing Stackを使っていないプロジェクトや、3Dのテンプレートで新規にプロジェクトを作成した場合、初期設定が必要です。以下の3D With Extras以下のテンプレートでは初期設定済みなのでこの手順は不要です。Post Processの調整にすぐに進めます。
PostProcessing Stack v2をPackage Managerからプロジェクトに読み込み、カメラとボリュームオブジェクトを設定していきます。
- Unity2018.1.xを起動したら、WindowメニューからPackage Managerを選びます
- All -> PostProcessing -> Install 2.0.5-previewの順にクリックしていきます
- インストールが完了したら、Packagesダイアログの右上のxをクリックして閉じます
Cameraにレイヤーを設定
PostProcessingを適用したいカメラにPost-process Layerコンポーネントを追加します。
- HierarchyビューからPostProcessingを適用したいカメラを選択します
- InspectorビューでAdd Componentをクリックして、Rendering -> Post-process Layerをクリックして追加します
- Inspectorビューに追加されたコンポーネントで、Layer欄をPostProcessingにします
- PPSレイヤーが見つからない場合は、Layer欄からAdd Layer...を選んで、開いているレイヤーに追加してから、改めて操作して選択します
- Anti-aliasingは任意で。モバイルやVRなど軽量にしたい場合はFXAA、デスクトップなど高負荷で構わない場合は用途に合わせてSMAA, TAAでもよいでしょう
Trigger
Triggerは、後に設定するPost-process Volumeのうち、Localなものを発動させる距離を決めるtransformのオブジェクトを指定します。通常はデフォルトでアタッチしてあるカメラのままで構いません。トップビューのゲームの場合、カメラではなく、プレイヤーオブジェクトからの距離で発動範囲を設定できた方が便利かも知れません。そのような時、ここにプレイヤーオブジェクトを設定します。
Layer
このカメラが影響を受けるPost-processing Volumeを設定したゲームオブジェクトのレイヤーを設定します。Unity2018.1.xにはデフォルトでPostProcessingレイヤーが定義されているので、設定するとよいでしょう。それ以外のバージョンで該当するレイヤーがない場合は自分で追加してください。無効なオブジェクトを含めるとパフォーマンスに影響するので、DefaultやEverythingを選択するのは推奨されていません。
Anti-aliasing
Post Processによるアンチエイリアシング(ドットのギザギザを滑らかにする処理)を使いたい時に設定します。FXAAがモバイル用の軽量なもの。SMAAはハイクオリティーですが、モバイルには不向きで、VR/ARでは現状で非対応のもの。TAAは過去のフレームなどを使ったアルゴリズムでやはりFXAAより高負荷で、リソースも食い、数年前のopenGLES2のモバイル端末は非対応のものです。FXAAを選択しておいて、必要に応じてその他のものに変更して様子を見るのが良さそうです。
Stop NaN Propagation
真っ黒な場所にPost Processを適用しようとすると無効な計算が行われておかしな現象が起きたりするので、それを防ぐ設定です。基本的にtrueのままにしておくのがよいでしょう。
Post-process Volumeを設定
これがv2で新しく増えた設定です。Post Processを適用する範囲や内容を個別に設定して、レイヤーやTriggerからの距離で適用範囲を切り替えられるようになりました。シーン全体で設定する場合は、1つだけ設定すれば構いません。それ用の空のオブジェクトを作成することが推奨されていますので、それに従います。
- GameObjectメニューから3D Object > Post-process Volumeを選択します
- 2018以前のUnityだと上記がないかも知れないので、GameObjectメニューからCreate Emptyを選択して空のゲームオブジェクトを作成して、名前は
PostProcess Volume
などにします - InspectorビューからAdd Componentをクリックして、Rendering -> Post-process Volumeを選択して追加します
- 2018以前のUnityだと上記がないかも知れないので、GameObjectメニューからCreate Emptyを選択して空のゲームオブジェクトを作成して、名前は
- InspectorビューのLayerで、先ほどカメラのLayerに設定したものを設定します。今回はPostProcessingです
- シーン全体に適用して構わない場合は、Is Globalをチェックします
ここにチェックを入れないと、このゲームオブジェクトと、カメラのPost-process LayerのTriggerに設定したオブジェクトの距離がBlend Distance欄で設定した距離以内になった時に、Post Processが発動するように設定できます。
- Profile欄のNewボタンをクリックして、このPost-process Volumeで発動させたいプロファイルデータ用のアセットを生成します
以上で、Post Processの初期設定完了です。効果を設定していきます。
Post Processを設定する
Post Processの内容は、Post-process Volumeオブジェクトで設定できます。定番のBloomを設定してみます。
- Hierarchyビューで、設定したいPost-process Volumeが設定されているオブジェクトを選択します
- InspectorビューのPost Process VolumeコンポーネントのAdd effect...ボタンをクリックします
- Unity -> Bloomを選択します
- InspectorビューにBloomが追加されるので、クリックして開きます
Bloomが使えない ?
ここでものすごく引っかかりました。全ての項目が無効になっていて操作できません...。何が悪いのかと色々と調べまくった後、左の丸の部分がクリックできることに気づきました...。
- Intensityの左の●をクリックして有効にしたら
1
を入力します
以上でBloomが有効になります。他の項目もチェックを入れれば使えるので必要に応じてチェックを入れて設定してください。あとは光らせたいオブジェクトのマテリアルの設定をします。
オブジェクトを輝かせる
Sphereなどを作成したら、Materialを作成して適用します。
- Bloomの効果を出すには、自己発光させますので、マテリアルのEmissionにチェックを入れます
- EmissionのColor欄をクリックします
- 輝かせたい色を設定したら、Intensity欄を1以上の値にします。例では5にしています
光りました!
Directional Lightを日没させて、SphereのIntensityを3程度に下げて、全てのオブジェクトをStaticにしてみました。やっぱBloomいいですね!
まとめ
v2では、カメラへの設定に加えて、発動条件を設定できるPost-processing Volumeの設定が必要になりました。これにより、シチュエーションや環境に応じて、自動的に演出を切り替えられるようになりました。また、それぞれのエフェクトの項目ごとに有効/無効を設定できるようになったので、パフォーマンスも良さそうです。
注意点としては、多くの機能がデフォルトでは無効になっていることです。何らかの設定をしないと効果が現れず、あれ?となることが増えたように思います。このような設定は初心者には厳しいので、正規版では修正して欲しいところです。また、公式機能にも関わらず、UIのデザイン方針が他の機能と異なるのはよくありません。この辺り、今後の改良に期待です。(この辺りは最新版で早速変わった模様です。さすがUnityさん、仕事速い 2018/7/9追記)