現在シングルパス ステレオレンダリングに対応しているデバイスは Gear VR と Daydream です。この機能を有効にするために、 OpenGL|ES 拡張機能* である GL_OVR_multiview2 と GL_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 限られた 編集レビュー でパブリッシュされたページ