Организация шейдеров — различия между версиями

Материал из SkyXEngine wiki
Перейти к: навигация, поиск
м
 
Строка 1: Строка 1:
 
'''Шейдеры''' - программы исполняемые на GPU. В контексте движка SkyXEngine это файлы с исходным кодом на языке HLSL.
 
'''Шейдеры''' - программы исполняемые на GPU. В контексте движка SkyXEngine это файлы с исходным кодом на языке HLSL.
 
Более подробно про само понятие можно узнать [https://ru.wikipedia.org/wiki/%D0%A8%D0%B5%D0%B9%D0%B4%D0%B5%D1%80 здесь].
 
  
 
== Технические характеристики ==
 
== Технические характеристики ==
Строка 74: Строка 72:
 
Если был создан кэш, но исходного кода шейдеров больше нет, то движок будет грузить только кэш.
 
Если был создан кэш, но исходного кода шейдеров больше нет, то движок будет грузить только кэш.
  
[[Category:Шейдеры]]
+
[[Category:Основы]]

Текущая версия на 07:59, 15 декабря 2018

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

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