Version: Unity 6.0 (6000.0)
言語 : 日本語
ビルトインレンダーパイプラインの単色シェーダーの例
ビルトインレンダーパイプラインの単純な Unlit シェーダーの例

ビルトインレンダーパイプラインのチェッカーボードパターンシェーダーの例

これは、メッシュのテクスチャ座標を基準にしてチェッカーボードの模様を出力するシェーダーです。

Shader "Unlit/Checkerboard"
{
    Properties
    {
        _Density ("Density", Range(2,50)) = 30
    }
    SubShader
    {
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            float _Density;

            v2f vert (float4 pos : POSITION, float2 uv : TEXCOORD0)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(pos);
                o.uv = uv * _Density;
                return o;
            }
            
            fixed4 frag (v2f i) : SV_Target
            {
                float2 c = i.uv;
                c = floor(c) / 2;
                float checker = frac(c.x + c.y) * 2;
                return checker;
            }
            ENDCG
        }
    }
}

Properties ブロックの密度スライダーは、チェッカーボードの密度を制御します。頂点シェーダーでは、メッシュ UV に密度値を乗算して、0 - 1 の範囲から 0 - 密度の範囲にします。密度が 30 に設定されているとします。これにより、フラグメントシェーダーへの i.uv 入力に、レンダリングされるメッシュのさまざまな場所の 0 から 30 までの浮動小数点値が含まれるようになります。

フラグメントシェーダーコードは、HLSL のビルトインの floor 関数を使用して入力座標の整数部分のみを取得し、それを 2 で除算します。入力座標は 0 から 30 までの数値であったことを思い出してください。これにより、すべて 0、0.5、1、1.5、2、2.5 などの値に「量子化」されます。これは、入力座標の x および y コンポーネントの両方で行われました。

次に、これらの x 座標と y 座標を加算し (それぞれ使用できるのは 0、0.5、1、1.5、… の値のみです)、別のビルトイン HLSL 関数 frac を使用して小数部分のみを取得します。この結果は、0.0 または 0.5 のいずれかになります。次に、2 を乗算して 0.0 または 1.0 にし、色として出力します (これにより、それぞれ黒色または白色になります)。

ビルトインレンダーパイプラインの単色シェーダーの例
ビルトインレンダーパイプラインの単純な Unlit シェーダーの例