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