2020年12月23日水曜日

Unityのフラグメントシェーダ引数のi.vertexって何座標?

ややこしいUnityの座標系の確認方法」シリーズ. UnityのシェーダCgについて. フラグメントシェーダの受け取る引数i.vertexはスクリーン座標の画素の位置を表してるらしい. といってもどこに原点があってスケールはどうなってるのか? 水平がx軸なのかy軸なのか? 正負の向きはどうなってるのか? ここでも実験で確認(というより実感)してみる.

void Update()
{
    var material = this.GetComponent().material;
    material.SetFloat("_width",   (float)Screen.width);
    material.SetFloat("_height", (float)Screen.height);
}
float _width;
float _height;

fixed4 frag (v2f i) : SV_Target
{
    float x = i.vertex.x;
    float y = i.vertex.y;
    float z = i.vertex.z;

    return float4(x/_width, y/_height, 1, 1);
}

つまり,i.vertexはスクリーン座標そのもので,左下が原点,水平右方向がx座標,垂直上方向がy座標ということが確認できました.