Language:
Page Info
Engine Version:
The translation of this page is out of date. Please see the English version for the latest version of the page.

仮想現実 (VR) のベスト プラクティス

ユーザーが最高の VR 体験ができるように、仮想現実 (VR) 向けのコンテンツ開発では 一部のワークフローを調整する必要があります。このガイドでは、VR プロジェクトのコンテンツ開発で配慮すべき主要な点について 説明します。

VR プロジェクト設定

ベースがブループリントの場合でも C++ でも、VR 用プロジェクトを新規作成する際は、 VR プロジェクトが起動直後からフレームで実行していることを確実にするために Scalable 3D または 2D グラフィクスと No Starter Content を使って、 [Mobile / Tablet] オプションを使用したプロジェクトを作成するのがベストです。

VR_Project_Settings.png

VR .INI 設定

以下の .INI 設定は、UE4 が搭載された VR デモの Showdown のものです。 これらの .INI 設定を使用する場合は、プロジェクト 「Config\ DefaultEngine.INI」 ファイルの [SystemSettings] に追加しなければなりません。

[SystemSettings]
r.VolumeMultiplier=1.0
r.screenpercentage=130
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.SSSSS=0
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
r.TiledReflectionEnvironmentMinimumCount=10
sg.EffectsQuality=2
sg.PostProcessQuality=0

VR Instanced Stereo

UE 4.11 のリリースでは、VR のパフォーマンスに対する影響を緩和するために Instanced Stereo レンダリングが実装されました。 この機能は、[Edit (編集)] -> [Project Settings (プロジェクト設定)] -> [Rendering (レンダリング)] -> VR の [Instanced Stereo] オプションにチェックを入れて有効にします。

VR_ISR.png

Instanced Stereo レンダリングを有効にした後、エンジンを再起動し、シェーダーを再コンパイルする必要があります。 ベース パスと Early-Z パス (両方ともシリアルおよびパラレル レンダリング パス) は、機能が有効にされると、スタティック メッシュ、スケルタル メッシュ、スプライト パーティクル、メッシュ パーティクルで機能します。 現在、Instanced stereo は PC (DirectX) と PS4 で機能します。それ以外のプラットフォームのサポートは 4.11 初回リリースの後になります。 以下のビデオで、VR での Standard Stereo レンダリングと VR での Instanced Stereo レンダリングを紹介しています。

VR パフォーマンスのプロファイル

VR には負荷が大きすぎるアセットを追跡するには、プロジェクトのライフタイムを通じて可能な限り、CPU と GPU 上でプロジェクトが何をしているのかをプロファイルする必要があります。

  • GPU Profiling - プロジェクトの実行中に CTRL + SHIFT + ,(カンマ キー) を一緒に押すと、GPU プロファイラを有効にすることができます。キーを押すと、新規ウィンドウが開いて以下の画像のようになります。

    VR_GPU_Profiler.png

  • CPU Profiler - CPU 上のプロジェクトの動作分析は、GPU のプロファイルよりも若干複雑になります。この方法についての詳細については、パフォーマンス プロファイラ をご覧ください。

VR 前方レンダリング

ForwardRenderingBanner.png

アンリアル エンジン 4 はディファード レンダラを使用するデフォルト設定なので、多様性を高め、より多くのレンダラ機能へのアクセスが保証されます。 ただし、ディファード レンダラにはトレードオフもあります。すべての VR 体験に適しているというわけではありません。 フォワード レンダリング は、レンダリング パスが速くなることで基準値も上がるので、VR プラットフォーム上でのパフォーマンスが良くなる場合があります。 フォワード レンダライングは速さだけではなく、アンチ エイリアシング オプションも提供しています。

詳細は VR でフォワード レンダリング のドキュメントをご覧ください。

VR ポストプロセス設定

