[Vive]Unityちゃんのお家を綺麗に表示する

■初めに

こちらの一連のツイート

元は自作のVive用アプリの「Unityちゃんのお家」です(この記事を書いている時点では動画だけ公開しています)。

ViveやRiftの場合、目に見える解像度以上に首振りに対応するために加速度に応じたその先の映像まで描画を終えることで画像の遅延を無くすような処理をしています。そのため見かけ以上に大きな映像を計算しなければなりません。そしてフレームレートは90fps。1フレーム辺りの処理を約11ミリ秒以内にグラフィックの描画+スクリプトの実行などを終える必要があります(一般的なゲームが60fps、約16ms/フレームと考えるとかなり余裕がないのが分かると思います)。そのためスクリプトを最適化したり、描画負荷を減らすために凝った映像表現を控えることをしていました。

最近はグラフィックボードの性能も上がったのと、ViveやRiftのライブラリの最適化も進んだおかげで以前よりは凝った映像表現ができるようになりました。ということで、このアプリで行っているテクニックについていくつか紹介します。

■使用しているUnityのバージョン

Unity5.4.0p1を使用しています。

■使用しているアセット

Unityちゃんのお家に使用しているのは「ArchVizPRO Interior Vol.1」と言うアセットです。

この方は他にも幾つかのモデルデータを公開されていますが、どれもとても緻密でありながらVR Readyを謳っています。

■ライトの設定

ライトの数はDirectional Lightが1つしかありません。これも高速化に一役買っていると思います。デモシーンではリアルタイムライまたはとベイク+リアルタイムライトの組み合わせのどちらかが選べるようになっています。

image2

■レンダリングの設定

Vive用の基本アセットのSteam VR PluginをインポートするとSteam VRセッティングダイアログが表示され、その設定項目にもあるので問題ないと思いますが、念のため掲載します。

[Edit]-[Project Settings…]-[Player]

image2

■Qualityの設定

カメラでHDRを使用する予定なのでMSAA(Multi Sampling Anti-Alias)を無効化します。MSAAはDefferedレンダリングやHDRレンダリングでは使用できません(リファレンス参照)。

image2

■カメラの設定

ArchVizPRO Interior Vol.1」にはスタンダードアプリ用とVRアプリ用の二つのカメラの設定があります。

スタンダード用はDifferedレンダリングを活かしScreen Space Reflectionなど比較的重たいけど綺麗なImage Effectを用いたものになっています。

image2

今回は説明を省きますが、スタンドアロンアプリケーションで綺麗な映像を出したいなら是非「みんな大好き「学校アセット」を Unity5でライティング」をご覧ください。

さてVR用ですが、以下のようになっています。

image2

何故かRendering PathをDeferredで上書きしていますが、それは置いておきます(今回の動画で使っていません)。それ以外における注意点としては以下の通りです。

  • Bloomを有効にするためにHDRをチェックする
  • Image Effectスクリプトは適用順番で処理が変わるので、上記のように「HDRでやるべき処理」、「HDRからLDRに変換(Tonemapping Color Grading)」、「LDRでやるべき処理」と言う順番を意識して設定する必要あります。

次にそれぞれのスクリプトの設定について示します。この設定内容は付属のシーンファイルではなく、今回の「Unityちゃんのお家」で使用した設定例です。

image2

綺麗に光らせるコツとしては、BloomのRadiusを大きくしてIntensityを調整するとよいと思います。あと好みになりますが、Tonemapping Color GradingのTonemappingのTonemapperの指定でかなり画像の印象が変わるので色々と試してみてください。今回はACES(何の略?)でExposure(露出)を少し高めに設定しています。

■シネマティックイメージエフェクト

Unity標準アセットにイメージエフェクトがありますが、若干の機能不足および性能不足という問題がありVRではあまり使われていませんでした。またアセットストアには様々なイメージエフェクトが販売されていますが、全てを試すわけにもいかないのとVRで上手く動作するか検証するのも一苦労です。

そんな中、Unity5.4搭載予定の新しいイメージエフェクトである「シネマティックイメージエフェクト」が公開されています(あれ?リリース版のUnity5.4にはまだ含まれていないような…)。

こちらはまだベータ版およびアルファ版ですが比較的安定した動作をしています。またVR使うには重たくて使えなかったbloomがかなり軽快に動作するので是非とも試してほしいと思います。既存のImage Effectと名前が同じですが名前空間が違うので共存可能みたいです。とは言え混ぜて使うときは細心の注意を払ってください(私は面倒なのでシネマティックイメージエフェクトしか使っていません)。

ArchVizPRO Interior Vol.1」には初めからシネマティックイメージエフェクトが同梱されています。自作VRアプリを作るときはアセットストアから「Cinematic Image Effect」をインポートして使用してください。

■[CameraRig]のカメラにImage Effectを適用するときの注意点

Steam VR Pluginに含まれているVive用のカメラおよびViveコントローラのプレハブをシーンに設置していると思いますが、イメージエフェクトを適用するカメラはこちらです。

image2

この時、「イメージエフェクトは適用順番に気を付けて設定すること」と書きましたが、タイミングが分かりませんが、シーンを再度読み直し(あるいは実行した時かも)したあと、なぜかアルファベット順にスクリプトが並び替えらえてしまいます。もし、そうなったらコンポーネントの右上にある歯車のアイコンをクリックして「Move Up」「Move Down」を実行して調整します。

image3

このとき、「Move Up」「Move Down」を実行すると初回時に「このアクションによってプレハブ構造が壊れるけどいい?」と聞かれるので[Continue]と答えましょう。

image3

■Lightingについて

Lightingの設定はこのようになっています。

image3

本当ならBacked GIするとさらに画像が綺麗になるのが分かっているんですが、それをするとなぜか床に投影されるはずのユニティちゃんたちの影が表示されないので仕方なくチェックを外しています(理由がありそうですが上手く説明できない)。

あとは適当にLight Probe GroupやReflection Probeを設定しています。

■Skyboxについて(2016/08/22 17:16追加)

Skyboxは白一色ですがExposure(露出)が4に設定されています。これとHDRが働いていい感じに強い光が部屋の外から差し込んでいるように見えます。

image4

実際、部屋の外には木が置いてあるだけでのシンプルな構成になっています。これはVRに限らずお部屋系のコンテンツでは使えるテクニックだと思います。

image4

 

記事には一切出ていませんが、中でSDユニティちゃんたちがウロウロしています。という事でライセンスを表示。

Light_Silhouette

 

 

 

 

@UTJ/UCL

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です