仮想現実 (VR) 向けのコンテンツ開発では、ユーザーに最高の VR 体験をさせるステップがある程度含まれるようにしなければなりません。ベスト プラクティス ガイドでは、Samsung Gear Virtual Reality(VR) ヘッドセットおよび Samsung Galaxy スマートフォンを使ってプロジェクトを見た時に、ユーザーにできる限り良い体験を提供するために必要な内容を説明します。
Gear VR のレンダリング オプション
Gear VR Headset を Samsung Galaxy スマートフォンと組み合わて使うとイマーシブ感のある VR 体験をすることができますが、 その一方で、ハードウェア上の制約があるため、 Gear VR Headset の使用中は UE4 が実行できないレンダリング機能があります。 目にする制約の多くは、モバイル デバイス と似ています。 次のセクションでは、これらの要件およびそれらが Gear VR プロジェクトに及ぼす影響について説明します。
モバイル マルチビュー / マルチビュー ディレクト レンダリング
UE4 GearVR プロジェクトが CPU に結合されている場合、[Mobile Multi-View] または [Mobile Multi-View Direct] を有効にするとパフォーマンスが向上します。有効にするには、[ProjectSettings] > [Rendering] > [VR] を選択し、[Mobile Multi-View] をクリックします。

-
Mobile Multi-View:[Mobile Multi-View] を有効にすると、オブジェクトは左目バッファに一度レンダリングされてから、頂点の位置と反射などビューに依存する変数を適切に修正して、自動的に右目バッファに複製されます。
-
Mobile Multi-View Direct :Mobile Multi-View の拡張版です。レンダリングしなければならない全画面コピー数が減ります。多くの場合、GPU オーバーヘッドを大幅に削減することができます。
[Mobile Multi-View Direct] を使用するには [Mobile Multi-View] を有効にする必要があります。ご注意ください。Mobile Multi-View の詳細は、Oculus Developer site をご覧ください。
Monoscopic Far Field
Monoscopic Far Field レンダリング (正確には Hybrid Monoscopic レンダリング) は、Unreal Engine 4 (UE4) にビルトインされている VR モバイル アプリケーション向けの高度なレンダリング機能です。通常、Monoscopic Far Field レンダリングは遠方のコンテンツを膨大に含むレベルのパフォーマンスを改善します。その理由は、遠方のオブジェクトは両目に対して 1 回ずつしかレンダリングされないためです。Epic は、この方法で遠方のオブジェクトをレンダリングすると、VR モバイル アプリケーションに対して著しいパフォーマンスの改善を生み出すことを発見しました。Monoscopic Far Field の有効化および使用方法については、こちらのドキュメントをご覧ください。
Mobile HDR
Gear VR プロジェクトは Mobile HDR に対応していませんので、有効にはしないでください。
ポストプロセス
Gear VR はレンダリング要件が厳しいため、多くのポストプロセス機能とは使用することができません。以下のポストプロセスは、Gear VR Headset 向けに開発されたプロジェクトで使用することができます。
ポストプロセス セクション | 機能名 | 説明 |
---|---|---|
Auto Exposure | Exposure Bias | シーンの輝度を増減します。 |
マテリアル
Gear VR 用のマテリアルの作成とインタラクションは、その他のプロジェクト用のマテリアルの作成およびインタラクションと非常によく似ています。 マテリアル エディタでマテリアルを作成することもできますし、マテリアル エディタ内にあるマテリアル ノードをいろいろ使うこともできます。 ただし、Gear VR 用にマテリアルを作成する時に守らなければならない制約 / 留意すべき事項がいくつかあります。 例えば、Gear VR Headset では以下のマテリアル入力しか使用できません。
マテリアル入力名 | 説明 |
---|---|
Base Color | マテリアル全体の色を定義します。 |
Roughness | マテリアルの粗さ、またはスムーズさを定義します。 |
Metallic | マテリアルをどの程度メタルらしく見せるかを定義します。 |
Specular | リフレクションの強度を定義します。 |
Normal | 重すぎて作成できない詳細の追加を支援します。 |
Emissive | 光を放射しているようにマテリアルを部分的に発光させます。 |
Opacity | 透過の度合いを定義します。 |
Opacity Mask | ピクセルを透過状態にするかどうかを定義しやすくします。 |
Translucent マテリアルと Masked マテリアルは両方ともレンダリング負荷が非常に高いことを覚えておいてください。スマートフォンでは特にそうです。レンダリング負荷の低い 不透明なマテリアル を可能な限り使用してください。
マテリアルのシェーディング モデル
ハードウェアの制約により、Gear VR Headset を使用するプロジェクトでは、以下の マテリアルのシェーディング モデル のみ使用することができます。
シェーディング モデル明 | 説明 |
---|---|
Default Lit | 名前が示唆する通りデフォルト設定のシェーディング モデルで、おそらくユーザーが最も使用するモードです。このシェーディング モデルは直接または間接のライティングの使用のみならず、反射にスペキュラリティ (鏡面反射) を利用します。 |
Unlit | カラーのエミッシブ (発光色) のみを出力します。火や照明オブジェクトなどの特別効果に最適です。 |
Gear VR プロジェクトには、負荷の低い Unlit シェーディング モデルをできるだけ使用してください。
マテリアルのブレンド モード
マテリアルのブレンド モードは、現在のマテリアルの出力と既に描画されている背景のブレンドを表現します。 Gear VR Headset 用にコンテンツを作成する場合は、以下のマテリアルのブレンド モデルのみ使用することができます。
Blend モード | 説明 |
---|---|
Opaque (不透明) | ソリッド オブジェクトでは Opaque は最も負荷の低いマテリアルです。ただし、名前から推測できるように、透過処理には対応していません。つまり、オーバードローが作成されることはなく、マテリアルの各ピクセルを レンダリングする場合は、ノードグラフ の複雑さに応じて同じ時間がかかります。 |
Masked (マスク) | マテリアル上に一部のピクセルを描画する必要のない場合に使います。マテリアルは、マスクアウトされた領域に対してのみオーバードローを作成します。ただし、マテリアルは 100 % 不透明または 100 % 透過です。マスクアウトされた領域が広いほど、オーバードローの数が増えます。その分、負荷もかかります。 |
Translucent (透過) | 最も負荷の高い ブレンド モード です。Masked や Opaque のようにも見えますが、実際に透明かどうかに関係なくパフォーマンスに影響を与えます。 |
Additive (加算) | Translucent で負荷の低いオプションです。ピクセルをソートする必要なく、単にシーンに追加されます。つまり、明るくすることしかできません。マテリアルの黒のピクセルは、シーンに何も影響を与えません。 |
Modulated (調整) | Translucent で 2 番めに負荷が低いオプションですが、シーンのピクセルが増えます。つまり、シーンを暗くすることしかできません。 |
Modulate ブレンド モードを使用する際は必ず [Separate Translucency] を無効にしてください。マテリアルが正しくコンパイルされなくなくなります。

モバイル用マテリアル設定
Main Material ノード の [Details (詳細)] パネル に [Mobile] というセクションがあります。 ここには、モバイル デバイス上でのマテリアル レンダリングの負荷を減らすオプションがあります。
プロパティ | 説明 |
---|---|
Fully Rough | 有効にすると、多数のシェーダー ALU インストラクションとサンプラが 1 つ保存します。反射エネルギー全体を維持しながら、効率よくスペキュラを無効化します。 |
Use Lightmap Directionality | 無効にすると、ライトマップからのライティングはフラットになりますが負荷が小さくなります。 |
カスタム仕様の UV
カスタム仕様の UV により、依存するテクスチャ フェッチを避けるために、ピクセル シェーダーではなく頂点シェーダーでシェーダー操作を行うことが可能になります。 これは、UV 操作など単純な操作の際、本当に必要とするパフォーマンスを取り戻すのに非常に便利です。特に Gear VR Headset 用コンテンツを作成する場合はそうですが、すべての UV 操作には可能な限りカスタム仕様の UV を使うようにしてください。
カスタム仕様の UV は現時点では、スタティックメッシュ、スケルタルメッシュ、BSP、ランドスケープ、メッシュ パーティクルなどの限られたコンポーネント タイプにしか実装されていません。
反射
Gear VR は Screen Space Reflections(SSR) をサポートしていません。つまり、レベル内に配置された Reflection Capture アクタ から出される反射のみ生成することができます。 反射アクタから生成された反射は、ハードウェアの制約により忠実度があまり高くないことに留意してください。
Gear VR とコンテンツの設定
Gear VR プロジェクト用アート コンテンツを作成する場合、プロジェクトが Gear VR Headset で可能な限りスムーズに動くようにするための留意点がいくつかあります。 次のセクションでそれを説明します。
コンテンツに対するハードウェアの制約
モバイル デバイスにはハードウェア制約が課せられているので、コンテンツ作成の際には以下の制約への順守が必要です。 これらの制約に違反すると、Gear VR プロジェクトが動作しなくなります。
- 全てのメッシュ タイプは、モバイル ハードウェアでは 32 bit インデックスがサポートされないため、頂点は 65000 までとなります。
- スケルタル メッシュは 75 ボーンまで持つことができます。
メッシュに関する留意点
Gear VR プロジェクトを使ってメッシュを作成する場合、メッシュが必ず Gear VR Headset で動くようにするために以下の事に留意してください。
- 描画コールを減らすために、3D の マテリアル ID はできる限り少なくしてください。
- 可能な限り スタティックメッシュ LOD を使うようにしてください。
- 3D メッシュ ポリゴン数に常に注意して、可能な限り ポリゴン数を低く してください。
- ライトマッピング が使用できるように、すべてのスタティックモデルには必ず 2 つ目の UV セットがあるようにしてください。
- インポスタ スプライト はレンダリング負荷が低いので、遠くのスタティックメッシュを置き換える場合にはできるだけ使用するようにしてください。
テクスチャに関する留意点
Gear VR プロジェクトを使ってメッシュを作成する場合、作成しているものがプロジェクト全体に対して有害になることがないように、以下の点に留意してください。
- テクスチャは X または Y のいずれかのディメンションが 2048 ピクセル以上にはなりません。
- テクスチャ サイズは 2 のべき乗 (2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048) でなければなりません。
- Gear VR では最高 512 MB までテクスチャをメモリへロードすることができますが、128 MB 以上はお勧めしません。
- メモリを効率よく使用する正方テクスチャを可能な限り使用してください。
- メモリ内で必要なテクスチャ数を減らすために、できるだけ テクスチャ アトラス化 を使用してください。
- RBG テクスチャ マスキング / パッキング は、メモリ内のユニークなテクスチャを削減する非常に便利な方法です。
- TC_Default および TC_NormalMap 圧縮設定のみを使用してください。モバイル プラットフォームで使用できるのはこの 2 つのみとなります。
レベルに関する留意点
Gear VR のレベルで最高のパフォーマンスを出すには、絶妙なバランスを取ることが必要で、慣れるまで時間を要します。 以下の点に気を付けると、Gear VR Headset 上で見た時にパフォーマンス関連の問題を発生させる可能性のレベル領域を早く特定できるようになります。
- パフォーマンスが最高になるように、レベル ライティングが ビルド されていることを常に確認してください。赤字の [Lighting needs to be rebuilt (ライティングのリビルドが必要です)] エラーメッセージが画面に表示された場合は、ライトを再ビルドしなければなりません。
- レベル内のすべてのライトは必ず Static (静的) に設定してください。他のライト オプションだとレンダリング負荷が非常に高くなってしまいます。
- レベルに 事前計算されたビジビリティ が使われているか確認してください。使われていない場合はレベルに 1 つ追加し、レベルのワールド設定で有効にするためにライティングをリビルドするようにしてください。
- シーン全体の描画コールは、すべてのビューに対して 100 以下でなければなりません。描画コールは PC の ES2 プレビュア stat d3d11rhi のデバイス stat openglrhi で確認することができます。
- レベルのトライアングル総数は、どのビューでも 100,000 を超えてはいけません。描画コールは PC の ES2 プレビュア stat d3d11rhi のデバイス stat openglrhi で確認することができます。
- 透過マテリアルとオパシティ マスク付マテリアルはレンダリング負荷が非常に高いので、レベル内での使い方にはくれぐれも注意してください。
- パフォーマンスおよびプロファイル を必ず一読して、自分のレベルのパフォーマンスに関わる問題を早めに探知できるようにしてください。