Унифицированный язык шейдеров UUSL
Унифицированный язык шейдеров UNIGINE (UUSL) позволяет создать один файл шейдера для всех поддерживаемых API трехмерной графики: Direct3D 11, Direct3D 12, Vulkan и PS5. В языке есть предопределенные типы данных и реализованные функции, которые упрощают и унифицируют процесс написания шейдеров.
Этот раздел документации Unigine содержит информацию о синтаксисе UUSL (унифицированные типы данных, встроенные функции, параметры, текстуры, семантика и т. д.) и руководства по созданию шейдеров.
Часто задаваемые вопросы#
Что такое UUSL?#
Унифицированный язык шейдеров UNIGINE (UUSL) - это обертка, которая оборачивает синтаксис HLSL и использует собственные парсеры для конструкций #ifdef. Вы можете использовать инструкции UUSL для написания шейдерного кода без определения графического API: он будет работать на всех API.
Стоит ли писать шейдеры только на UUSL?#
Определенно нет. UUSL - это просто оболочка, которая облегчает процесс написания шейдеров. Вы также можете использовать старый подход, написав отдельно часть шейдера для соответствующего графического API с языками шейдеров HLSL и PS5.
Какие этапы шейдера есть в движке Unigine?#
Движок Unigine имеет стандартный конвейер шейдеров: этап Vertex-Shader → этап Geometry-Shader → этап Fragment-Shader . Если вы хотите использовать тесселяцию, конвейер будет иметь 3 дополнительных этапа между этапами вершинного шейдера и этапами геометрического шейдера: этап Control-Shader , этап тесселяции , Оценка -Этап шейдера .
Как связаны материалы и шейдеры?#
Материал определяет, какие шейдеры для определенного прохода рендеринга он будет использовать для рендеринга. Для материала можно определить шейдеры вершин , геометрии и фрагмента . Когда вы назначаете материал, движок начинает использовать свои шейдеры для рендеринга изображения. Всё просто!
У нас есть отличная статья о форматах файлов материалов , ознакомьтесь с ней.
Как начать пользоваться UUSL?#
Когда вы начинаете писать шейдеры, включайте заголовки UUSL и начинайте программировать!
Используйте следующие команды, чтобы включить необходимые заголовки:
// Include Unified Unigine Shader Language (UUSL) common header
#include <core/materials/shaders/api/common.h>
Нуждаются ли шейдеры в компиляции?#
Да, это так. Но эту работу выполняет движок: просто используйте консольную команду materials_reload , если вы внесли некоторые изменения в файлы шейдеров. Это действительно удобно: вам не нужно компилировать шейдер каждый раз, когда вы вносите какие-либо изменения, вы видите результат изменений во время выполнения без перезапуска движка!
Могу ли я отлаживать код шейдера UUSL?#
Конечно. Если есть ошибка шейдера, движок показывает это в консоли :
Сообщение содержит информацию о том, в каком файле есть ошибки, и их описание (включая номер строки).
Экспортируйте файл шейдера в файл и найдите эту строку кода, чтобы выяснить, что происходит. Шейдер будет экспортирован в файл с форматом шейдера графического API (.hlsl), расположенный относительно папки data.
Как создать собственный шейдер ?#
Вы можете использовать руководства по соответствующей теме, чтобы узнать, как создавать для них материалы и шейдеры: