Ветвь, основанная на особенностях платформы
Прямое использование этих макросов платформы не рекомендуется, поскольку они не всегда способствуют будущей надежности вашего кода. Например, если вы пишете Shader, который проверяет D3D11, возможно, вы захотите убедиться, что в будущем проверка будет расширена, чтобы включить Vulkan. Вместо этого Unity определяет несколько вспомогательных макросов (в HLSLSupport.cginc):
| Макро: | Использование: |
|---|---|
UNITY_BRANCH |
Добавьте это перед условными инструкциями, чтобы сообщить компилятору, что это должно быть скомпилировано в фактическое ответвление. Расширяется до [branch] на платформах HLSL. |
UNITY_FLATTEN |
Добавьте это перед условными инструкциями, чтобы сообщить компилятору, что это должно быть сплочено, чтобы избежать фактической инструкции ветки. Расширяется до [flatten] на платформах HLSL. |
UNITY_LOOP |
Этот макрос заставляет Unity генерировать код, который инструктирует компилятор шейдера сохранять петлю for как петлю, а не разворачивать ее в фиксированный набор операций. Пример использования макроса см. в Рендирование дополнительных светов в шейдере. |
UNITY_NO_SCREENSPACE_SHADOWS |
Определяется на платформах, которые не используют каскадные отображения теней экрана (мобильные платформы). |
UNITY_NO_LINEAR_COLORSPACE |
Определяется на платформах, не поддерживающих линейное цветовое пространство (мобильные платформы). |
UNITY_NO_RGBM |
Определяется на платформах, где RGBM сжатие для lightmaps не используется (мобильные платформы). |
UNITY_NO_DXT5nm |
Определяется на платформах, которые не используют сжатие карты нормалей DXT5nm (мобильные платформы). |
UNITY_FRAMEBUFFER_FETCH_AVAILABLE |
Определяется на платформах, где может быть доступна функция «вызов цвета framebuffer» (обычно платформы iOS). |
UNITY_USE_RGBA_FOR_POINT_SHADOWS |
Определяется на платформах, где точечные световые тени используют текстуры RGBA с кодированной глубиной (другие платформы используют одноканальные текстуры с плавающей точкой). |
UNITY_ATTEN_CHANNEL |
Определяет, какой канал текстуры освещения содержит данные; используется в коде освещения по пикселям. Определяется как «r» или «a». |
UNITY_HALF_TEXEL_OFFSET |
Определяется на платформах, требующих настройки смещения полутекселя при отображении текселей на пиксели. |
UNITY_UV_STARTS_AT_TOP |
Всегда определяется значением 1 или 0. Значение 1 используется на платформах, где координата Texture V равна 0 в «верхней» части текстуры. Direct3D-подобные платформы используют значение 1; OpenGL-подобные платформы используют значение 0. |
UNITY_MIGHT_NOT_HAVE_DEPTH_Texture |
Определяет, может ли платформа эмулировать карты теней или текстуры глубины путем ручного отображения глубины в текстуре. |
UNITY_PROJ_COORD(a) |
Для данного 4-компонентного вектора это возвращает координату Текстуры, подходящую для проекции Текстуры. На большинстве платформ это возвращает заданные значения напрямую. |
UNITY_NEAR_CLIP_VALUE |
Определяется значением близкой плоскости обрезки. Direct3D-подобные платформы используют 1.0, в то время как OpenGL-подобные платформы используют –1.0. |
UNITY_VPOS_TYPE |
Определяет тип данных, необходимых для ввода позиции пикселя (VPOS): float2 на D3D9, float4 в других местах. |
UNITY_CAN_COMPILE_TESSELLATION |
Определяется, когда компилятор Shader “понимает” синтаксис тесселяционного Shader HLSL (в настоящее время только D3D11). |
UNITY_INITIALIZE_OUTPUT(type,name) |
Инициализация переменной имя заданного типа до нуля. |
UNITY_COMPILER_HLSL, UNITY_COMPILER_HLSL2GLSL, UNITY_COMPILER_CG |
Показывает, какой компилятор Shader используется для компиляции Shaders. См. документацию по Компиляция шейдеров для более подробной информации. Используйте это, если вы сталкиваетесь с очень специфическими различиями в обработке синтаксиса Shader между компиляторами и хотите написать разный код для каждого компилятора. |
UNITY_REVERSED_Z— определяется на платформах с помощью обратного Z-буфера. Сохраняемые значения Z находятся в диапазоне 1..0 вместо 0..1.