Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

【Oculus Quest開発メモ】Questでもポストプロセスを使いたい! Fast Mobile Post Processing編【Unityアセット紹介】

 

今回はOculus Questの開発ネタをやっていきます。
内容的にはOculus Rift Sなどにもそのまま応用できるかと思います。

 

 

OculusQuestでもポストプロセスを使いたい!
そんな時に役に立つアセットFast Mobile Post Processing(有料)について紹介します。

f:id:Raspberly:20190816233232p:plain

 

この記事はUnityゆるふわサマーアドベントカレンダー2019 16日目の記事です。

qiita.com

#ゆるふわアドカレ

 

 

 

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に関してはアセットストア最速を謳っています。

f:id:Raspberly:20190723111326p:plain

【最終更新日】 2019年6月11日
【サポートバージョン】Unity2017.1.0~

こちらのアセットは期間限定で無料ダウンロードすることができました。
もし入手できている方はラッキーです。

www.asset-sale.net

 
正式名称が長いので以下「Fast Mobile Post Processing」と表記。

 

同パブリッシャーさんのアセット

アセットの作者であるRufat Ismaylovさんですが、他にも複数のアセットをリリースされています。
どれもモバイル向けのものです。

 

 

 

 

 

Sleek Render(配信終了)

Standalone VR Meetup #2にて、ごんびぃー@GONBEEE_projectさんの発表にありました、
モバイル向けのポストプロセス、Sleek Renderも選択肢に入ってきます。

 

これはモバイルでも動く高速なPostProcessingStackです。
2017年11月にリリースされ、リリース初期は無料でダウンロードできました。

www.asset-sale.net

 

しかし2019年7月にて配信が終了しました。
これに関してはUnityForumでアセット作者の方が説明しています。

配信終了理由

要約するとアセットストアの収入だけでは生活が厳しく、これ以上更新し続けることができなくなったため。

たとえ更新できなくとも販売し続けることはできますが、カスタマーサポートの観点では大きな欠点になるため。

SleekRenderの入手方法

購入済みの方は、いつでもAssetStoreメニューからダウンロードすることができます。(AssetStoreの機能)

購入していないが興味のある方向けに、MITライセンスでGitHubに置くことを検討しているそうです。
ただし最近購入した方の金銭的努力を損なうので、2020年1月まではないとのこと。

既に購入済みの方はメールからサポートを受けることができます。
こちらもごんびぃー@GONBEEE_projectさんが解説記事を出しています。
詳しい使い方は下のリンクからどうぞ。

qiita.com

 

 

モバイル向けで複数のポストプロセスが入ったものですとこのあたりでしょうか。
SleekRenderは現在入手不可ですので、今回はFast Modile Post Processingを使っていきます。

 

 

 

 

 

シーンの用意

今回も毎度おなじみ、AvatarGrabシーンを使っていきます。
Assets/SampleFramework/Usage/AvatarGrabにあります。

f:id:Raspberly:20190816190502p:plain

 

光るオブジェクトの用意

Bloomなどが効いているか確認するため、光を放つオブジェクトを作っておきます。
これはまあなんでもいいです。

f:id:Raspberly:20190816183936p:plain

raspberly.hateblo.jp

 

 

 

Fast Mobile Post Processing

基本的に付属のスクリプトをカメラに張り付けるだけで動作します。

f:id:Raspberly:20190815231338p:plain

 

インスペクターパラメーター

Shader

PostProcessingシェーダーを設定するだけ

Blur

ぼかしを有効にするかどうか

Iterations

ReadMeによると「不鮮明な繰り返しの数。より多くの反復、より多くの操作を必要とするシーンをよりぼやけさせる」とのこと
???
値が大きいほど負荷がかかるので注意、値は2のままにしたほうがいいらしい。

BlurAmout

ぼかしのレベル

f:id:Raspberly:20190816092417g:plain

BloomAmout

Bloomの量

f:id:Raspberly:20190816092441g:plain

BloomThreshold

ブルームをかけるしきい値

f:id:Raspberly:20190816092506g:plain

FilterWidht & FilterHeight

適用されるぼかし画像の幅

LUT

色補正を有効にするかどうか

LutAmout

Lutの量

