Unity はマルチビューをサポートする Android デバイスの シングルパスステレオレンダリング をサポートします。マルチビューは GL_OVR_multiview2 と GL_OVR_multiview_multisampled_render_to_texture OpenGL ES 拡張で構成されます。これらの拡張は、各目に 1つずつ、2 つのスライスで構成される 2D テクスチャ配列を使用するシェーダーを必要とします。
カスタムシェーダーでシングルパスステレオレンダリングを使用するには、追加のシェーダーコードを加える必要があるかもしれません。カスタムシェーダーが以下の場合は、追加のコードを加える必要はありません。
ノート: これらのシェーダーの変更はマルチパスステレオレンダリングに対応し ています。
unity_StereoEyeIndex
ビルトインシェーダー変数を使用して、GPU がどの眼に描画しているかを知りたい場合は、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()
マクロを使用して、アイインデックスを後続ステージに転送します。
ヒント: オブジェクトの最終位置を計算するには、mul(UNITY_MATRIX_MVP, IN.vertex)
の代わりに UnityObjectToClipPos(IN.vertex)
を使用するのが最も効率的です。
目のテクスチャが 2D テクスチャ配列であることに対処するために、ポストプロセスシェーダーを更新する必要があります。これを支援するために、Unity には UNITY_DECLARE_SCREENSPACE_TEXTURE()
マクロが含まれています。マルチパスとシングルパスの両方のモードでテクスチャを動作させるには、各テクスチャをこのマクロでラップします。また、テクスチャをサンプリングするときは、 UNITY_SAMPLE_SCREENSPACE_TEXTURE()
マクロを使用します。
このマクロを使用するには、シングルパスモード中に事前に UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX()
が呼び出す必要があります。また、Unity には、深度テクスチャとスクリーンスペースのシャドウマップ用にこれに類似したマクロがあります。HLSLSupport.cginc
の最後に全一覧が表示されています。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.