VR のレンダリング要件は厳しいので、デフォルトで有効設定にされているほとんどの高度なポスト プロセス機能は無効にしておかないと、 プロジェクトのパフォーマンスに問題が生じる可能性があります。プロジェクトで無効にするには、以下の手順に従います。

  1. Post Process(PP) ボリュームがレベルにない場合は、レベルに追加します。

  2. PP ボリュームを選択し、[Post Process Volume] セクションで [Unbound (境界なし)] オプションを有効にして、PP ボリュームの設定がレベル全体に適用されるようにします。

    VR_PP_Unbound.png

  3. [Post Process Volume][Settings (設定)] を展開して、各セクションをクリックしてプロパティを有効にして、デフォルト値に値を設定します。機能を無効にするためには、通常 1.0 に設定されているデフォルト値を 0 にします。

    VR_Disable_PP_Settings.png

    この操作をする場合、セクションすべてを開いてプロパティを 0 にする必要はありません。その変わりに、レンズフレア、スクリーン空間の反射、テンポラル アンチエイリアシング、SSAO、ブルームなどの非常に重たい機能や、パフォーマンスに影響を与える機能を最初に無効にします。

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

VR プラットフォームで可能な限り最高のユーザー体験を実現するためには、 ワールドを正しくスケーリングすることが非常に重要です。スケーリングが間違っていると、ユーザー側であらゆる感覚の問題が生じ、 シミュレーション酔いが生じることもあります。オブジェクトは、プレイヤーのカメラから 0.75 から 3.5 メートル (m) の範囲が一番見やすくなります。 UE4 内では、1 アンリアル ユニット (UU) は 1 センチ (cm) と等しくなっています。つまり、アンリアル エンジン内のオブジェクトは、以下の場合に最適な状態で見ることができます。 すなわち、VR を使用する場合にプレイヤーのカメラから 75 UU から 350 UU 離れている場合に最適になります。

距離 アンリアル ユニット(UU) での距離
1 センチ (cm) 1 アンリアル ユニット
1 m 100 アンリアル ユニット
1 キロ (km) 100,000 アンリアル ユニット

UE4 内の [World Settings (ワールド設定)] にある World to Meters 変数でワールドのスケールを調整することができます。 この数字を増減すると、周りのワールドとの関係でユーザーは自分が大きく、あるいは小さく感じます。 仮にコンテンツが 1 アンリアル ユニット = 1 CM でビルドされている場合、World To Meters10 に設定するとワールドが非常に大きくなります。 逆に World To Meters1000 に設定すると、ワールドは非常に小さくなります。

T_VR_World_To_Meters_00.png

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

