夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

MRTKワイヤフレームShaderを調査する。 その④ 頂点シェーダーの処理

本日はMRTK調査枠です。

現在ジオメトリシェーダーの勉強を兼ねMRTKで提供されているワイヤフレームシェーダーの中身を追っています。

redhologerbera.hatenablog.com

〇頂点シェーダー

   v2g vert(appdata_base v)
            {
                UNITY_SETUP_INSTANCE_ID(v);
                v2g o;
                o.viewPos = UnityObjectToClipPos(v.vertex);
                UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
                return o;
            }

appdata_base構造体に定義されているデータを使用しています。

 UNITY_SETUP_INSTANCE_ID(v);
...
    UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);

 こちらはレンダリング時の[シングルパスレンダリングインスタンス]の処理を行います。

 この[シングルパスレンダリングインスタンス]はゴーグル型XRデバイス特有の2つの画面(右目、左目)のレンダリングを行う際に共通化できる処理をレンダリングパイプライン内で共有し、GPUドローコールを下げる役割を持っています。

docs.unity3d.com

                o.viewPos = UnityObjectToClipPos(v.vertex);

[UnityObjectToClipPos()]は[UnityCG.cginc]で提供されるビルドイン関数で、頂点をUnityの座標に変換しています。

ここではv2g構造体のデータとして3Dモデルの頂点データをUnity座標に変換し、オブジェクトとして空間に描画できるように処理を行っています。

つまりワイヤフレームシェーダーの頂点シェーダーではxRデバイス用にレンダリングを最適化するためのパスを通し、Unityでの座標に頂点を変換してv2g構造体に返しています。