Пользовательские шейдеры
Руководства о том, как писать свои собственные шейдеры в Wonderland Engine.
Вершинные vs Фрагментные шейдеры
В Wonderland Engine на данный момент доступны API для написания пользовательских фрагментных шейдеров.
Структура материала
Структура материала определяет свойства материала для ввода в ваш шейдер и создает пользовательский интерфейс.
Это определение структуры позволяет нам эффективно упаковывать входные данные материалов и автоматически генерировать
распаковочный код в плейсхолдере {{ decoder }}
вашего шейдера.
Пример структуры материала может выглядеть так:
Типы свойств
Поддерживаются следующие типы свойств в сочетании с прецизионными спецификаторами lowp
и mediump
:
float
,uint
,int
: Скалярные значенияvec2
,vec3
,vec4
: Векторы с плавающей запятойivec2
,ivec3
,ivec4
: Целочисленные векторы
Прецизия
В Wonderland Engine lowp
всегда будет приводить к 8-битному типу, закодированному для каждого компонента,
mediump
- к 16-битному типу (например, полуточная с плавающей запятой), а highp
, где поддерживается,
будет 32-битным типом.
Суффиксы
Следующие суффиксы имеют специальное значение:
*Color
: Будет генерировать инструмент выбора цвета. Используйтеlowp
для LDR цветов.*Texture
: Будет генерировать выпадающий список ресурсов текстур. Всегда используйтеmediump
.
Выравнивание памяти
В связи с тем, как работает упаковка материала в Wonderland Engine, большинство типов векторов требуют выравнивания до 32-битов. Смотрите прецизия для того, как считать биты на компонент.
Символы препроцессора
Чтобы скомпилировать части шейдера для повышения производительности, у нас есть расширенная реализация препроцессора.
Возможности
Вы можете определить “Символы функций” в шейдерах для включения и отключения частей вашего шейдера:
FEATURE_<name>
используется для определения функции с именем <name>
. Они будут отображаться в
настройках Views > Resources > Pipelines
в списке “Features”.
Если функция включена, символ будет определен с соответствующим именем функции, например, ALPHA_MASKED
в приведенном выше примере (не FEATURE_ALPHA_MASKED
).
Входы фрагментов
Символы с префиксом USE_<input>
используются для включения входов шейдера. У вас есть следующие варианты:
Symbol | Type | Name |
---|---|---|
USE_POSITION_WORLD | highp vec3 | fragPositionWorld |
USE_POSITION_VIEW | highp vec3 | fragPositionView |
USE_TEXTURE_COORDS | highp vec2 | fragTextureCoords |
USE_TEXTURE_COORDS_1 | highp vec2 | fragTextureCoords1 |
USE_COLOR | mediump vec4 | fragColor |
USE_TANGENT | mediump vec4 | fragTangent |
USE_OBJECT_ID | mediump uint | fragObjectId |
USE_MATERIAL_ID | mediump uint | fragMaterialId |
USE_NORMAL | mediump vec3 | fragNormal |
USE_BARYCENTRIC | mediump vec3 | fragBarycentric |
Включения
Wonderland Engine поставляется с системой включений шейдеров GLSL. Пожалуйста, обратитесь к существующим шейдерам для определения, какие включения обычно требуются.
Униформы
Некоторые специальные униформы, которые всегда доступны:
Uniform | Type | Description |
---|---|---|
viewIndex | uint | Индекс текущего вида, которое рендерится. |
Для остальных, пожалуйста, используйте шейдеры, поставляемые с редактором, в качестве ссылки. Некоторые из них доступны только при включении через символ препроцессора.