XR ベスト プラクティス

XR プロジェクトのコンテンツを作成し、最適化するためのベスト プラクティス

VR (バーチャル リアリティ/仮想現実) は優れた没入感を実現する新しい媒体です。VR ユーザー向けにコンテンツを作成して提供する際は、VR 特有の検討事項を考慮する必要があります。検討すべき事項には、ユーザーの使い心地、コンテンツの最適化、各プラットフォームの制限事項などが含まれます。VR プロジェクトを進めていく上で、これらの検討事項に関する参考資料としてこのページを活用してください。

VR プロジェクト設定

VR プロジェクトはブループリントまたは C++ として作成することができます。

VR プラットフォームを対象とするプロジェクトを新しく作成する際は、[Games (ゲーム)] カテゴリの [VR Template (バーチャル リアリティ)] を選択します。VR テンプレートは、Unreal Engine 5 で VR プロジェクトの開発を始めるために必要なすべてを提供します。

使用するプロジェクトに VR テンプレートをベースとして使用しない場合、次の設定でブランクの C++ またはブループリント プロジェクトを作成することができます。

  • **Quality Preset (品質プリセット):Scalable (スケーラブル)

  • Raytracing (レイトレーシン):Disabled (無効)

  • Starter Content (スターター コンテンツ):Disabled (無効)

image alt text

これらの設定により、最小限のレンダリング機能が有効な Unreal プロジェクトが作成されます。これによってプロジェクトを適切なフレームレートで開始することができ、必要なレンダリング機能を追加できます。

