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

Ветвь, основанная на особенностях платформы

Прямое использование этих макросов платформы не рекомендуется, поскольку они не всегда способствуют будущей надежности вашего кода. Например, если вы пишете 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.

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