本日はMRTK調査枠です。
現在ジオメトリシェーダーの勉強を兼ねMRTKで提供されているワイヤフレームシェーダーの中身を追っています。
〇頂点シェーダー
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ドローコールを下げる役割を持っています。
o.viewPos = UnityObjectToClipPos(v.vertex);
[UnityObjectToClipPos()]は[UnityCG.cginc]で提供されるビルドイン関数で、頂点をUnityの座標に変換しています。
ここではv2g構造体のデータとして3Dモデルの頂点データをUnity座標に変換し、オブジェクトとして空間に描画できるように処理を行っています。
つまりワイヤフレームシェーダーの頂点シェーダーではxRデバイス用にレンダリングを最適化するためのパスを通し、Unityでの座標に頂点を変換してv2g構造体に返しています。