Перейти к основному содержимому

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

Not (yet) implemented feature

Некоторые функции, описанные в настоящем документе, более не поддерживаются, либо начнут поддерживаться в будущем.

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

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

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

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

Виды файлов

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

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

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

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

Вычислительный шейдер - позволяет производить произвольные вычисления, не является частью конвейера отрисовки, имеет входную точку, расширение .cs.

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

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