現象
エディターでは動いていたのですが、いざビルドしようとすると以下のエラーが出力される
invalid input semantic 'POSITION'
エラーが出たコードは以下。
_CameraDepthTextureを使用せずに深度画像をレンダリングするシンプルなコードです。
Pass {
cull off
CGPROGRAM
#pragma target 3.0
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f {
float4 pos : SV_POSITION;
};
v2f vert(appdata_base v)
{
v2f o = (v2f)0;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
return o;
}
float4 frag( v2f i ) : SV_Target
{
float depth = i.pos.z;
return depth.xxxx;
}
ENDCG
}
原因と対策
以下のサイトに情報が乗ってました。
http://www.boutin.de/hlsl-error-x4502-invalid-input-semantic-position/
POSITIONセマンティクスは頂点シェーダーでは使用できるが、フラグメントシェーダーでは使用できないとのことです。
考えてみれば、頂点を扱う変数をピクセルシェーダーで使用するのも変な話ですね。
頂点シェーダー内で、pos.zを別の変数に入れることで使用できました。