UnityShaderがピットノートを踏む-1無効な出力セマンティクス「SV_POSITION」



Unity Shader Stepping Pit Notes 1 Invalid Output Semanticsv_position



Unityを一定期間(2018.1)学習した後、自分でいくつかの小さなデモを行った後、シェーダーを学習することを考えました。 CG / HLSLの根拠がないため、UnityShaderはエントリからあきらめるまで学習していると言えます。 。 。 。

それで、ピットを踏んでピットを記録するという原則に従って、私は物事を整理する準備ができていました。



シェーダーを学習する最初のいくつかのポイントでは、単純な頂点フラグメントシェーダーを確実に学習します。

Shader 'Custom/1' { SubShader { pass{ CGPROGRAM #pragma vertex vert #pragma fragment frag struct a2v{ float4 vertex:POSITION float3 normal:NORMAL } struct v2f{ float4 pos:SV_POSITION fixed3 color:COLOR0 } v2f vert(a2v v):SV_POSITION{ v2f o o.pos=UnityObjectToClipPos(v.vertex) o.color=v.normal*0.5+fixed3(0.5,0.5,0.5) return o } fixed4 frag(v2f i):SV_Target{ return fixed4(i.color,1.0) } ENDCG } } } void vert(in a2v v,out v2f o){ o.pos=UnityObjectToClipPos(v.vertex) o.color=v.normal*0.5+fixed3(0.5,0.5,0.5) }

保存して1に戻った後、残念ながらエラーが表示されます



'Custom / 1'のシェーダーエラー:無効な出力セマンティクス 'SV_POSITION':リーガルインデックスは23行目(d3d11)の[0,0]にあります


SV_POSITIONを調べたところ、このことを推測していることがわかりました頂点シェーダーの出力セマンティクスとして使用されると、最終的な頂点位置が固定され(テンセル化できず、後で空間位置を変更できませんか?)、ラスタライズプロセスに直接入ります。上記の出力構造v2fの頂点出力として、このセマンティクスを使用したようです。このセマンティクスへの全体的な出力に問題はありますか?そこで、CG入力および出力キーワードを使用してこの頂点シェーダーとフラグメントシェーダーの通信の問題に対処しようとしましたが、コードは次のように変更されました。



それで、問題は解決されました。もちろん、これが理由かどうかはわかりません~~

具体的な理由を知っているお兄ちゃんがいらっしゃいましたら、訂正のメッセージも残したいと思いますので、よろしくお願いします。