Параметры шейдера

Объяви значение через // @param, чтобы добавить поле в Layer Settings. WhimTex создаст uniform и соответствующий контрол. После изменения кода или объявлений нажми Apply.

Начать с числа и цвета

// @param float _Amount = 1 [0 .. 1]
// @param color _Tint = #FFAA66

float4 ApplyFX(float2 uv, float4 color)
{
    return float4(lerp(color.rgb, color.rgb * _Tint.rgb, _Amount), color.a);
}

Эффект окрашивает RGB, сохраняя альфу. Начальное значение _Amount — 1, диапазон ползунка — 0–1. Входные текстуры, пространства координат и полный список типов описаны в справочнике HLSL.

Подписи и поля в заголовке

Директива Назначение
// @param label(Сила оттенка) float _Strength = 1 Задать понятную подпись поля. Подпись со скобками заключи в кавычки.
hidden в объявлении параметра Скрыть обычную строку поля, не меняя значение и работу HLSL. Можно ставить до или после label(...).
// @control(_Opacity) Показать существующий параметр перед ⋮ в заголовке FX.
// @header(Lighting) Добавить жирный заголовок без сворачивания перед следующим параметром.
// @helpbox(Текст подсказки.) Добавить информационную подсказку перед следующим параметром.

Размести @control сразу после // @whimtex-effect Category/Name или первой строкой, если маркера каталога нет. Поддерживаются bool, enum, float, color и float2/3/4. Без hidden поля в заголовке и содержимом меняют одно значение. Неподдерживаемый тип не меняет заголовок. Повторные директивы вызывают предупреждение; применяется последняя.

Директивы описывают интерфейс, а не действие эффекта: поле прозрачности само по себе не добавляет смешивание. Заголовки и подсказки без следующего параметра игнорируются. Метаданные сохраняются в пресетах и экспортируемом коде.

Условия и группы

Используй @if, чтобы показывать настройки только для выбранного режима:

// @param enum _Mode = 0 { Basic: 0, Advanced: 1 }
// @if _Mode == 1
// @param float _Detail = 0.5 [0 .. 1]
// @param bool _UseExtra = false
// @endif

Условия поддерживают числовые сравнения == и != с безусловно объявленным float, bool или enum. Вложенные условия не поддерживаются. Скрытые значения остаются и влияют на HLSL; если режим должен менять расчёт, добавь условие и в шейдер. Экспорт пресета сохраняет условия.

Объедини поля строками // @group(Tint; _Parameter) и // @endgroup. Связанный параметр должен быть объявлен внутри группы без условия.

Тип параметра Вид заголовка
bool Галочка слева от названия. Она меняет значение; для скрытия зависимых полей нужен @if.
enum, float, color, float2/3/4 Компактное поле справа, с названием группы вместо отдельной подписи. Перетягивание названия float меняет значение.
Неподдерживаемый или многострочный тип Остаётся в содержимом; заголовок не меняется.

Компактное связанное поле убирается из содержимого. hidden не скрывает поддерживаемое поле в заголовке; несвязанные скрытые поля не показываются. Если условия скрыли все строки содержимого, остаётся только заголовок. Группа может содержать @if, но не другие группы. // @group(Advanced) создаёт группу с обычным заголовком, а // @group — рамку без названия.

Начальные кривые

Например, // @param curve _Profile = easeInOut создаёт поле профиля.

Значение Форма
linear Прямая от (0,0) до (1,1).
easeInOut Те же концы, с плавным выравниванием на обоих.
easeIn / easeOut Квадратичная кривая 0→1 с плавным стартом / завершением.
one Постоянная 1, ключи во времени 0 и 1.

Переименовать параметр

Размести // @formerlyserializedas(_OldName) непосредственно перед новым объявлением // @param. При Apply переносятся совместимые сохранённые значения и идентичность параметра. Для нескольких прежних имён повтори директиву; в HLSL используй новое имя uniform. Экспорт пресета сохраняет алиасы.

Координаты и время

LayerToLocal(uv) позволяет процедурной форме следовать трансформу слоя. Подробнее — соглашения о координатах.

FX и Shader Processor кешируют результат, пока входы и параметры не меняются. Для меняющихся во времени эффектов используй явный параметр. Временные входы Unity (_Time, _SinTime, _CosTime, _TimeParameters, unity_DeltaTime) не поддерживаются: их можно указать, но Apply выдаст предупреждение и отключит кеширование этого результата.