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