Version: 2017.1
Android スプラッシュスクリーンのカスタマイズ
Android Player Settings

Android 向けシングルパスステレオレンダリング機能

現在シングルパス ステレオレンダリングに対応しているデバイスは Gear VR と Daydream です。この機能を有効にするために、 OpenGL|ES 拡張機能* である GL_OVR_multiview2GL_OVR_multiview_multisampled_render_to_texture を使用します。これらの拡張機能は、テクスチャ 2D 配列を 1 つとスライスを 2 つ (各眼 1 スライスずつ) を必要とします。 これは Unity の PC/PS4 の実装 (単純に 2 倍幅 の 2D テクスチャを 1 つ使用している) とは異なります。そのため、シェーダーへの変更も異なります。

シェーダースクリプトの必要条件

シングルパスステレオレンダリング機能をカスタムシェーダーと併用する場合は、下に掲載するコードの追加が必要な場合があります。これは、 Unity によって自動変換されるサーフェスシェーダーや機能が固定されたパイプラインシェーダーには当てはまりません。ただし、カスタム頂点処理が含まれるサーフェスシェーダーには当てはまります。

シェーダースクリプトへのこれらの変更は、マルチパス ステレオレンダリングと互換性がありますので、同モードでも大きな影響はありません。

まず、頂点シェーダーの後のシェーダーステージで unity_StereoEyeIndex を使用したい場合は、 UNITY_VERTEX_OUTPUT_STEREO を任意のシェーダーステージ出力構造体の中で宣言する必要があります。以下はその例です。

struct v2f {
    float2 uv : TEXCOOR0;
    float4 vertex : SV_POSITION;
    UNITY_VERTEX_OUTPUT_STEREO
};

次に、頂点シェーダー関数内で UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO() を使用して出力データを初期化する必要があります。

v2f vert (appdata v)
{
    v2f o;
    UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
    o.vertex = UnityObjectToClipPos(v.vertex);
    o.uv = TRANSFORM_TEX(v.uv, _MainTex);
    return o;
}

unity_StereoEyeIndex を後続のステージで初期化するために、以下のように冒頭に UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX() を追加します。

fixed4 frag (v2f i) : SV_Target
{
    UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
    // テクスチャをサンプリング
    fixed4 col = tex2D(_MainTex, i.uv);
    // fog を適用
    UNITY_APPLY_FOG(i.fogCoord, col);
    return col;
}

この他のシェーダーステージを使用している場合は、 UNITY_TRANSFER_VERTEX_OUTPUT_STEREO() マクロ も使用して眼のインデックスを後続のステージに移します。

最後に、オブジェクトの最終的な位置の計算には、 UnityObjectToClipPos(IN.vertex) ではなく mul(UNITY_MATRIX_MVP, IN.vertex) を使用することをお勧めします。

ポストプロセスシェーダー

眼のテクスチャがテクスチャ 2D 配列であるため、それに対応するためにポストプロセスシェーダーを更新する必要があります。そのためにマクロ UNITY_DECLARE_SCREENSPACE_TEXTURE() が作られました。このマクロを使って全てのテクスチャをラップします。すると、テクスチャはマルチパスモードとシングルパスモードの両方で機能するようになります。

テクスチャのサンプリングを行う場合は、以下のマクロを使用してください。

UNITY_SAMPLE_SCREENSPACE_TEXTURE()

このマクロを使用するには、シングルパスモード中に事前に UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX() が呼び出されている必要があります。また、これに類似したマクロは、深度テクスチャとスクリーンスペースのシャドウマップ用にも作成されました。 HLSLSupport.cginc の最後に全一覧が表示されています。

シェーダーコードに関する詳細は 頂点シェーダーとフラグメントシェーダーの例 のページを参照してください。

* これらの OpenGL|ES 拡張機能は比較的新しいものであるため、デバイスのドライバーに起因するグラフィックス関連の問題が発生する場合があります。


  • バージョン 5.5 の新機能

  • 2017–06–20 限られた 編集レビュー でパブリッシュされたページ

Android スプラッシュスクリーンのカスタマイズ
Android Player Settings