Организация шейдеров

Материал из SkyXEngine wiki
Версия от 07:59, 15 декабря 2018; Byurrer (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Шейдеры - программы исполняемые на GPU. В контексте движка SkyXEngine это файлы с исходным кодом на языке HLSL.

Технические характеристики

Все шейдеры используют язык HLSL версии 3.0, и как следствие используются только вершинные и пиксельные шейдеры.

Входной точкой (функцией) является функция main, которая должна быть единственной.

Виды файлов

Компилируемый шейдер - шейдер который загружается движком и компилируется, может быть вершинным либо пиксельным шейдером.

Вершинный шейдер - обрабатывает вершины, имеет входную точку, расширение .vs

Пиксельный шейдер - обрабатывает пиксели, после вершинного шейдера, имеет входную точку, расширение .ps

Подключаемый файл - файл с исходным кодом шейдеров, содержит общие данные (структуры, значения, константы, дефайны, функции и прочее) для нескольких шейдеров, не имеет входной точки, расширение .h. Такие файлы могут подключаться и к вершинным и пиксельным шейдерам.

Правила именования и расположения

Именование шейдеров подчиняется общим правилам именования.

Все шейдеры расположены по относительному пути /gamesource/shaders/

Все шейдеры должны располагаться только на одном уровне вложенности, то есть примерно так:

  • /gamesource/shaders/dirname/dirname_shader.ext

Именование шейдеров аналогично именованию текстур, то есть каждый компилируемый шейдер, должен иметь префикс папки, в которой он расположен, после чего следует символ подчеркивания "_" и далее имя шейдера с расширением. Например:

  • папка mtrlgeom
    • вершинный шейдер mtrlgeom_base.vs
    • пиксельный шейдерmtrlgeom_base.ps

Структура директории

Каждая директория относится к определенной области рендера/расчетов.

Список:

  • aigrid - рендер ai сетки
  • lighting - расчеты освещения
  • mtrlgeom - рендер материалов для статической геометрии
  • mtrlgreen - рендер материалов для растительности
  • mtrlskin - рендер материалов для анимационных моделей
  • particles - рендер частиц
  • pp - основные постпроцессорные расчеты
  • ppe - постпроцессорные эффекты
  • ppgensm - постпроцессорные генераторы теней
  • pptm - расчет tone mapping
  • sky - рендер sky элементов
  • sm - генерация данных для теней
  • stdr - стандартный рендер для всех материальных сущностей рендера

Также, в есть директория cache, которая хранит информацию о кэше шейдеров. Данная директория не предназначена для использования пользователями.

Общие подключаемые файлы

Общие подключаемые файлы располагаются в корневой директории шейдеров.

Список общих подключаемых файлов:

  • gdefines.h - общие данные (значения, константы, дефайны) для большинства шейдеров
  • struct.h - все используемые структуры для входных/выходных данных шейдеров
  • ps.h - обертки функций для пиксельного шейдера
  • mtrl.h - общее API для шейдеров материалов
  • green.h - API для обработки растительности
  • skin.h - API для обработки анимационных моделей
  • shadow.h - API для работы с тенями

Кэширование

Для ускорения загрузки шейдеров движок поддерживает кэширование. При кэшировании движок сохраняет скомпилированный код шейдера и иную необходимую информацию. Это позволяет значительно быстрее осуществлять загрузку.

При первой загрузке шейдеров создается их кэш в директории /gamesource/shaders/cache/ в следующий раз при загрузке шейдеров, в случае если код шейдеров не был изменен - будет загружен кэш.

Если был создан кэш, но исходного кода шейдеров больше нет, то движок будет грузить только кэш.