Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Ориентация на модели шейдеров и функции графического процессора в HLSL

Вы можете использовать директивы #pragma, чтобы указать, что шейдерПрограмма, работающая на графическом процессоре. Подробнее
See in Словарь
требуются определенные функции графического процессора. Во время выполнения Unity использует эту информацию, чтобы определить, совместима ли шейдерная программа с текущим оборудованием.

Вы можете указать отдельные функции графического процессора с помощью директивы #pragma require или указать модель шейдера с помощью Директива #pragma target. Шейдерная модель — это сокращение для группы функций графического процессора; внутренне это то же самое, что и директива #pragma require с тем же списком функций.

Важно правильно описать функции графического процессора, которые требуются вашему шейдеру. Если ваш шейдер использует функции, не включенные в список требований, это может привести либо к ошибкам времени компиляции, либо к тому, что устройства не смогут поддерживать шейдеры во время выполнения.

Поведение по умолчанию

По умолчанию Unity компилирует шейдеры с производными #pragma require, что соответствует #pragma target 2.5.

Особые требования к этапам шейдера

Если ваш шейдер определяет определенные этапы шейдера, Unity автоматически добавляет элементы в список требований.

  • Если шейдер определяет этап геометрии (с помощью #pragma геометрии), Unity автоматически добавляет геометрию в список требований. .
  • Если шейдер определяет этап тесселяции (с #pragma hull или #pragma domain), Unity автоматически добавляет тесселяция в список требований.

Если список требований (или эквивалентное целевое значение) еще не включает эти значения, Unity отображает предупреждающее сообщение при компиляции шейдера, чтобы указать, что эти требования были добавлены. Чтобы избежать появления этого предупреждающего сообщения, явно добавьте требования или используйте соответствующее целевое значение в своем коде.

Указание функций графического процессора или модели шейдера

Чтобы указать необходимые функции, используйте директиву #pragma require, за которой следует список значений, разделенных пробелами. Например:

#pragma require integers mrt8

Вы также можете использовать директиву #pragma require, за которой следует двоеточие и список разделенных пробелами ключевых слов шейдера. Это означает, что требование применяется только к вариантам, которые используются при включении любого из заданных ключевых слов.

Например:

#pragma require integers mrt8 : EXAMPLE_KEYWORD OTHER_EXAMPLE_KEYWORD

Вы можете использовать несколько строк #pragma require. В этом примере шейдер требует целые числа во всех случаях и mrt8, если EXAMPLE_KEYWORD включен.

#pragma require integers #pragma require integers mrt8 : EXAMPLE_KEYWORD

Чтобы указать модель шейдера, используйте директиву #pragma target. Например:

#pragma target 4.0

Вы также можете использовать директиву #pragma target, за которой следует список разделенных пробелами ключевых слов шейдера. Это означает, что требование применяется только к вариантам, которые используются при включении любого из заданных ключевых слов.

Например:

#pragma target 4.0 EXAMPLE_KEYWORD OTHER_EXAMPLE_KEYWORD

Примечание. Синтаксис для указания ключевых слов для #pragma require и #pragma target: немного отличается. Когда вы указываете ключевые слова для #pragma require, вы используете двоеточие. Когда вы указываете ключевые слова для #pragma target, вы не используете двоеточие.

Список значений ‘#pragma target’

Вот список моделей шейдеров, которые использует Unity, и комбинации значений #pragma require, которым соответствует каждая из них.

Примечание. Модели шейдеров Unity аналогичны моделям шейдеров DirectX и требованиям к версии OpenGL, но не полностью соответствуют друг другу. Внимательно прочитайте описания, чтобы убедиться, что вы понимаете различия.

Значение Описание Поддержка Эквивалент #pragma require
2.0 Эквивалентно модели шейдеров DirectX 2.0.

Ограниченное количество арифметических и текстурных инструкций; 8 интерполяторов; нет выборки вершинной текстуры; нет производных во фрагментных шейдерах; нет явной выборки текстуры LOD.

Работает на всех платформах, поддерживаемых Unity. N/A
2.5 Почти то же, что и 3.0, но только с 8 интерполяторами и без явной выборки текстур LOD. Уровень функций DirectX 11 9+
OpenGL 3.2+
OpenGL ES 2.0
Vulkan
Metal
derivatives
3.0 Эквивалентно модели шейдеров DirectX 3.0. DirectX 11 feature level 10 +
OpenGL 3.2+
OpenGL ES 3.0+
Vulkan
Metal

Может работать на некоторых устройствах OpenGL ES 2.0, в зависимости от расширений и функций драйвера.

Эквивалентно 2.5, plus:
interpolators10 samplelod fragcoord
3.5 Эквивалентно OpenGL ES 3.0.

DirectX 11 feature level 10+
OpenGL 3.2+
OpenGL ES 3+
Vulkan
Metal
Эквивалентно 3.0, plus:
interpolators15 mrt4 integers 2darray instancing
4.0 Эквивалентно DirectX shader model 4.0, но без требования поддерживать 8 МРЦ. DirectX 11 feature level 10+
OpenGL 3.2+
OpenGL ES 3.1+AEP
Vulkan
Metal (if no geometry stage is defined)
Эквивалентно 3.5, plus:
geometry
4.5 Эквивалентно OpenGL ES 3.1. DirectX 11 feature level 11+
OpenGL 4.3+
OpenGL ES 3.1
Vulkan
Metal
Эквивалентно 3.5, plus:
compute randomwrite msaatex
4.6 Эквивалентно OpenGL 4.1.

Это самый высокий уровень OpenGL, поддерживаемый на Mac.

DirectX 11 feature level 11+
OpenGL 4.1+
OpenGL ES 3.1+AEP
Vulkan
Metal (if no geometry stage is defined, and no hull or domain stage is defined)
Эквивалентно 4.0, plus:
cubearray tesshw tessellation msaatex
5.0 Эквивалентно DirectX shader model 5.0, but without the requirement to support 32 interpolators or cubemap arrays. DirectX 11 feature level 11+
OpenGL 4.3+
OpenGL ES 3.1+AEP
Vulkan
Metal (if no geometry stage is defined, and no hull or domain stage is defined)
Эквивалентно 4.0, plus:
compute randomwrite msaatex tesshw tessellation

Информацию о поддержке модели шейдеров для консольных платформ см. в документации по конкретной платформе.

Примечания:

  • В определениях DirectX модель шейдеров 4.0 включает mrt8, а модель шейдеров 5.0 включает interpolators32 и кубический массив. Unity не включает их для более широкой совместимости. Чтобы потребовать эти функции, используйте явную директиву #pragma require.
  • Если вы используете цель, для которой требуется геометрия, но ваш шейдер не определяет этап геометрии, Unity удаляет геометрию из список требований во время компиляции.
  • Если вы используете цель, для которой требуется тесселяция, но ваш шейдер не определяет этап оболочки или домена, Unity удаляет тесселяцию из списка требований во время компиляции.

Список значений ‘#pragma require’

Вот все допустимые значения директивы #pragma require.

Значение Описание
interpolators10 Доступно не менее 10 интерполяторов вершины-фрагмента («вариации»).
interpolators15 Доступно не менее 15 интерполяторов вершин-фрагментов («вариантов»).

Примечание. Внутри это также автоматически добавляет целые числа в список требований.

interpolators32 Доступно как минимум 32 интерполятора вершины-фрагмента («вариации»).
integers Целые числа являются поддерживаемым типом данных, включая операции с битами/сдвигом.

Примечание. Внутри это также автоматически добавляет interpolators15 в список требований.

mrt4 Поддерживается не менее 4 целей рендеринга.
mrt8 Поддерживается не менее 8 целей рендеринга.
derivatives PixelНаименьшая единица компьютерного изображения. Размер пикселя зависит от разрешения вашего экрана. Пиксельное освещение рассчитывается для каждого пикселя экрана. More info
See in Словарь
Поддерживаются производные инструкции шейдера (ddx/ddy).
samplelod Явная текстура LODМетод Level Of Detail (LOD) – это оптимизация, уменьшающая количество треугольников. который Unity должен отображать для GameObject, когда его расстояние от камеры увеличивается. Подробнее
See in Словарь
(tex2Dlod / SampleLevel).
fragcoord Поддерживается ввод местоположения пикселя (XY на экране, глубина ZW в пространстве клипа) в пиксельных шейдерах..
2darray Массивы 2D-текстур являются поддерживаемым типом данных.
cubearray CubemapКоллекция из шести квадратных текстур, которые могут представлять отражения в окружающей среде или скайбокс, нарисованный позади вашей геометрии. Шесть квадратов образуют грани воображаемого куба, окружающего объект; каждая грань представляет вид по направлениям мировых осей (вверх, вниз, влево, вправо, вперед и назад). Подробнее
См. в Словарь
Массивы являются поддерживаемым типом данных.
instancing Поддерживается входное системное значение SV_InstanceID.
geometry Поддерживаются этапы шейдера геометрии.
compute Поддерживаются вычислительные шейдеры, структурированные буферы и атомарные операции.
randomwrite or uav Поддерживаются текстуры «Случайная запись» (UAV).
tesshw Поддерживается аппаратная тесселяция, но не обязательно этапы шейдера тесселяции (корпус/домен). Например, Metal поддерживает тесселяцию, но не этапы корпуса или домена..
tessellation Поддерживаются этапы шейдера тесселяции (корпус/домен).
msaatex Поддерживается возможность доступа к мультисэмплированным текстурам (Texture2DMS в HLSL).
sparsetex Разреженные текстуры с информацией о проживании (поддержка «Tier2» в терминах DirectX; функция CheckAccessFullyMapped HLSL).
framebufferfetch or fbfetch Поддерживается выборка кадрового буфера (возможность считывать цвет входного пикселя в пиксельном шейдере).
setrtarrayindexfromanyshader Поддерживается установка индекса массива цели рендеринга на любом этапе шейдера (а не только на этапе шейдера геометрии).
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3