Unity 6.3
0 онлайн 115 гостей 3 в системе
Вход
Материалы и шейдеры Шаг 338 из 442

Пример шейдера для шахматной доски в встроенном Render Pipeline

Кот-подобный персонаж, отображаемый в виде шахматной доски.
Кот-подобный персонаж, отображаемый в виде шахматной доски.

Вот шейдер, который выводит шаблон шахматной доски, основанный на координатах текстуры сетки:

Shader "Unlit/Checkerboard"
{
    Properties
    {
        _Density ("Density", Range(2,50)) = 30
    }
    SubShader
    {
        Pass
        {
            HLSLPROGRAM
            #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;
            }
            ENDHLSL
        }
    }
}

Ползунок плотности в блоке Свойства контролирует плотность шахматной доски. В вертикальном шейдере сетки UVs умножаются на значение плотности, чтобы перевести их из диапазона от 0 до 1 в диапазон от 0 до плотности. Предположим, что плотность была установлена на 30 — это сделает так, что i.uv ввод в фрагментный шейдер будет содержать значения с плавающей точкой от нуля до 30 для различных мест рендируемой сетки.

Затем код фрагментного шейдера берёт только целочисленную часть входной координаты, используя встроенную в HLSL функцию floor, и делит ее на два. Напомним, что входные координаты были числами от 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. Затем мы умножаем его на два, чтобы получить 0.0 или 1.0, и выводим в виде цвета (это приводит к чёрному или белому цвету соответственно).