Android 向けシングルパスステレオレンダリング
Explains how to use single-pass stereo rendering in your Android application.
読み終わるまでの所要時間 5 分最終更新 1ヶ月前
Unity はマルチビューをサポートする Android デバイスのシングルパスステレオレンダリングをサポートしています。マルチビューは、GL_OVR_multiview2 と GL_OVR_multiview_multisampled_render_to_texture OpenGL ES 拡張で構成されています。これらの拡張は、各目に 1 つずつ、2 つのスライスで構成される 2D テクスチャ配列を使用するシェーダーを必要とします。
シェーダーコードの必要条件
カスタムシェーダーでシングルパスステレオレンダリングを使用するには、追加のシェーダーコードを加える必要があるかもしれません。カスタムシェーダーが以下の場合は、追加のコードを加える必要はありません。
- カスタム頂点処理をしていないサーフェスシェーダー
- 固定機能パイプラインシェーダー
ノート: これらのシェーダーの変更はマルチパスステレオレンダリングに対応しています。
シェーダーの修正
unity_StereoEyeIndexUNITY_VERTEX_OUTPUT_STEREOstruct 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_StereoEyeIndexUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX()fixed4 frag (v2f i) : SV_Target{ UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); // sample the texture fixed4 col = tex2D(_MainTex, i.uv); // apply fog UNITY_APPLY_FOG(i.fogCoord, col); return col;}
シェーダーが他のシェーダーステージを使用する場合は、 マクロを使用して、アイインデックスを後続ステージに転送します。
UNITY_TRANSFER_VERTEX_OUTPUT_STEREO()ヒント: オブジェクトの最終的な位置を計算するには、 ではなく を使用するのが効率的です。
mul(UNITY_MATRIX_MVP, IN.vertex)UnityObjectToClipPos(IN.vertex)ポストプロセスシェーダー
目のテクスチャが 2D テクスチャ配列であることに対処するために、ポストプロセスシェーダーを更新する必要があります。これを支援するために、Unity には マクロが含まれています。マルチパスとシングルパスの両方のモードでテクスチャを動作させるには、各テクスチャをこのマクロでラップします。また、テクスチャをサンプリングする場合は、 マクロを使用します。
UNITY_DECLARE_SCREENSPACE_TEXTURE()UNITY_SAMPLE_SCREENSPACE_TEXTURE()このマクロでは、シングルパスモードで事前に を呼び出す必要があります。また、Unity には、深度テクスチャとスクリーンスペースのシャドウマップ用にこれに類似したマクロがあります。 の最後にすべての一覧が表示されています。
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX()HLSLSupport.cginc