Унифицированный язык шейдеров UUSL
Унифицированный язык шейдеров UNIGINE (UUSL) позволяет создать один файл шейдера для обоих API трехмерной графики: OpenGL и Direct3D11. В языке есть предопределенные типы данных и реализованные функции, которые упрощают и унифицируют процесс написания шейдеров.
Этот раздел документации Unigine содержит информацию о синтаксисе UUSL (унифицированные типы данных, встроенные функции, параметры, текстуры, семантика и т. д.) и руководства по созданию шейдеров.
Часто задаваемые вопросы#
Что такое UUSL?#
Унифицированный язык шейдеров UNIGINE (UUSL) - это оболочка, которая объединяет большую часть синтаксиса GLSL и HLSL. Вы можете использовать инструкции UUSL для написания кода шейдера без определения графического API: он будет работать с обоими API.
Стоит ли писать шейдеры только на UUSL?#
Определенно нет. UUSL - это просто оболочка, которая облегчает процесс написания шейдеров. Вы также можете использовать старый подход, написав отдельно часть шейдера для соответствующего графического API с языками затенения GLSL и HLSL .
Какие этапы шейдера есть в движке Unigine?#
Движок Unigine имеет стандартный конвейер шейдеров: этап Vertex-Shader → этап Geometry-Shader → этап Fragment-Shader . Если вы хотите использовать тесселяцию, конвейер будет иметь 3 дополнительных этапа между этапами вершинного шейдера и этапами геометрического шейдера: этап Control-Shader , этап тесселяции , Оценка -Этап шейдера .
Как связаны материалы и шейдеры?#
Материал определяет, какие шейдеры для определенного прохода рендеринга он будет использовать для рендеринга. Для материала можно определить шейдеры вершин , геометрии и фрагмента . Когда вы назначаете материал, движок начинает использовать свои шейдеры для рендеринга изображения. Кусок торта!
У нас есть отличная статья о форматах файлов материалов , ознакомьтесь с ней.
Как начать пользоваться UUSL?#
Когда вы начинаете писать шейдеры, включайте заголовки UUSL и начинайте программировать!
Используйте следующие команды, чтобы включить необходимые заголовки:
// Include Unified Unigine Shader Language (UUSL) common header
#include <core/shaders/common/common.h>
// Include the UUSL language fragment shader header
#include <core/shaders/common/fragment.h>
// Include the UUSL language math common functions header
#include <core/shaders/common/double_math.h>
Нуждаются ли шейдеры в компиляции?#
Да, это так. Но эту работу выполняет движок: просто используйте консольную команду materials_reload , если вы внесли некоторые изменения в файлы шейдеров. Это действительно удобно: вам не нужно компилировать шейдер каждый раз, когда вы вносите какие-либо изменения, вы видите результат изменений во время выполнения без перезапуска движка!
Могу ли я отлаживать код шейдера UUSL?#
Конечно. Если есть ошибка шейдера, движок показывает это в консоли :
Сообщение содержит информацию о том, в каком файле есть ошибки, и их описание (включая номер строки).
Экспортируйте файл шейдера в файл и найдите эту строку кода, чтобы выяснить, что происходит. Шейдер будет экспортирован в файл с форматом шейдера графического API (.hlsl или .glsl), расположенный относительно папки data.
Как создать собственный deferred / forward / post-process шейдер ?#
Вы можете использовать руководства по соответствующей теме, чтобы узнать, как создавать для них материалы и шейдеры: