夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

ゼロから始めるUnityShader開発 第五章 頂点カラーを描画するシェーダーを書く

本日はシェーダー枠です。

先日MRGTのVertexColorsの機能についてみていきました。

今回はオリジナルのシェーダーで頂点カラーを描画するシェーダーを書いていきます。

〇頂点カラーを描画するシェーダー

頂点カラーを描画する最もシンプルなシェーダーは以下です。

Shader "Unlit/NewUnlitShader 2"
{
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float4 vcolor : COLOR0;
            };

            struct v2f
            {
                float4 vertex : SV_POSITION;
                float4 vcolor : COLOR0;
            };

            
            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.vcolor = v.vcolor;
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                fixed4 col = i.vcolor;
                return col;
            }
            ENDCG
        }
    }
}

appdata構造体は3Dデータから使用するデータを格納する構造体ですが、ここでCOLOR0セマンティクスを使用して肩を定義することで頂点カラーを使用できます。

頂点シェーダーではそれをそのままフラグメントシェーダーに渡し、フラグメントシェーダーで出力色としてそのまま使用しています。

これによって上記のように頂点カラーを使用してテクスチャや複数のマテリアルを使用することなくカラフルな色を描画できました。

本日は以上です。