今回はOculus Questの開発ネタをやっていきます。
内容的にはOculus Rift Sなどにもそのまま応用できるかと思います。
OculusQuestでもポストプロセスを使いたい!
そんな時に役に立つアセットFast Mobile Post Processing(有料)について紹介します。
この記事はUnityゆるふわサマーアドベントカレンダー2019 16日目の記事です。
UnityではPost ProcessingStackを使う事でポストプロセスを簡単につけることができます。
しかしこれは非常に重くモバイルには不向きです。(そもそもVRではPostProcessingはあまり推薦されていない)
そこで今回はアセットの力を借りてポストプロセスをかけてみます。
開発環境
Windows 10
Unity 2018.4.5f
Oculus Integration ver1.39
Oculus Quest
アセットストア
アセットストアでは様々なポストプロセスパッケージがあります。
ジャンル的にはShaders Fullscreen & Camera Effectsです。
VR対応を明記していなくともMobile向けであれば動くようです。(要確認)
Fast Mobile Post Processing: Color Correction(LUT), Blur, Bloom
モバイル向けに特化したPostProcessingで、LUT(色補正)、BLUR、BLOOMの3つが入ったセットです。
特にBLURに関してはアセットストア最速を謳っています。
【最終更新日】 2019年6月11日
【サポートバージョン】Unity2017.1.0~
こちらのアセットは期間限定で無料ダウンロードすることができました。
もし入手できている方はラッキーです。
正式名称が長いので以下「Fast Mobile Post Processing」と表記。
同パブリッシャーさんのアセット
アセットの作者であるRufat Ismaylovさんですが、他にも複数のアセットをリリースされています。
どれもモバイル向けのものです。
Sleek Render(配信終了)
Standalone VR Meetup #2にて、ごんびぃー@GONBEEE_projectさんの発表にありました、
モバイル向けのポストプロセス、Sleek Renderも選択肢に入ってきます。
これはモバイルでも動く高速なPostProcessingStackです。
2017年11月にリリースされ、リリース初期は無料でダウンロードできました。
しかし2019年7月にて配信が終了しました。
これに関してはUnityForumでアセット作者の方が説明しています。
配信終了理由
要約するとアセットストアの収入だけでは生活が厳しく、これ以上更新し続けることができなくなったため。
たとえ更新できなくとも販売し続けることはできますが、カスタマーサポートの観点では大きな欠点になるため。
SleekRenderの入手方法
購入済みの方は、いつでもAssetStoreメニューからダウンロードすることができます。(AssetStoreの機能)
購入していないが興味のある方向けに、MITライセンスでGitHubに置くことを検討しているそうです。
ただし最近購入した方の金銭的努力を損なうので、2020年1月まではないとのこと。
既に購入済みの方はメールからサポートを受けることができます。
こちらもごんびぃー@GONBEEE_projectさんが解説記事を出しています。
詳しい使い方は下のリンクからどうぞ。
モバイル向けで複数のポストプロセスが入ったものですとこのあたりでしょうか。
SleekRenderは現在入手不可ですので、今回はFast Modile Post Processingを使っていきます。
シーンの用意
今回も毎度おなじみ、AvatarGrabシーンを使っていきます。
Assets/SampleFramework/Usage/AvatarGrabにあります。
光るオブジェクトの用意
Bloomなどが効いているか確認するため、光を放つオブジェクトを作っておきます。
これはまあなんでもいいです。
Fast Mobile Post Processing
基本的に付属のスクリプトをカメラに張り付けるだけで動作します。
インスペクターパラメーター
Shader
PostProcessingシェーダーを設定するだけ
Blur
ぼかしを有効にするかどうか
Iterations
ReadMeによると「不鮮明な繰り返しの数。より多くの反復、より多くの操作を必要とするシーンをよりぼやけさせる」とのこと
???
値が大きいほど負荷がかかるので注意、値は2のままにしたほうがいいらしい。
BlurAmout
ぼかしのレベル
BloomAmout
Bloomの量
BloomThreshold
ブルームをかけるしきい値
FilterWidht & FilterHeight
適用されるぼかし画像の幅
LUT
色補正を有効にするかどうか
LutAmout
Lutの量
SourceLut
色補正のプリセットは複数あります。
使い方
Cameraにスクリプトを追加する
MobilePostProcessingまたはMobilePostProcessingSingletonをCameraにアタッチします。
ちなみにCameraとはCenterEyeAnchorのことです。
Shaderを設定
ShaderにはSupGames/Mobile/PostProcessを設定します
LUTテクスチャの設定
Source LutにLUTテクスチャを設定します。
LUTテクスチャは以下の通りです。
Maskテクスチャの設定
ReadMeによるとBlurMask.pngまたはhumanEye.pngを設定するとのことですが、
BlurMaskが見当たらないのでhumanEyeを使います。
LUTとBlurはチェックボックスでオンオフ切り替えることもできます。
もちろん両方同時に適用可能。
実機で動かしてみる
Androidビルドをして実機で動かしてみましょう。
設定は上記の通りです。
無事動きました。が何か違う気がする。
デフォルトのパラメータ設定ですとBlurが強すぎるのかもしれません。
このあたりを少し調整してみます。
LUTとBlorをオフにしてBloomのみ使ってみます。
ここで注意点
BlurとLUT両方のチェックボックスをオフにするとPostProcessingが動作しません。
片方は必ずチェックしておく必要があります。
Blurの場合ですとBlurAmoutを0に、FilterWidthとFilterHeightを1にするとBlurが実質機能しなくなるのでこれで乗り切ります。
大分見やすくなりブルームが効いているのがわかります。
右手を握ることでオンオフ切り替えるようにしてみました。
ただ、なんかこう・・・光がにじみ出る感じが少ないですね。
どちらかというとDirectionalLightをもう一つ追加しているかのような見た目。
モバイル向けなのでこのあたりは割り切りかもしれません。
PostProcessingStack v2
そもそもUnity標準のPostProcessingStackはどのくらい重いのでしょうか。
去年あたりからアンチエイリアシング、ブルーム、色収差など一部のエフェクトにはFastModeが用意されています。
これはクオリティを落とすことでパフォーマンスをブーストするモバイル向けの機能です。
これを使って実際にQuestで動かしてみましょう。
使用するエフェクトはアンチエイリアシングとブルームです。
あれ?意外と良い。
少しカクついているような気がしなくもないですが、全く動かないというわけではなさそう。
光がにじみ出ている感じがとてもいい。
プロファイラー
パフォーマンスはどうでしょうか、プロファイラーを見てみましょう。
大体の目安としてどうぞ。
Fast Mobile Post Processing
PostProcessingStack v2
ちなみにFast Mobile Post Processingのオンオフ時の違いはこんな感じ
FastModeとはいえPostProcessingStackの処理は重い様子。
その分とてもきれいですのでここはケースバイケース。
まとめ
Fast Mobile Post Processingならとても軽量なポストプロセスをかけることができる
PostProcessingStackなら高品質だが処理はそこそこ重い、ただし全く動かないというわけでもない
ごんびぃーさんの記事を見る限り、SleekRenderの方がとてもきれいで使いやすそうではあります。
持っている方はSleekRenderの方を試してみるといいかもしれません。
参考文献
PostFX v2 – アップグレードされたポストプロセッシングスタックで美しいビジュアルを実現しよう – Unity Blog
Create high-quality visuals in Unity with the Post-Processing Stack - Unity
Unity's post-processing image effects stack - Unity
Best Practices for Rift and Android
他間違っている箇所がありましたらコメントにお願いします。