VertexShader入門 - saitocastel1900/UnityShader GitHub Wiki
- Vert(頂点情報を処理)=>Surf(オブジェクトの色を変える)=>Lighting(ライティング)
- v2fという構造体を定義。vertex to fragment の略
- vertexで処理したものをfragmentに渡す
- SV_POSITIONはセマンティックと呼ばれ、その変数が何に使われるかを示す。ここでは、Screen空間に変換されたオブジェクトの頂点座標
struct v2f
{
float4 pos : SV_POSITION;
};
struct appdata_base {
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
- 「o.pos = UnityObjectToClipPos(v.vertex);」で、3Dの座標を2Dのスクリーン座標に直している。
- あとは、定義v2f(スクリーン座標)として返す。
v2f vert(appdata_base v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
return o;
}
- COLORは出力する画面の色。明示的に色を返すことを示している。最近SV_Targetになった。
- CGPROGRAMはここから書きますよみたいな宣言。
Shader "Custom/Chapter01"
{
//shaderを書くところ(複数行かける)
SubShader
{
//shaderの中身
Pass
{
Tags
{
"RenderType"="Opaque"
}
LOD 100
CGPROGRAM
//vertxt と fragmentの関数。勝手に呼び出される。
#pragma vertex vert;
#pragma fragment frag;
//便利な関数詰め合わせ
#include "UnityCG.cginc"
struct v2f
{
float4 pos : SV_POSITION;
};
v2f vert(appdata_base v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
return o;
}
half4 frag(v2f i) : COLOR
{
return half4(1, 0, 0, 1);
}
ENDCG
}
}
}