プロジェクトを作成したら、アプリのパフォーマンス向上のために次のプロジェクト設定を行います。

  • [Edit (編集)] > [Project Settings (プロジェクト設定)] > [Description (説明)] に行き、[Start In VR (VR で開始)] をオンに設定します。

  • [Edit] > [Project Settings] > [Engine (エンジン)] > [Rendering (レンダリング)] > [Forward Renderer (フォワード レンダラ)] で、[フォワードシェーディング)(https://docs.unrealengine.com/5.0/en-US/forward-shading-renderer-in-unreal-engine) をオンに設定します。

  • [Edit] > [Project Settings] > [Engine] > [Rendering] > [Default Settings (デフォルト設定)] で、[Anti-Aliasing Method ]Multisample Anti-Aliasing (MSAA) に設定します。 [Edit] > [Project Settings] > [Rendering] > [VR]Instanced Stereo を有効にします。

  • モバイルでの VR の場合は、[Edit] > [Project Settings] > [Rendering] > [VR] にある Mobile Multi-View を有効にします。

    • また、Mobile HDR を False に設定します。

VR .ini 設定

パフォーマンスまたは品質向上のためにアプリのグラフィックをスケーリングする場合の説明と例については、「スケーラビリティ リファレンス」を参照してください。以下の表には、VR プロジェクト向けのコンソール変数の一部と、推奨される設定値が記載されています。

コンソール変数

推奨値

説明

vr.PixelDensity

1

現在使用されている HMD 向けの理想的な解像度は 1 です。これより小さい値に設定すると処理が高速になりますが、アンダーサンプリングが発生します (よりぼやけます)。1 より大きい値に設定すると、処理は遅くなりますがスーパーサンプリングとなります (よりシャープになります)。

r.SeparateTranslucency

0

フィル レートの制限のため、モバイルでの VR 体験向けにはコストが高くなる可能性があります。この機能は無効にすることを推奨します。

r.HZBOcclusion

0

詳細については、「可視性カリング」ページの階層 Z バッファ オクルージョンのセクションを参照してください。

以下の .ini 設定は、UE4 による VR 体験デモ「ショーダウン」で使用されているものです。これらの設定をプロジェクトの「Config/DefaultEngine.ini」ファイルの SystemSettings セクションにコピーして、起点として使用できます。

    [SystemSettings]

    vr.PixelDensity=1
    r.SeparateTranslucency=0
    r.HZBOcclusion=0
    r.MotionBlurQuality=0
    r.PostProcessAAQuality=3
    r.BloomQuality=1
    r.EyeAdaptationQuality=0
    r.AmbientOcclusionLevels=0
    r.SSR.Quality=1
    r.DepthOfFieldQuality=0
    r.SceneColorFormat=2
    r.TranslucencyVolumeBlur=0
    r.TranslucencyLightingVolumeDim=4
    r.MaxAnisotropy=8
    r.LensFlareQuality=0
    r.SceneColorFringeQuality=0
    r.FastBlurThreshold=0
    r.SSR.MaxRoughness=0.1
    r.rhicmdbypass=0
    sg.EffectsQuality=2
    sg.PostProcessQuality=0

VR フレームレートの最適化

ほとんどの VR アプリケーションは VR フレームレートを制御するために独自のプロシージャを実装しています。このため、VR アプリケーションを妨げる可能性のある一部の全般的な UE4 プロジェクト設定を無効にしておくことをお勧めします。

次の手順に従って、UE の全般的なフレーム レート設定を無効にしてください。

  1. エディタ のメインメニューから [Edit (編集)] > [Project Settings (プロジェクト設定)] を選択して [Project Settings (プロジェクト設定)] ウィンドウを開きます。

  2. [Project Settings] の [Engine (エンジン)] セクションにある [General Settings (基本設定)] を選択します。

  3. [Framerate (フレーム レート)] セクションで次のように設定します。

    • [Smooth Frame Rate (フレーム レートをスムージング)] をオフにします。

    • [Use Fixed Frame Rate (固定フレーム レートを使用)] をオフにします。

    • [Custom TimeStep (カスタム時間ステップ)] を [None (なし)] に設定します。

image alt text

VR ワールドのスケーリング

VR プラットフォームで最高のユーザー エクスペリエンスを実現する上で最も重要なことの 1 つに、ワールドを正確にスケーリングすることがあります。正確にスケーリングを行わないとユーザーに違和感を感じさせることになり、シミュレーション酔いを引き起こす原因ともなり得ます。オブジェクトが見やすい位置は、プレイヤーのカメラから 0.75 ~ 3.5 メートル (m) の範囲です。UE4 では、1 アンリアル単位 (UU) が 1 センチメートル (cm) に相当します。つまり、Unreal 内では、プレイヤーのカメラ (VR 使用時) から 75 UU ~ 350 UU が最もオブジェクトを見やすい距離ということになります。

距離

アンリアル単位 (UU) での距離

1 センチメートル (cm)

1 アンリアル単位

1 メートル (m)

100 アンリアル単位

1 キロメートル (km)

100,000 アンリアル単位

ワールドのスケールは、[World Settings (ワールド セッティング)][World to Meters (ワールドの単位をメートルに)] 変数を使って調整できます。この数値を増減させると、ユーザーは周辺のワールドに相対して自分が大きく、または小さくなったように感じます。コンテンツが「1 アンリアル単位 = 1 cm」でビルドされている場合、[World To Meters]10 に設定するとワールドが非常に大きくなり、1000 に設定するとワールドが非常に小さくなります。

image alt text

VR とシミュレーション酔い

シミュレーション酔いとは、没入型体験中に生じる乗り物酔いの一種です。以下は、ユーザーの VR 体験中に不快感を抑えるためのベスト プラクティスです。

  • フレーム レートを維持する: フレームレートが低いとシミュレーション酔いの原因となります。プロジェクトを可能な限り最適化することで、ユーザーの VR エクスペリエンスを高めることができます。以下の表は、各 XR プラットフォームで推奨されるターゲット フレーム レートです。

HMD デバイス

ターゲット フレーム レート

Oculus Rift S

90

Oculus Quest 1

72

Oculus Quest 2

Situational:72/80/90/120

HTC Vive

90

HTC Vive Pro

90

Valve Index

最小 90、最大 144

HP Reverb

90

Windows Mixed Reality VR

90

PSVR

Situational:60/120、90/90、120/120

  • ユーザーによるカメラの制御: シネマティック カメラや、プレイヤーがカメラ移動を制御できないカメラを使用すると、没入型体験中に不快感を生じさせる原因となり得ます。頭の振りやカメラの揺れなどのエフェクトは、ユーザーがこれらを制御できない場合に不快感を生じさせる原因となり得るため避けてください。

  • 視野角 (FOV) をデバイスに一致させる: FOV の値はデバイスの SDK と内部設定によって設定され、ヘッドセットとレンズの物理ジオメトリに一致します。このため、UE 内で FOV を変更しないでください。また、ユーザーによる変更も許可すべきではありません。FOV 値を変更すると、ユーザーが頭を動かした際にワープしたように見え、不快感を生じさせます。

  • ライトと色は薄暗いものを使用し、不鮮明になることを避ける: VR 向けに要素をデザインする際は、通常よりも薄暗いライトと色を使ってください。VR で強く鮮やかなライティングを使用すると、すぐにシミュレーション酔いを起こす可能性があります。通常よりも落ち着いた色のシェードと薄暗いライトを使うことで不快感を回避できます。また、こうすることで、画面上の明るい領域と暗い領域間の不鮮明さを回避するための一助ともなります。

  • 移動速度を変更しない: ユーザーは、徐々に加速して最高速度にするのではなく、始めから最高速度で開始すべきです。

  • ユーザーが見ているものに大きな影響を及ぼすポスト プロセス エフェクトは避ける: 不快感を回避するために、被写界深度 (DOF) やモーション ブラーなどのポスト プロセス エフェクトは避けます。

  • モーション ブラーと DOF のような視覚効果は避ける必要があります。

  • キャラクターの 高さ、幅、速度、カメラ位置 などは、VR キャラクターに合わせて多少修正する必要があります。

VR カメラの設定

UE4 での VR カメラの設定は、VR 体験を座って行うか、立って行うかによって大きく変わります。

  • 座って行う場合: プロジェクトに必要なプレイヤーの高さまで、カメラの基点を人為的に高くする必要があります。Set Tracking Origin ノードの [Origin] をデフォルトの [Eye Level} にしておく必要があります。

image alt text

  • 立って行う場合: カメラの基点が、ポーンのルートに相対して 0 に設定されていることを確認します。通常、これは地面になります。カメラ コンポーネントをシーン コンポーネント内のポーンのベース (地面) にアタッチします。そして、Origin パラメータを Floor Level に設定して Set Tracking Origin を呼び出します。

image alt text

image alt text

VR コンテンツに関する注意事項

VR コンテンツを制作する際は、ユーザーはそのコンテンツを複数の角度から見ることができることに注意してください。以下は、VR コンテンツの制作時に注意すべき事項です。

  • スケール: VR ワールド内のオブジェクトのスケールは、できるだけ実際のサイズと同じにしてください。オブジェクトのサイズが現実世界のものと異なると、混乱を招いて シミュレーション酔い の原因となることがあります。

  • ポリゴン面の欠落: 標準的なゲームでは、プレイヤーには見えないオブジェクトからポリゴン面を削除することが推奨されますが、VR ゲームではプレイヤーは周囲を自由に見渡すことができるため、この方法だと、プレイヤーには見えないはずのものが見えてしまう場合があります。

  • ライティングのタイプ: VR プロジェクトには常に 静的ライト とライトマップを使用します。これがレンダリングを行う上で最も負荷の低いオプションであるためです。動的ライティングを使う必要がある場合は、動的ライトの数をできるだけ少なくして、互いに触れ合うことのないようにしてください。

  • VR と VFX: SubUV テクスチャによる炎や煙のシミュレーションなど、一部の VFX テクニックは VR ではうまく反映されません。ほとんどの場合、爆発や煙の軌跡などのエフェクトのシミュレーションには、2D パーティクルではなくスタティック メッシュを使用する必要があります。近距離フィールド エフェクト、あるいはカメラ付近で発生するエフェクトは VR できれいに表現されますが、これはエフェクトがスタティック メッシュ パーティクルで作成されている場合に限ります。

  • VR と透過性: 全般的に、透過処理では何も変更がないことを確認するために各フレームを再評価する必要があるため、3D グラフィクスでのレンダリング透過処理は非常に負荷が高くなります。この再評価のために VR のレンダリング透過処理の負荷が大きくなり、これによって得られるメリット以上の負担となります。ただし、DitherTemporalAA マテリアル関数を使うことでこの問題を迂回することができます。このマテリアル関数を使用すると、マテリアルで透過処理が適用されているかのように見せることができ、セルフ ソートなどの発生しがちな透過処理の問題も回避できます。 image alt text クリックしてフルサイズで表示

    • できる限り模倣する: 動的シャドウやライティングなど、負荷の高いレンダリング オプションを再現する方法を知っておくと、VR で希望のパフォーマンスを得やすくなります。ショーダウン では、キャラクターに動的シャドウをキャストすると各フレームの負荷が大きすぎることが判明したので割愛しました。すると今度は、キャラクターが移動中に宙に浮いているように見えてしまいました。そこで、ワールド内のキャラクターとオブジェクト間の距離に基づいて位置と強度を動的に調整可能な偽の BLOB シャドウを導入して修正しました。これにより、キャラクターが地面や他のオブジェクトに近づくと、キャラクターがシャドウをキャストしているように見せかけることができるようになりました。

  • image alt text クリックしてフルサイズで表示

既知の制約事項

以下は、HMD の設計上の理由により、VR では期待どおりに動作しない可能性のある機能とその回避策です。

  • スクリーン スペース反射 (SSR): SSR は VR で機能しますが、生成される反射をワールド内の反射と一致させる上で問題が発生する場合があります。SSR ではなく反射プローブを使うことで、反射アライメントの問題を緩和すると同時に負荷を下げることができます。

  • スクリーン スペース グローバル イルミネーション: スクリーン スペース技術により、HMD でそれぞれの目のディスプレイの間に差異が生じることがあります。このような差異はユーザーに不快感を感じさせる原因となり得ます。VR で推奨されるライティングのタイプについて、「ライティング タイプ」を参照してください。

  • レイ トレーシング: 現在、レイ トレーシングを使用する VR アプリでは、快適な VR 体験を実現するために必要な解像度とフレーム レートを維持することができません。

  • ユーザーインターフェース (UI): 2D UI は、ステレオで表示するとうまく機能しないため、ステレオ レンダリングではサポートされていません。2D UI の代わりに、3D ワールド内に配置されたウィジェット コンポーネントを使用してください。これらのウィジェットの作成方法については、「3D ウィジェット インタラクションを作成する」を参照してください。

ノーマル マッピングに関する問題

VR でオブジェクトの法線マップを表示すると、以前には有効だった効果が反映されていないことがわかります。これは、法線マッピングでは両眼の視差または運動視差が考慮されないことが原因です。VR デバイスで法線マップを表示すると、結果として多くの場合は平坦に見えるようになります。ただし、法線マップを使用すべきでない、もしくは使用する必要がないわけではありません。より緊密に評価を行い、法線マップのデータが、ジオメトリを使ったほうがより良く伝わるかどうかを確認してください。次は、法線マップの代わりに使用可能な技法です。

  • 視差マッピング: 視差マッピングでは、法線マッピングでは考慮されない深度キューを組み合わせることで、法線マッピングよりも優れたテクスチャ マッピングが可能になります。視差マッピング シェーダでは深度情報をより良く表現でき、本来の詳細よりも細かくオブジェクトを描くことができます。視差マップでは、プレイヤーが見る角度にかかわらず、プレイヤーの視点で適切な深度情報が表示されるよう、常に補正が行われるためです。視差マップが最大の効果を発揮する例としては、きめ細やかな石畳の小道やサーフェスなどがあります。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル