仮想現実 (VR) 向けのコンテンツ開発では、ユーザーに最高の VR 体験をさせるための手段がある程度必要になります。ベスト プラクティス ガイドでは、GoogleVR を使ってプロジェクトを見るユーザーがに対して、できる限り素晴らしい体験を提供するために必要なものを説明します。
GoogleVR のレンダリング オプション
Unreal Engine と GoogleVR を組み合わせると非常にイマーシブな VR 体験を生み出すことができますが、ハードウェアの制約により Gear VR Headset の使用中は Unreal Engine が実行できないレンダリング機能があります。これらの制約の多くは、モバイル デバイス での制約と似ています。 ただし、GoogleVR Headset には独自のレンダリング要件があるため、それらを配慮する必要があります。次のセクションでは、これらの要件、およびこれらの要件が GoogleVR プロジェクトに及ぼす影響について説明します。
Monoscopic Far Field
Monoscopic Far Field レンダリング (正確には Hybrid Monoscopic レンダリング) は、Unreal Engine 4 (UE4) にビルトインされている VR モバイル アプリケーション向けの高度なレンダリング機能です。通常、Monoscopic Far Field レンダリングは遠方のコンテンツを膨大に含むレベルのパフォーマンスを改善します。その理由は、遠方のオブジェクトは両目に対して 1 回ずつしかレンダリングされないためです。Epic Games は、この方法で遠方のオブジェクトをレンダリングすると、VR モバイル アプリケーションに対して著しいパフォーマンスの改善を生み出すことを発見しました。Monoscopic Far Field の有効化および使用方法については、こちらのドキュメントをご覧ください。
Mobile HDR
Google VR では Mobile HDR を使用することはできません。無効のままにしておいてください。
ポストプロセス
GoogleVR はレンダリング要件が厳しいため、残念ながら使用できないポストプロセス機能が多数あります。GoogelVR では、以下のポストプロセス機能を使用することができます。
ポストプロセス セクション | 機能名 | 説明 |
---|---|---|
Auto Exposure | Exposure Bias | シーン輝度を調節します。 |
マテリアル
GoogleVR 用のマテリアルの作成とインタラクションは、その他のプロジェクト用のマテリアルの作成およびインタラクションと非常によく似ています。マテリアル エディタでマテリアルを作成することもできますし、マテリアル エディタ内にあるマテリアル ノードをいろいろ使うこともできます。ただし、GoogleVR 用にマテリアルを作成する時には、作成しているものをハードウェアと正しく動作させるために順守すべき制約 / 留意事項がいくつかあります。
マテリアル入力名 | 説明 |
---|---|
Base Color | マテリアル全体の色を定義します。 |
Roughness | マテリアル全体の粗さまたはスムーズさを定義します。 |
Metallic | マテリアルをどの程度メタルらしく見せるかを定義します。 |
Specular | リフレクションの強度、またはマテリアルの輝き方を定義します。 |
Normal | 法線はモデルには負荷が高すぎるサーフェイスの詳細を追加します。完全に平坦あるいはスムーズなサーフェイスとは対照的に、法線マップを使ったサーフェイスには皺やくぼみができます。 |
Emissive | 光を放射しているようにマテリアルを部分的に発光させます。 |
Opacity | 任意のピクセルの透過度を 0.0 から 1.0 の範囲で定義します。 |
Opacity Mask | 個々のピクセルを完全に不透明または完全に目に見えないようにします。 |
Translucent マテリアルと Masked マテリアルは両方ともレンダリング負荷が非常に高いことを覚えておいてください。特にスマートフォンの場合はそうです。レンダリング負荷の低い 不透明なマテリアル を可能な限り使用してください。
マテリアルのシェーディング モデル
ハードウェアの制約により、GoogleVR を使用するプロジェクトでは、以下の マテリアルのシェーディング モデル のみ使用することができます。
シェーディング モデル明 | 説明 |
---|---|
Default Lit | その名の通り、デフォルト設定のシェーディング モデルです。おそらくユーザーが最も使用するモードです。このシェーディング モデルは直接または間接ライティングだけでなく、反射にスペキュラリティ (鏡面反射) を使用します。 |
Unlit | カラーのエミッシブ (発光色) のみを出力するため、火や照明オブジェクトなど特殊な効果に最適です。 |
GoogleVR プロジェクトには、負荷の低い Unlit シェーディング モデルをできるだけ使用してください。
マテリアルのブレンド モード
マテリアルのブレンド モードは、現在のマテリアルの出力と既に描画されている背景のブレンドを表現します。GoogleVR 用にコンテンツを作成する場合は、以下のマテリアルのブレンド モデルのみ使用することができます。
Blend モード | 説明 |
---|---|
Opaque (不透明) | ソリッド オブジェクトの場合、Opaque は最も負荷の低いマテリアルです。ただし、その名の通り、透過処理には対応していません。つまり、オーバードローは絶対に作成されません。マテリアルの各ピクセルのレンダリング時間は、ノードグラフ の複雑さに比例します。 |
Masked (マスク) | マテリアル上にピクセルを描画する必要がない場合に便利です。マテリアルは、マスクアウトされた領域に対してのみオーバードローを作成します。ただし、マテリアルによって描画された各ピクセルは 100 % 不透明、あるいは 100 % 透明のいずれかです。マスクアウトされた領域が広いほど、オーバードローの数が増えます。 |
Translucent (透過) | 最も負荷の高い ブレンド モード です。Masked や Opaque のようにも見えますが、実際に透明であってもなくても、パフォーマンスに影響します。 |
Additive (加算) | Translucent の負荷が低めのオプションです。ピクセルをソートする必要はなく、シーンにそのまま追加されます。このため、Additive マテリアルはカバーしているピクセルのみ明るくします。マテリアルの黒のピクセルは、シーンに何も影響を与えません。 |
Modulated | Additive に並んで、Modulated ブレンド処理も Translucent の中で負荷が低めのオプションですが、シーンに既に存在する色によって色の強度が増します。色は 0.0 から 1.0 の範囲にマップされるため、Modulated マテリアルはシーンを暗くします。これらのマテリアル上の白いピクセルはシーンに影響しません。 |
Modulate ブレンド モードを使用する際は必ず [Separate Translucency] を無効にしてください。マテリアルが正しくコンパイルされなくなくなります。

モバイル用マテリアル設定
Main Material ノード の [Details (詳細)] パネル に [Mobile] というセクションがあります。ここには、モバイル デバイス上でのマテリアル レンダリングの負荷を減らすオプションがあります。
プロパティ | 説明 |
---|---|
Fully Rough | 有効にすると、多数のシェーダー ALU インストラクションとサンプラが 1 つ保存します。反射エネルギー全体を維持しながら、スペキュラを効率よく無効化します。 |
Use Lightmap Directionality | 無効にすると、ライトマップからのライティングはフラットになりますが負荷が小さくなります。 |
カスタム仕様の UV
カスタム仕様の UV により、依存するテクスチャ フェッチを避けるために、ピクセル シェーダーではなく頂点シェーダーで操作を行うことが可能になります。これは、UV 操作など単純な操作の際、本当に必要とするパフォーマンスを取り戻すのに非常に便利です。特に GoogleVR 用コンテンツを作成する場合は、すべての UV 操作には可能な限りカスタム仕様の UV を使うようにしてください。
カスタム仕様の UV は現時点では、スタティックメッシュ、スケルタルメッシュ、BSP、ランドスケープ、メッシュ パーティクルなどの限られたコンポーネント タイプにしか実装されていません。
反射
GoogleVR は Screen Space Reflections(SSR) をサポートしていません。つまり、レベル内に配置された Reflection Capture アクタ から出される反射のみ生成することができます。 反射アクタから生成された反射は、ハードウェアの制約により忠実度があまり高くないことに留意してください。
GoogleVR とコンテンツの設定
GoogleVR プロジェクト用アート コンテンツを作成する場合、プロジェクトが可能な限りスムーズに動くようにするための留意点がいくつかあります。次のセクションでは、GoogleVR 用のアート コンテンツ作成時の注意事項を説明します。
コンテンツに対するハードウェアの制約
モバイル デバイスに対してハードウェアの制約があるので、コンテンツを作成する際には以下の制約を守る 必要があります。これらの制約に違反すると、稼働中のプロジェクトに影響します。
- 全てのメッシュ タイプは、モバイル ハードウェアでは 32 bit インデックスがサポートされないため、頂点は 65000 までとなります。
- スケルタル メッシュは 75 ボーンまで持つことができます。
メッシュに関する留意点
GoogleVR プロジェクトを使ってメッシュを作成する場合、作成しているものが必ず GoogleVR で使用できるように、以下の事に留意してください。
- 描画コールを減らすために、3D の マテリアル ID はできる限り少なくしてください。
- 可能な限り スタティックメッシュ LOD を使うようにしてください。
- 可能な限り ポリゴン数を低く するために、3D メッシュ ポリゴン数に常に注意してください。
- ライトマッピング が使用できるように、すべてのスタティックモデルには必ず 2 つ目の UV セットがあるようにしてください。
- インポスタ スプライト はレンダリング負荷が低いので、遠くのスタティックメッシュを置き換える場合にはできるだけ使用するようにしてください。
テクスチャに関する留意点
GoogleVR プロジェクトを使ってメッシュを作成する場合、作成するメッシュがプロジェクト全体の障害にならないように、以下の点に留意してください。
- テクスチャは X 軸または Y 軸のいずれかのディメンションが 2048 ピクセルを超えることはできません。
- 各軸のテクスチャのサイズは、二乗でなければなりません。例えば、画像の幅は 129 ではなく 128 または 256 ピクセルとなります。
- GoogleVR では最高 512 MB までテクスチャをメモリへロードすることができますが、どのような状態でもテクスチャ サイズが 128 MB 以上にならないようにすることを推奨します。
- メモリの使用効率のよい正方テクスチャ (1024x1024 のように幅と高さがおなじ) を可能な限り使用してください。
- メモリ内で必要なテクスチャ数を減らすために、できるだけ テクスチャのアトラス化 を使用してください。
- RBG テクスチャ マスキング / パッキング は、メモリ内のユニークなテクスチャを削減する非常に便利な方法です。
- TC_Default および TC_NormalMap 圧縮設定のみを使用してください。モバイル プラットフォームで使用できるのはこの 2 つのみとなります。
レベルに関する留意点
GoogleVR のレベルで最高のパフォーマンスを出すには、絶妙なバランスを取ることが必要で、慣れるまで時間を要します。以下の点に気を付けることで、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 で確認することができます。
- 透過マテリアルとオパシティ マスク付マテリアルはレンダリング負荷が非常に高いので、レベル内で使用する場合は細心の注意を払ってください。
- パフォーマンスおよびプロファイル を必ず一読して、自分のレベルのパフォーマンスに関わる問題を早めに探知できるようにしてください。