シミュレーション酔いは、VR ワールドで HMD デバイスを使用する際に生じる乗り物酔いの一形態です。シミュレーション酔いがユーザーの VR 体験に与える打撃はかなり大きく、 せっかくの VR 体験を台無しにしてしまう事もあります。ユーザーに辛い VR 体験をさせないためにも、 以下のベストプラクティスを 遵守 してください。そうしなかった場合、 ユーザーは非常に不快な VR 体験をするかもしれません。

  • HMD のネイティブ フレームレートを常に上回るようにするために、フレームレート、理想的にはバッファを少し維持しなければなりません。 低いフレームレートはシミュレーション酔いの別の要因となるため、出来る限りゲームを最適化するようにしてください。 以下の表は、各種 HMD の UE4 のサポートとこれらのデバイス上での実行に VR プロジェクトが必要とするターゲット フレーム レートです。

    HMD デバイス ターゲット フレーム レート
    DK1 60 FPS
    DK2 75 FPS
    Rift Retail 90 FPS
    Vive 90 FPS
    Gear VR 60 FPS
    PSVR 最高 120 FPS まで変動
  • 開発者は VR デバイスの使用に慣れすぎているため、テスト対象者としては 最もふさわしくありません 。シミュレーション酔いの発生を防ぐためにも、可能な限り多様な人々を対象にしてチェックしてください。

  • 不快な VR 体験の最大の要因になりがちなため、シネマティックなカメラやプレイヤーからカメラの動きの制御を奪うようなカメラの 使用は避けてください

  • 視野角 (FOV) を手動でオーバーライト しないでください。また、エンド ユーザーが視野角を編集できるように しないでください。この値は、ヘッドセットとレンズの物理ジオメトリと一致させる必要があり、デバイスの SDK と内部コンフィギュレーションを通して自動的に設定されるようにします。不整合があれば、頭を回転させたときにワールドが歪んでいるように見えて、不快感や吐き気につながります。

  • ほとんどのファースト パーソン ゲームのようにカメラ エフェクトで歩いているときの上下運動 ("Walking Bob") を 使用しないようにしてください。人体の動きを模倣するためにカメラを上下に動かすと、プレイヤーはシミュレーション酔いを起こし、VR 体験を台無しにします。

  • イベントをプレイヤーに伝えようとするときにカメラを 揺らさないでください。プレイヤーの隣で手榴弾が爆発した場合に、VR ではないゲームでカメラが揺れるのは意味があります。しかし、VR ゲームでは非常に速くシミュレーション酔いを引き起こすことがあります。

  • VR ゲーム用にワールドとレベルを設計している場合、通常よりも暗いライトとカラーを使用するようにしてください。VR ゲームで強く鮮やかなライティングを使用すると、シミュレーション酔いがより速く起こることがあります。通常よりも落ち着いた描画や暗いライトを使用することで、こうした状況を回避します。

  • 階段は避けて代わりにリフトを使用します。プレイヤーが非常に速く移動する場合、特に階段などのように上下に移動する場合、方向感覚を失わせる可能性があります。

  • プレイヤーは、全て全速で開始するようにしてください。次第に全速へと加速するようにはしないでください。移動速度は常に一定速度になるようにします。

  • 被写界深度やモーションブラーのポストプロセスは 使用しないでください。これらはユーザーが何を見るかに大きな影響を及ぼし、さらに重要なこととしてシミュレーション酔いを非常に速く生じうるからです。

上記のリストは、シミュレーション酔いを引き起こす主要な問題ですが、これ以外にも数多くあります。

VR カメラの設定

UE4 での VR カメラの設定方法は、VR 体験を立って行うか、座って行うかによって全く異なります。 座って行う体験の場合、人為的にカメラの原点を持ち上げて、キャラクターを立たせる必要があります。 ただしこの場合、カメラの原点が 0、つまりグラウンド上になるようにしてください。 そのためには、キャラクターのベースでカメラ コンポーネントをシーン コンポーネントにアタッチするか、 Eye Height (目の位置) をキャラクター上のコリジョン カプセルの (マイナスの) Cylinder Height (シリンダーの高さ) の半分に設定します。

VR キャラクター設定

VR ヘッドセットを使用したキャラクターのセットアップは、標準のキャラクターのセットアップとは若干異なります。例えば、キャラクターの 高さ、幅、速度、およびカメラの位置はすべて VR キャラクターに対応するように少々修正する必要があります。

VR ワールドのオブジェクトを構築する場合、デジタル オブジェクトのスケールを 現実世界のオブジェクトと同じにすることが重要です。現実世界よりも大きくしたり、小さくしたりすると、 達成できる没入感を台無しにしてしまうことがあります。

キャラクターの高さと幅

キャラクターの高さと幅は、可能な限り現実世界の寸法と同じにします。大きすぎたり、小さすぎるサイズを使用すると、 達成しようとする没入感を損なうことがあります。

プロパティ UE4 デフォルト 推奨 VR
高さ: 192 CM 176 CM
幅: 84 CM 68 CM

移動速度

VR の移動速度は設定を推奨することが難しいプロパティです。移動速度の選択は、 達成しようとする体験のタイプによって決まるからです。例えば、Elemental VR デモでは、移動速度は 通常の約 1/4 の速度になっています。

プロパティ UE4 デフォルト 推奨 VR
移動速度: 60 M/S 24 M/S

カメラの位置

VR カメラは基本的な目の高さよりも若干低めに配置して、キャラクターの目の高さに補正する必要があります。

プロパティ UE4 デフォルト 推奨 VR
基本的な目の高さ: 180 CM 160 CM

VR コンテンツに対する配慮

