UnityでLWRP+PostProcessingStackをVRで使う際の注意点

#はじめに
こんにちは、最近ゲームエフェクトの勉強をしているZeniZeniです。
ゲームエフェクトの見栄えをよくするためにはPostProcessは非常に便利なんですが、LWRP(Light Weight Render Pipeline)と併用して、かつVRでやりたい！となると、かなりつまづくところが多いです。
この記事では、LWRP+PostProcessingStackをVRで使う場合の設定方法と注意点を説明します。

#動作環境
まず、現行はどのバージョンでも**AndroidではLWRP+PostProcessingStackをVRで使うことはできないよう**なので、OculusQuestでやりたいと思っている方々はUnityの正式対応を待ちましょう。
その他のPCVRなども、**[Unity2019](https://blogs.unity3d.com/jp/2019/04/16/introducing-unity-2019-1/#lwrp)**以上でないと動作はしません。
![bandicam 2019-09-09 17-53-05-437.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281560/b43a63d4-91c1-2ef6-1cf0-5f7fb7686dd2.jpeg)
たとえsceneビューや（実行前の）Gameビューでポストエフェクトがかかっていたとしても、実行中にVR画面から見た映像にはポストエフェクトはかかりません。VRではない（CameraのTarget EyeがNoneになっている）カメラならちゃんと映ります。

またUnity2018以下のLWRP対応したプロジェクトを、Unity2019.1以上のバージョンにアップグレードすると、大量のエラーが発生しどうしようもなかったので、おとなしくUnity2019.xで新規に作成するのが良いと思います。

今回は

- Unity 2019.1.14f1
- Lightweight RP version 5.7.2

でやっていきます。

#初期設定
まず新規プロジェクトを作成します。versionは2019.1.14f1。TemplateはVR Lightweight RPです。
![bandicam 2019-09-09 19-44-21-714.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281560/d817d72d-5dde-79b4-3693-0740ebf1dd40.jpeg)
そして最初に開かれる下の画像のようなSampleSceneでは、もうすでにLWRP+PostProcessingStackをVRで見ることができます。
Post Process VolumeのBloomの値を変えたりして試してみてください。
![bandicam 2019-09-09 20-48-15-642.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281560/0a8175f3-ca5f-e994-8fb7-86732f8e64fc.jpeg)


#注意点

## Color Gradingがうまくいかない
ポストエフェクトのColor Gradingは明るさと色調の調整を行うエフェクトですが、HDR(High Dinamic Range)設定をちゃんとしてやらないとうまく動作しません。詳しい説明は[【Unite 2017 Tokyo】ゲームの見た目も盛ったら変わる！！！！ヤバい！！ポストプロセス！！入門！！！！！！！！！](https://youtu.be/r5mNmH68KPQ?t=2214)　を見てみてください。

まず```Edit>Project Settings>Graphics```の```Scriptable Render Pipeline Settings```を確認しましょう。
![bandicam 2019-09-09 20-03-59-714.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281560/21f0fef7-e79b-4847-ac71-f1f92c736af1.jpeg)
そこで設定されているLWRP assetを選択します。
そこのQualityのHDRのチェックボックスを付けておかないと、HDRが動作しません。
ここでは影の細かい設定なんかも行えます。
![bandicam 2019-09-09 20-06-31-375.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281560/4446f77d-f008-d38e-d6e5-1059d869c31c.jpeg)
またCameraのHDR設定もOffになっていると使えないので、```Use Pipeline Settings```にしておきましょう。
![bandicam 2019-09-09 20-09-17-778.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281560/2e2b7551-ccee-17e6-2529-b1e51d5d87f9.jpeg)

## 一部動作しないエフェクトがある
こちらの[Post Processing in the Lightweight Render Pipeline](https://docs.unity3d.com/Packages/com.unity.render-pipelines.lightweight@6.9/manual/integration-with-post-processing.html)で説明されていますが、以下のエフェクトはLWRP環境では使えません。

- Motion Blurや一時的なアンチエイリアスを含むモーションベクトルベースのエフェクト
- Screen Space Reflectionsといった高価なレンダリング計算が必要なエフェクト
- ターゲットハードウェアがCompute Shaderをサポートしていない場合は Auto-exposureやAmbient Occlusion (MSVO)、Debug Monitorsといったエフェクト

## VR環境ではVignetteエフェクトをつけるとよい
上述した[Post Processing in the Lightweight Render Pipeline](https://docs.unity3d.com/Packages/com.unity.render-pipelines.lightweight@6.9/manual/integration-with-post-processing.html)で、```VRアプリでは、特定のポストエフェクトが吐き気と見当識障害を引き起こす可能性があります。 テンポの速いゲームまたは高速ゲームで乗り物酔いを軽減するために、UnityではVRにVignette効果を使用することをお勧めします。```と説明されています。
Vignetteとはなんぞやと思うかもしれませんが、要は視界の縁まわりを少し暗くするエフェクトのことです。[Unityのドキュメント](https://docs.unity3d.com/ja/current/Manual/PostProcessing-Vignette.html)にわかりやすい説明が書いてあります。

# その他Tips

## LWRP対応していないアセットを一括でLWRP対応させる。
LWRPに対応していない（LWRPのShaderを使っていない）マテリアルは真っピンクで表示されてしまいます。これは```Edit>Render Pipeline>Upgrade Project Materials To LightweightRP Materials```で一括でいい感じに変更してくれます。

#開発、執筆にあたり、下記のサイト様を参考、引用させていただきました。
1. [Unity Blog 2019.1リリース](https://blogs.unity3d.com/jp/2019/04/16/introducing-unity-2019-1)
2. [Post Processing in the Lightweight Render Pipeline](https://docs.unity3d.com/Packages/com.unity.render-pipelines.lightweight@6.9/manual/integration-with-post-processing.html)
3. [テラシュールブログ -【Unity】既存のプロジェクトにLightweight RenderPipelineを導入する](http://tsubakit1.hateblo.jp/entry/2018/09/07/221355)