Unity 6.3
0 онлайн 38 гостей 3 в системе
Вход

Введение в поверхностные шейдеры во Встроенном Render Pipeline

В Built-in Render Pipeline, поверхностные шейдеры являются упрощенным способом написания шейдеров, которые взаимодействуют с освещением.

Совместимость конвейера отображения

Название особенности Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Изготовленный на заказ SRP Built-in Render Pipeline
Шейдеры поверхностей Нет Нет Нет Да

Чтобы создать настраиваемое освещение в URP и HDRP, выполните одно из следующих действий:

  • Для упрощенного способа создания объектов Shader, см. Shader Graph.
  • Скопируйте и измените код шейдера URP или HDRP, предоставленный в файлах пакета. Изменение может быть затруднено, так как код шейдера большой и сложный. Дополнительную информацию о поиске файлов пакета см. в Проверка пакетов.

Обзор

Написание шейдеров, которые взаимодействуют с освещением, сложно. Существуют различные типы освещения, различные варианты теней, различные пути рендеринга (переднее и отложенное рендеринг), и шейдер должен как-то справляться со всей этой сложностью.

Surface Shaders — это подход к генерации кода, который делает намного проще писать lit shaders, чем использовать низкоуровневые вершинно-пиксельные программы.

Для некоторых примеров, посмотрите Примеры поверхностных шейдеров.

Как это работает

Вы определяете «функцию поверхности», которая принимает любые UVs или данные, которые вам нужны, в качестве входа, и заполняет структуру выхода SurfaceOutput. SurfaceOutput в основном описывает свойства поверхности (его цвет альбедо, нормаль, эмиссию, зеркальность и т.д.). Вы пишете этот код в HLSL.

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

Поверхностные шейдеры и DirectX 11 HLSL синтаксис

В настоящее время некоторые части конвейера компиляции поверхностных шейдеров не понимают синтаксис DirectX 11-specific HLSL, так что если вы используете HLSL функции, такие как StructuredBuffers, RWTextures и другие не-DX9 синтаксические элементы, вам придется обернуть их в макрос препроцессора только для DX11.

См. Различия для конкретных платформ и Использование HLSL страницы для подробностей.

Дополнительные ресурсы