VR コンテンツを制作する場合には、ユーザーが複数アングルからコンテンツを見ることができるという点を覚えておいてください。以下の、 これまでは問題なく行ったことであっても VR では回避すべきことです。

  • Scale - VR ワールドのオブジェクトのスケーリングで行うべき最適なことは、可能な限り現実を模倣することです。 現実世界よりもオブジェクトを大きくしたり、小さくしたりすると、混乱を招き、シミュレーション酔いにつながることがあります。

  • Missing Polygon Faces - 標準のゲームでは、プレイヤー側から見えないポリゴン面をオブジェクトから取り除くことは認められることであり、好ましいことです。 しかし、VR ゲームではプレイヤーは周囲を見渡す自由度が高くなっており、こうした古いやりかたでは、プレイヤーが見るはずではないものを見ることができることがあるため、行うべきではありません。

  • 使用するライティングのタイプ - VR プロジェクトを作成する際にはレンダリング負荷が最も低い 静的ライティングライトマップ を必ず使用してください。 動的ライティングを使う必要がある場合は、動的ライト数を可能な限り少なくして、お互いに触れ合うことのないようにしてください。 屋外のシーンがある場合は、指向性ライトを Stationary light (固定ライト) ではなく動的に設定して、Cascaded Shadow Maps(CSM ) を有効にしておくと、最もシンプルな設定でシャドウを付けることができます。

  • VR と VFX - SubUV テクスチャ による炎や煙のシミュレーションなどのトリックは、VR ではうまく反映されません。 ほとんどのケースでは、爆発や煙のトレイルなどの VFX のシミュレーションは 2D パーティクルではなくスタティック メッシュを使います。
    近距離フィールド エフェクトあるいはカメラに近いエフェクトは VR でよく暗影されますが、これはエフェクトがスタティック メッシュ パーティクルで作成されている場合に限ります。

  • VR と Transparency - 透過処理は一般的に、何も変更がないことを確認するために各フレームを再評価する必要があるため、3D グラフィクスでのレンダリング透過処理は非常に負荷が高くなります。 この再評価のために、VR のレンダリング透過処理は負荷があまりに大きすぎて、本来の長所を潰してしまいます。 ただし、DitherTemporalAA マテリアル関数を使えばこの問題を回避することができます。 このマテリアル関数は、マテリアルが透過処理を使っているかのように見せることができますし、セルフ ソートなど一般的な透過処理の回避も可能です。

    VR_Dither_Trans_AA.png

  • Fake everything you can (できる限り真似をする) - 動的シャドウ、ライティングなど、負荷の大きいレンダリング オプションを再生成する小技を頭に入れておくと、VR で望みのパフォーマンスを達成しやすくなります。 Showdown では、キャラクターに動的シャドウをキャストさせると各フレームの負荷が大きすぎることが判明したので割愛しました。 すると今度は、キャラクターが移動中に宙に浮いているように見えてしまいました。 そこで、偽の BLOB シャドウを導入して修正すると、位置と強度を大幅に調整することができました。 これにより、キャラクターがグラウンドや他のオブジェクトに近づくと、、シャドウをキャストしているように見せやすくなりました。

VR ブループリント関数

ブループリント エディタには、VR ヘッドセットとモーション コントローラとインタラクトするために使用できるブループリント ノードが豊富にあります。 以下は、各ノードの名前と機能の説明です。

ヘッドマウント ディスプレイのブループリント ノード

VR_HMD_BP_Nodes.png

