Unity を検索

HD レンダーパイプラインでフォトリアリスティックな没入型 VR 体験を作成する

2020年3月12日 カテゴリ: テクノロジー | 7 分 で読めます
取り上げているトピック
シェア

Is this article helpful for you?

Thank you for your feedback!

Unity の HD レンダーパイプライン(HDRP)が、公式にバーチャルリアリティー対応となりました。Unity 2019.3 とパッケージバージョン 7.2.0 で、HDRP は検証済みとなり、VR での使用が可能になっています。

本記事では、VR プロジェクトにおける HDRP の使用についての技術的な詳細をお届けします。HDRP でどんなことが可能かを詳しくお知りになりたい方は、こちらのブログ記事をご覧ください。

HDRP の VR 対応は、以下の形で行われています。

  1. HDRP の全ての機能が VR に対応しています。
  2. HDRP は新しい Unity XR プラグインフレームワークに完全対応しています。
  3. VR 用に推奨されるレンダリングソリューションはシングルパス(インスタンシング)で、これがデフォルトとなっています。

機能ハイライト

HDRP を VR プロジェクトに使用すれば、このレンダーパイプラインの全機能をフルに活用することができ、ご自身の想像力の及ぶ限りに、自由に体験を創り出すことができます。HDRP は、その最新鋭レンダリング技術によって、非常に美しいフォトリアリスティックなビジュアルを、従来のバーチャルリアリティー環境にはほとんど見られなかった品質で提供することができます。

以下に、VR プロジェクトで使用できる機能をごく簡単にご紹介します。

  • ディファードレンダリングとフォワードレンダリング
  • 全てのタイプのライト、シャドウ、デカール、ボリューメトリック
  • スクリーンスペースエフェクト
    • アンビエントオクルージョン(AO)
    • スクリーンスペースリフレクション (SSR)
    • サブサーフェススキャッタリング(SSS)
    • 歪み(Distortion)と屈折(Refraction)
  • ポストプロセッシング
    • カラーグレーディング、アンチエイリアシング、被写界深度など
  • Visual Effect Graph の全てのビジュアルエフェクト

対応プラットフォーム

現在、VR 向け HDRP は以下のプラットフォームおよびデバイスでご利用になれます。

  • Oculus Rift、Rift S(Oculus XR Plugin、Windows 10、DirectX 11)
  • Windows Mixed Reality(Windows XR Plugin、Windows 10、DirectX 11)
  • PlayStationVR

[OpenVR]Valve は現在、バージョン 2019.3 以降の Unity 向けに OpenVR Unity XR Plugin の開発を進めており、これは近い将来に公開が予定されています。

ステレオレンダリングの各種方法

ネイティブの VR 実装は、全ての処理を 2 回(両方の眼に 1 回ずつ)実行します。私たちはこのソリューションをマルチパスレンダリングと呼んでいます。HDRP はマルチパスレンダリングに対応していますが、この方法を用いるとアプリケーションがレンダリングに消費する CPU 能力が 2 倍になり、したがってドローコールの数が 2 倍になるので推奨されません。これだけでなく、シャドウが 2 回レンダーされるので GPU 予算のかなりの割合が消費される可能性もあります。

ただし、上記を踏まえた上でも、以下の場合にはマルチパスの使用が適切になります。

  • システムの GPU メモリが少ない場合。マルチパスのほうが、ターゲットのレンダリングに使用されるメモリがシングルパスより少なくなります。
  • 何らかの理由で、それぞれの眼に、著しく異なる視点をレンダーする必要がある場合。

より速いソリューションは、シングルパス(インスタンスト)レンダリングの使用です。このモードでは、各ドローコールが両眼に同時にレンダーされます。これは、レンダーターゲットとインスタンス化されたドローコールにテクスチャ配列を使用することによって行われます。さらに、カリングとシャドウの処理の実行が、フレームごとに 1 回のみになります。

HDRP は、全ての機能が VR に対応し、シングルパスレンダリング向けに最適化された形で設計されています。

デザインに関して私達が行った重要な決断は、テクスチャ配列を(VR 向け制作ではない場合も含め)全てのレンダーターゲットに使用することでした。この方法とシェーダーマクロの組み合わせが、自動的に VR に対応する※シェーダーの作成を可能にしました。(※ライトリストの生成、間接光とタイルのディファ―ドシェーディング、ボリューメトリックライティング、カメラに相対的なレンダリングなどの、特殊なケースを除きます。)

HDRP は 2 倍幅テクスチャのシングルパスレンダリングには対応していませんのでご注意ください。この理由は、複雑性が高くなること、また全画面の全てのパスやエフェクトにオーバーヘッドが発生するためです。

HDRP で VR の使用を開始する

HDRP で VR のご使用を開始されるには、Unity ドキュメンテーションのVR Overviewのセクションをご参照ください。HDRP の VR 向けセットアップ用に HDRP Wizard もご提供しています。このウィザードは設定を検証し、(ウィザードによって)適切でないと判定された設定の修正をサポートします。

HDRP VR Wizard

新しい XR プラグインフレームワークを使用してプロジェクトの VR 向け設定を手動で行われる場合はドキュメンテーションをご参照ください。シングルパスレンダリングを設定するには、プロジェクト設定を Single-Pass Stereo Rendering モードに設定し、かつ HDRP アセット設定も Single Pass に設定する必要があります。これら 2 つの設定のどちらかでシングルパスが無効になっている場合、HDRP はデフォルトでマルチパスに設定されます。

