うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】vert_img を使った 頂点処理の記述を省略したシェーダー

UnityCG.cginc 内に vert_img という頂点処理用のメソッドが用意されているので
頂点とuvしか利用しない場合こちらを利用したほうが手軽で行数も少なくなる

struct appdata_img
{
    float4 vertex : POSITION;
    half2 texcoord : TEXCOORD0;
};

struct v2f_img
{
    float4 pos : SV_POSITION;
    half2 uv : TEXCOORD0;
};

v2f_img vert_img( appdata_img v )
{
    v2f_img o;

    o.pos = UnityObjectToClipPos (v.vertex);
    o.uv = v.texcoord;
    return o;
}


#pragma vertex vert_img これを利用するときは 頂点処理のメソッドに vert_img を指定して
frag の引数の型を v2f_img に変更する

Shader "Unlit/Shader"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        
        Pass
        {
            CGPROGRAM
            #pragma vertex vert_img
            #pragma fragment frag

            #include "UnityCG.cginc"

            sampler2D _MainTex;

            fixed4 frag (v2f_img i) : SV_Target
            {
                fixed4 col = tex2D(_MainTex, i.uv);
                return col;
            }
            ENDCG
        }
    }
}