Подробное объяснение того, как написать шейдер для конвейера рендеринга URP в Unity3D.

Unity3D — мощный движок разработки игр, который предоставляет разработчикам множество конвейеров рендеринга. Одним из таких конвейеров рендеринга является Universal Render Pipeline (URP) , который представляет собой облегченный конвейер рендеринга, подходящий для мобильных устройств и оборудования начального уровня. В этой статье мы подробно расскажем, как самостоятельно написать шейдер для конвейера рендеринга URP, а также дадим подробное техническое объяснение и реализацию кода.

Да, здесь есть группа . Я надеюсь, что каждый сможет присоединиться к нам, чтобы
вместе обменяться опытом разработки!


Во-первых, нам нужно создать новый конвейер рендеринга URP. В Unity3D выберите «Окно» в строке меню, затем выберите «Диспетчер пакетов». В окне «Диспетчер пакетов» выберите «Universal RP» и нажмите кнопку «Установить», чтобы установить конвейер рендеринга URP.
После завершения установки мы сможем увидеть вновь созданный конвейер рендеринга URP в представлении «Проект». Далее нам нужно создать новый шейдер для настройки эффекта конвейера рендеринга URP.


В представлении «Проект» щелкните правой кнопкой мыши и выберите «Создать» -> «Шейдер». Назовите вновь созданный шейдер «CustomURPShader». Затем дважды щелкните, чтобы открыть этот файл шейдера, и мы сможем начать писать собственный конвейер рендеринга URP.


В файле шейдера нам нужно определить входные и выходные данные конвейера рендеринга. Во-первых, нам нужно определить входные и выходные вершины конвейера рендеринга. Входные данные вершин относятся к данным вершин, полученным конвейером рендеринга, а выходные данные вершин относятся к данным вершин, выводимым конвейером рендеринга.

struct appdata {
    float4 vertex : POSITION;
};

struct v2f {
    float4 vertex : SV_POSITION;
};


В приведенном выше коде мы определяем структуру appdata для представления входных данных вершины, которая содержит атрибут вершины типа float4. Затем мы определили структуру v2f для представления вывода вершин, которая также содержит атрибут вершины типа float4.
Далее нам нужно определить функцию вершины и функцию фрагмента конвейера рендеринга. Функции вершин относятся к функциям, обрабатывающим вершины, а функции фрагментов относятся к функциям, обрабатывающим пиксели.

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

fixed4 frag (v2f i) : SV_Target {
    return fixed4(1, 0, 0, 1);
}


В приведенном выше коде мы определяем вершинную функцию vert, которая получает параметр v типа appdata и возвращает результат o типа v2f. В функции vert мы преобразуем положение входной вершины в положение в пространстве отсечения и сохраняем результат в атрибуте вершины выходной вершины.
Затем мы определяем функцию фрагмента frag, которая получает параметр типа v2f i и возвращает результат типа фиксированный4. В функции frag мы вернем фиксированный красный цвет.


Наконец, нам нужно определить SubShader в файле Shader, чтобы указать характеристики и порядок рендеринга конвейера рендеринга.

SubShader {
    Pass {
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        ENDCG
    }
}


В приведенном выше коде мы определяем SubShader и определяем в нем Pass. В Pass мы используем CGPROGRAM и ENDCG для обертывания наших функций вершин и функций фрагментов. Затем мы используем #pragma vertex и #pragma фрагмент для указания функций вершин и функций фрагментов.


После выполнения вышеуказанных шагов мы можем использовать шейдер конвейера рендеринга URP, который мы написали сами в Unity3D. Примените этот шейдер к игровому объекту и запустите игру, и мы увидим, что игровой объект отображается красным.


Подводя итог, с помощью описанных выше шагов мы можем сами написать шейдер для конвейера рендеринга URP. Сначала мы создаем новый конвейер рендеринга URP и устанавливаем пакет конвейера рендеринга URP. Затем мы создаем новый шейдер и определяем входные и выходные вершины конвейера рендеринга. Далее мы определяем функцию вершины и функцию фрагмента конвейера рендеринга. Наконец, мы определяем SubShader в файле Shader, чтобы указать характеристики и порядок рендеринга конвейера рендеринга. С помощью этих шагов мы можем добиться желаемого эффекта конвейера рендеринга URP.


Я надеюсь, что эта статья поможет вам понять, как написать шейдер для вашего собственного конвейера рендеринга URP. Желаю вам успехов в использовании Unity3D для разработки игр!

おすすめ

転載: blog.csdn.net/voidinit/article/details/133900545