プロジェクト設定と HDRP アセット設定の両方で、Oculus プラグインと Single Pass レンダリングを有効にする

アンチエイリアシング

VR で素晴らしいユーザー体験を作成し、バーチャル環境の没入感を損なわないようにするためには、エイリアシングの削減が非常に重要です。HDRP には、アンチエイリアシングのソリューションがいくつか提供されています。

カメラの各種アンチエイリアシングモードに関しては、Unity のドキュメンテーションにて詳細な説明をお読みいただけます。以下を含む各種オプションが提供されています。

  • Multisampling Anti-Aliasing (MSAA) ― フォワードレンダリングに対応しています。サンプル数(2x、4x、8x)を選択して、品質とパフォーマンスのバランスを取ることができます。このモードでは非常に高い品質を実現できますが、負荷が高くなります。
  • Temporal Anti-Aliasing (TAA) ― 基本的に、大多数のアプリケーションにはこれが最適のソリューションです。エイリアシングの削減に非常に効果的です。ブラーは搭載されているシャープ化フィルターの制御によって相殺することができます。
  • Fast Approximate Anti-Aliasing (FXAA)、Subpixel Morphological Anti-Aliasing (SMAA) ― 上記よりいくらか負荷の低いソリューションです。
  • また、MSAA と TAA、FXAA または SMAA を組み合わせることも可能です。この方法はビジュアル品質を向上させますが、累積的に負荷が掛かります。
  • Geometric Specular Anti-Aliasing では、マテリアルごとに追加的なシェーディングのアンチエイリアシングも使用可能です。これはマテリアル上で直接調整できるようになっています。スムースで密度の高いサーフェスに適しています。

パフォーマンス

VR のレンダリングは、両眼に表示するためにリフレッシュレートと解像度が高くなるので、極めて高負荷です。HDRP アセット設定内で、不要な機能は全て無効にするようにしてください。ボリューメトリックなどの機能は、最低限必要な 90 FPS を満たすパフォーマンスを備えていないため、対応されてはいますが VR アプリケーションには適しません。パフォーマンスのモニタリングとプロファイリングを頻繁に行うことが、プロジェクトのボトルネックの特定に役立ちます。

VR のボリューメトリックエフェクト(z スライス)の精度はデフォルトで半分になりますのでご注意ください。これは、GPU パフォーマンスをより許容可能なレベルに保つためです。VR プロジェクトでは、ボリューメトリックライティングに加えて HDRP Area Light のサポートを無効にすることが推奨されます。Area Light の無効化は、他の機能とは異なり、ShaderConfig ファイルから行う必要があります。

HDRP では 2 つのレンダリング方法(Lit Shader Mode の Forward と Deferred)が利用可能です。これはパフォーマンスにも影響します。これら 2 つのモードの違いに関してはドキュメンテーションをご参照ください。VR 用の適切なモードの選択はプロジェクトによって異なります。フォワードレンダリングでは MSAA を有効にして消費メモリを削減することができます。ディファ―ドレンダリングは、ライトの数が多いプロジェクトにおいてより効率的に機能しますが、消費メモリもより多くなります。

GPU パフォーマンスに影響するもう一つの要因は、レンダリングバッファの解像度です。この解像度は、ご使用のヘッドセットに応じて、XR ディスプレイプラグインによって初期設定されます。その後はアプリケーション内で解像度を調整するか、動的解像度機能を使用して現在のシーンの文脈に応じて解像度を調整することができます。例えば、現在の GPU フレーム時間に解像度を適応させることも可能です。

Unite 2019 Copenhagen で行われた HDRP VR に関する講演では、この他にも各種のヒントをご紹介しています。

HDRP VR の技術的詳細

HDRP を VR に対応させるにあたり、レンダーターゲットのビューインスタンシングとテクスチャ配列の使用をサポートする一式のシェーダーマクロを追加しました。例えば、以下のコードで、シェーダー内でテクスチャーを宣言できます。

TEXTURE2D_X(MyTexture);

テクスチャ配列に対応しているプラットフォームでは、このマクロが TEXTURE2D_ARRAY に展開します。プラットフォームがテクスチャ配列に対応していない場合、または ShaderConfig.cs 内の設定が無効になっている場合は、このマクロは通常の TEXTURE2D に展開します。テクスチャサンプリングには、これに類似した機能が使用可能となっています。

シェーダー側では、適切なビューの定数(ビュー行列、射影行列など)がこの配列内に格納され、プリミティブのインスタンス ID から派生する眼のインデックスに基づいてインデックス付けされます。コンピュートシェーダーの場合は、各眼の特定に z 方向のディスパッチが使用されます。マクロ UNITY_XR_ASSIGN_VIEW_INDEX は通常、適切な眼のインデックスのアサインに使用されます。

HDRP VR に関する今後の計画

HDRP VR の今後のバージョンは、以下に重点を置いて開発されます。

  • Variable Rate Shading などの新しいハードウェアオプションによる、パフォーマンスの改善
  • プラットフォーム対応の改善(Vulkan、DX12)
  • デバイス対応の改善
  • シングルパスの拡張(3 つ以上のビューへの対応)

ご意見をお聞かせください

HDRP VR の使用は、今すぐに開始していただけます。Unity では今後も引き続き、本機能の改良に取り組んでまいります。ぜひ HDRP フォーラムへフィードバックをご投稿ください。

2020年3月12日 カテゴリ: テクノロジー | 7 分 で読めます

Is this article helpful for you?

Thank you for your feedback!

取り上げているトピック