Unity Shader 勉強
Shaderで取り扱われる流れはこの通りである.
最初の入力データ
struct appdata{ // インスペクター上で指定した値を中心とした拡張点の相対座標 float4 vertex : POSITION; float2 uv : TEXCOORD0; }
次の頂点シェーダー関数
v2f vert(appdata v) { // モデル空間の座標(インスペクタで表示している座標 // v.vertex v2f o; // MVP変換を行なった後の座標.wで割る前の視錯体の座標 o.vertex = UnityObjectToClipPos(v.vertex); // wで割った後の投影する画面の座標.左下(0,0)右上(1920,1080) // o.vertex /= o.vertex.w; // tillingやoffsetを提要した後のuv座標 o.uv = TRANSFORM_TEX(v.uv, _MainTex); return o; }
画面上の座標で扱うには o.vertex.w
で割る必要がある.
https://light11.hatenadiary.com/entry/2018/06/10/233954
UnityObjectToClipPos
でMVP変換が行われている.
出力がv2g構造体
struct v2f { // 対象のTextureの左下を(0,0)右上を(1,1)とする座標系 float2 uv : TEXCOORD0; // 左下を(0,0)右上が(1920,1080)とする座標系 float4 vertex : SV_POSITION; };
ここでは画面サイズに対して左下を原点としてどのピクセルに描画するのかの vertex
と描画対象のオブジェクト内の uv空間
での座標を扱うことができる.
fixed4 frag (v2f i) : SV_Target { float4 col =float4(0,0,0,1); if(i.vertex.x>1900) { col.x=1; } if(i.vertex.y>1070) { col.y=1; } return col; }
入力としてuv座標
と 画面上の座標
が得られる.これらの座標を使って 色
を出力する.