f:id:Raspberly:20190816092603g:plain

SourceLut

色補正のプリセットは複数あります。

f:id:Raspberly:20190816093010g:plain

 

使い方

Cameraにスクリプトを追加する

MobilePostProcessingまたはMobilePostProcessingSingletonをCameraにアタッチします。
ちなみにCameraとはCenterEyeAnchorのことです。

f:id:Raspberly:20190815231338p:plain

 

Shaderを設定

ShaderにはSupGames/Mobile/PostProcessを設定します

f:id:Raspberly:20190815232254p:plain

LUTテクスチャの設定

Source LutにLUTテクスチャを設定します。

f:id:Raspberly:20190815233355p:plain

LUTテクスチャは以下の通りです。

f:id:Raspberly:20190815233455p:plain

Maskテクスチャの設定

ReadMeによるとBlurMask.pngまたはhumanEye.pngを設定するとのことですが、
BlurMaskが見当たらないのでhumanEyeを使います。

f:id:Raspberly:20190815234551p:plain

 

LUTとBlurチェックボックスでオンオフ切り替えることもできます。
もちろん両方同時に適用可能。

 

実機で動かしてみる

Androidビルドをして実機で動かしてみましょう。
設定は上記の通りです。

f:id:Raspberly:20190816184010g:plain

無事動きました。が何か違う気がする。
デフォルトのパラメータ設定ですとBlurが強すぎるのかもしれません。

 

このあたりを少し調整してみます。
LUTとBlorをオフにしてBloomのみ使ってみます。

ここで注意点

BlurとLUT両方のチェックボックスをオフにするとPostProcessingが動作しません。
片方は必ずチェックしておく必要があります

Blurの場合ですとBlurAmoutを0に、FilterWidthとFilterHeightを1にするとBlurが実質機能しなくなるのでこれで乗り切ります。

f:id:Raspberly:20190816184404p:plain

 

大分見やすくなりブルームが効いているのがわかります。
右手を握ることでオンオフ切り替えるようにしてみました

f:id:Raspberly:20190816131547g:plain

ただ、なんかこう・・・光がにじみ出る感じが少ないですね。

どちらかというとDirectionalLightをもう一つ追加しているかのような見た目。
モバイル向けなのでこのあたりは割り切りかもしれません。

 

 

 

 

PostProcessingStack v2

そもそもUnity標準のPostProcessingStackはどのくらい重いのでしょうか。

去年あたりからアンチエイリアシング、ブルーム、色収差など一部のエフェクトにはFastModeが用意されています。
これはクオリティを落とすことでパフォーマンスをブーストするモバイル向けの機能です。

これを使って実際にQuestで動かしてみましょう。

使用するエフェクトはアンチエイリアシングとブルームです。

f:id:Raspberly:20190816120414p:plain

f:id:Raspberly:20190816184230p:plain

 

 

あれ?意外と良い。
少しカクついているような気がしなくもないですが、全く動かないというわけではなさそう。
光がにじみ出ている感じがとてもいい。

f:id:Raspberly:20190816131724g:plain

 

 

 

 

プロファイラー

パフォーマンスはどうでしょうか、プロファイラーを見てみましょう。
大体の目安としてどうぞ。

Fast Mobile Post Processing

f:id:Raspberly:20190816131505g:plain

PostProcessingStack v2

f:id:Raspberly:20190816131419g:plain

 

ちなみにFast Mobile Post Processingのオンオフ時の違いはこんな感じ

f:id:Raspberly:20190816125306p:plain

 

FastModeとはいえPostProcessingStackの処理は重い様子。
その分とてもきれいですのでここはケースバイケース。

 

 

 

 

 

まとめ

Fast Mobile Post Processingならとても軽量なポストプロセスをかけることができる
PostProcessingStackなら高品質だが処理はそこそこ重い、ただし全く動かないというわけでもない

 

ごんびぃーさんの記事を見る限り、SleekRenderの方がとてもきれいで使いやすそうではあります。
持っている方はSleekRenderの方を試してみるといいかもしれません。

qiita.com

 

 

 

 

参考文献

baba-s.hatenablog.com

 

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

 

 

 

 

他間違っている箇所がありましたらコメントにお願いします。