ブループリント ノード名 機能
Enable HMD (HMD を有効にする) HMD ステレオ レンダリングの使用の切り替えをします。
Enable Low Persistence Mode (低パーシスタンス モードを有効にする) Low persistence モードと Full persistence モードを切り替えます。
Get Orientation And Position (方向と位置を取得) HMD の現在の方向と位置を取得します。
Get Positional Tracking Camera Parameters (位置をトラッキングするカメラ パラメータを取得) HMD にポジション トラッキング カメラがある場合、カメラのゲームワールドの位置とトラッキングの境界領域のパラメータも戻します。これは、正当なポジション トラッキング範囲を、ゲーム内で表現できるようにします。カメラが利用できない、または HMD がサポートしない場合は、すべての値はゼロになります。
Get Screen Percentage (画面比率を取得) VR モードで使用する画面比率を返します。
Get World to Meters Scale (ワールドをマスター スケールにする) ワールドをマスター スケールに戻すことで、プレイヤーが感じるワールドのスケールに一致させます。
Has Valid Tracking Position (有効なトラック位置を持つ) HMD がポジション トラッキングをサポートする場合、現在トラッキングされているかどうかを示します。
Is Head Mounted Display Enabled (ヘッドマウント ディスプレイの状況) ヘッドマウント ディスプレイを現在使用しているかどうかを返します。
Is In Low Persistence Mode (低パーシスタンス モードの状況) HMD が、Low persistence モードの場合、true を戻します。そうでない場合は、false を戻します。
Reset Orientation And Position (方向と位置をリセット) 現在のヨーは前方向であり、現在位置は「ゼロポイント」 (ポジション トラッキングにたいして) とみなし、ロールとピッチをゼロに設定して方向をリセットします。
Set Clipping Planes (クリッピング平面設定) 遠近のクリッピング平面 (NCP と FCP) のステレオ レンダリングを設定します。'stereo ncp = fcp' コンソール コマンドと似ていますが、このコマンドで設定した NCP and FCP は .INI ファイルには保存されません。
Set World to Meters Scale (ワールドをマスター スケールに設定) ワールドをマスター スケールに設定することで、ワールドのスケールをプレイヤーが感じるワールドのスケールに変更します。

Steam VR ブループリント ノード

VR_Steam_VR_BP.png

ブループリント ノード名 機能
Get Hand Position and Orientation (手の位置と方向を取得) コントローラ インデックスと手がある場合、コントローラの位置と方向を返します。
Get Tracked Device Position and Orientation (追跡デバイスの位置と方向を取得) HMD の現在の方向と位置を取得します。
Get Tracking Space (追跡中の空間を取得) 追跡中の空間 (座っている、または立っているなど) を取得することにより、基本の位置を決定します。
Get Valid Tracked Device Ids (有効な追跡デバイス ID を取得) 現在追跡されているデバイス ID の配列を返します。
Set Tracking Space (追跡空間の設定) 追跡空間 (座っている、または立っているなど) を設定することにより、変更します。追跡位置をどの空間に返すのかを変更します。

VR に関する既知の問題

HMD 機能が原因で、ビデオ ゲーム開発には必須だったアート技術にあった影響がなくなってしまいました。 以下は、VR で期待される動きをしない機能と考えられる回避策です。

既知の問題 回避策
Screen Space Reflections(SSR) (スクリーン空間の反射) SSR は VR で機能しますが、生成される反射をワールド内の反射と一致させる上で問題が発生する可能性があります。負荷がかなり小さく、反射アライメントの問題も減るため、SSR ではなく 反射プローブ を使います。

法線マッピングの問題

VR でオブジェクト上の法線マップを見ると、これまでのような効果がなくなっていることがわかります。 法線マップが両眼表示や運動視差を考慮していないためです。 このため、法線マップは VR デバイスを通してみるとフラットに見えます。 ただし、法線マップを使用しなければいけないわけではありません。 法線マップにしようとしているデータがジオメトリで作成されている方が良いかどうかをしっかり評価する必要があるという意味です。 以下は、法線マップの代わりに使用することができる技術です。

形状タイプ 説明
視差マッピング 視差マッピングは、法線マッピングでは考慮しないデプスキューを考慮することで法線マッピングを次のレベルに高めます。視差マッピング シェーダーは、オブジェクトが実際よりも詳細に表示されるようにすることで、深さ情報をよりよく表示できます。どのアングルで見ても視差マップ自体が補正し、その視点からの正確な深さ情報を表示するようにします。視差マップは、敷石道や表面の細部などの使用に最適です。