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

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

Single-pass stereo rendering is currently supported on Gear VR and Daydream devices. To enable this feature we use the GL_OVR_multiview2 and GL_OVR_multiview_multisampled_render_to_texture OpenGL|ES extensions*. These extensions require the use of a texture 2D array with 2 slices (one slice per eye). This differs from our PC/PS4 implementation where we just use a double wide 2D texture. Therefore different shader changes are required.

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

シングルパス ステレオレンダリング機能をカスタム シェーダーと併用する場合は、以下に掲載する追加コードを含める必要があるかもしれません。(これには、 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 の最後で全一覧をご確認いただけます。

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

* These OpenGL|ES extensions are relatively new, so unfortunately there may be graphics related issues due to the drivers on these phones.


  • バージョン 5.5 の新機能

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

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