現在シングルパス ステレオレンダリングに対応しているデバイスは 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(v.vertex);__
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);__
// sample the texture
fixed4 col = tex2D(_MainTex, i.uv);
// apply 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 Page published with limited editorial review - Leave page feedback