Shader FX и Processor
В HLSL строка // @header(Lighting) перед параметром добавляет жирный заголовок раздела, без сворачивания. Кавычки вокруг названия не нужны; заголовок сохраняется при экспорте пресета.
Значение по умолчанию one задаёт горизонтальную кривую на уровне 1, с ключами во времени 0 и 1.
Для кривых также доступны значения по умолчанию easeIn — плавный старт, и easeOut — плавное завершение. Обе кривые квадратичные, от 0 до 1.
Автор эффекта может задать curve _Profile = linear или curve _Profile = easeInOut в объявлении // @param. Обе кривые идут от (0,0) до (1,1); Ease In Out плавно выравнивается на обоих концах.
В Color → Levels поле Curve применяется после входных точек чёрного/белого и Gamma, перед выходными точками. По умолчанию кривая линейная. С Preserve Color она меняет яркость, без него — каждый RGB-канал отдельно. Альфа не меняется.
Источник текстуры Self читает изображение перед текущим FX, с учётом предыдущих эффектов. None возвращает прозрачные пиксели. Для них не нужно назначать ассет или слой; Self продолжает работать при копировании на другой слой.
Векторные параметры содержат два, три или четыре числовых компонента. Параметр нормали задаёт единичное направление и предлагает кнопку Edit on Canvas. Потяните конечную точку: около центра нормаль направлена к камере, на предельном радиусе — вдоль холста. Клик по точке переключает + (к камере) и − (от камеры).
Текстурный параметр принимает Texture (ассет) или Layer (слой текущего документа). Выберите режим источника или перетащите слой в поле параметра. Поддерживаются процедурные и рисовальные слои, в том числе выключенные. Группа передаёт цветное содержимое; выключенные дочерние слои остаются скрытыми. Отсутствующий источник даёт прозрачность, а циклическую ссылку выбрать нельзя.
Процедурную фигуру в FX можно привязать к трансформу слоя через LayerToLocal(uv). Подробнее о координатах — в справочнике по шейдерам.
Свой шейдерный эффект пригодится, если нужного результата нет среди встроенных слоёв. Готовым эффектом можно пользоваться и менять его параметры без написания кода.
Profile в Bevel Emboss преобразует выбранный канал карты высот в высоту рельефа. Mapping в Gradient Map перераспределяет яркость перед выбором цвета градиента. Обе кривые по умолчанию линейные.
Color Balance использует три знаковых компонента RGB. У Gain, Levels, Threshold, фонового освещения и смещений дисторшена доступны мягкие границы там, где это уместно. Levels и Threshold допускают значения выше 1 для HDR; доли смешивания ограничены 0–1. В Pixelate и Posterize можно ввести больше 64 уровней и Gamma выше 5.
Галочка без подписи в заголовке Shader FX включает или пропускает эффект, сохраняя его настройки. У внешних FX-ссылок это состояние общее; для независимой копии используй Embed.
Применить готовый эффект
- Выбери слой, который хочешь изменить.
- В его разделе FX нажми + Preset ▾ и выбери эффект по категории.
- Настрой параметры эффекта: ползунки, цвета, текстуры, переключатели и выпадающие списки. Изменения сразу видны на изображении.
У одного параметра могут быть и ползунок, и выпадающий список: оба меняют общее значение. Custom означает, что текущее число не совпадает ни с одним готовым вариантом списка.
Наведи курсор на параметр, чтобы прочитать подсказку, если автор эффекта её добавил.
Некоторые ползунки разрешают выходить за один или оба края шкалы: введи число в соседнее поле или потяни подпись параметра. Каждый край может быть жёстким или мягким независимо от другого. Ручка останется у ближайшего края, но эффект получит введённое значение. Другие ползунки ограничивают и перетаскивание, и ручной ввод — это выбирает автор эффекта.
Поле кривой позволяет настроить числовой профиль эффекта. Нажми на него, чтобы изменить ключи и касательные в стандартном редакторе Unity. По умолчанию это прямая от 0 до 1; значения могут быть ниже 0 и выше 1. При сохранении HLSL-пресета настроенная кривая сохраняется.
У эффекта может быть поле градиента. Нажми на полосу, чтобы настроить цвета, прозрачность и интерполяцию, включая HDR-цвета. Новый градиент начинается с чёрного и заканчивается белым; изменения сразу видны в эффекте. Ключи сохраняются в документе, но пока не попадают в экспортируемый HLSL-пресет: его новый экземпляр начнёт с чёрно-белого градиента.
Или перетащи .hlsl эффекта WhimTex из Project на строку в Layers. Перетаскивание в превью
или пустую область списка создаёт Shader Processor наверху композиции.
HLSL-пресеты кистей и файлы без маркировки эффекта не принимаются.
Если в пресете ошибка кода или параметров, при выборе появится сообщение в Console, а слой останется без изменений.
У каждого добавленного эффекта свои настройки. Встроенный Color → Gain меняет яркость и оттенок; Transform → UV Transform перемещает входное изображение: рамка задаёт видимую область, а всё за её пределами становится прозрачным, поэтому сдвиг обрезает картинку по рамке. У эффектов искажения такого обреза нет. Добавленные в проект эффекты появляются в каталоге автоматически — настраивать папку пресетов не нужно.
+ Reference позволяет выбрать ассет Shader FX с общими настройками для всех мест использования;
⋮ → Embed Copy в заголовке эффекта создаёт независимую копию ассета в документе, не меняя внешний файл. В этом же меню находятся Move Up, Move Down и Remove.
Проектные HLSL-эффекты получают изменения кода из исходного .hlsl-файла.
Чтобы редактировать код независимо внутри документа, нажми Embed Copy в разделе Code. Параметры доступны сразу под заголовком; в Code находятся редактор, Apply, Save Preset… и вложенная справка Shader inputs. Диагностика появляется только при наличии сообщений.
Если эффектов несколько, их порядок влияет на результат: стрелки ↑ и ↓ на строке эффекта применяют его раньше или позже остальных.
HSV-коррекция
Color → HSV меняет оттенок, насыщенность и яркость. Hue сдвигает оттенок в градусах; Saturation и Value — множители: 1 ничего не меняет, 0 убирает насыщенность или делает изображение чёрным. Amount смешивает коррекцию с исходником. Серые пиксели остаются серыми при изменении оттенка и насыщенности. Альфа сохраняется, HDR-яркость поддерживается. При коррекции отрицательные RGB-каналы считаются нулевыми; нейтральные настройки и Amount 0 оставляют исходник без изменений.
Карта градиента
Color → Gradient Map перекрашивает тени, полутона и светлые участки цветами градиента. Нажми Gradient, чтобы выбрать цвета; Amount смешивает результат с исходным изображением, а Reverse меняет направление. Яркость вне диапазона 0..1 получает цвет соответствующего края. Исходная прозрачность сохраняется; альфа градиента не используется.
Пикселизация с дизерингом
Pixel Art → Pixelate заменяет каждый блок размером Pixel Size пикселей холста одним значением. Average усредняет сетку 4×4 внутри блока вместо выборки из центра, поэтому тонкие детали не пропадают. Levels задаёт, сколько значений остаётся в каждом канале, а Gamma смещает ступени между тенями и светами. Dither выбирает узор, который распределяет ошибку между ними: Bayer2, Bayer4 и Bayer8 дают классический упорядоченный рисунок, Interleaved — нерегулярный шум, Checker — шахматную сетку из двух тонов, Halftone — растровую точку, Hash — стабильный шум без видимой сетки. Узор считается по блокам, поэтому остаётся виден после пикселизации. Amount ослабляет узор вплоть до обычного округления. One Bit сводит результат к Low Color и High Color по яркости вместо квантования каждого канала. Прозрачность сохраняется. Тот же список узоров доступен попиксельно в Color → Posterize.
Освещение и тиснение
- Normal Map → Lighting освещает поверхность по RGB-карте нормалей. Источник Normals по умолчанию — Self. Задай Light Direction манипулятором, затем настрой Base Color, цвета света и тени, Intensity и Ambient. Для стандартного выхода Normal Map оставь Packed Color включённым, для Linear Data — выключи. Flip Y меняет направление зелёной оси. Платформенные упакованные форматы normal map не поддерживаются.
- Lighting → Bevel Emboss вычисляет нормали из Height Map (Self или другой слой). Height Channel выбирает яркость, R, G, B или Alpha; Profile задаёт профиль, Depth — выпуклость или углубление, Smoothing — радиус выборки в пикселях документа. Для SDF ширину скоса задают видимый градиент и диапазоны расстояний.
В обоих FX альфа Base Color плавно смешивает прозрачное освещение (0) с заполненной освещённой поверхностью (1). RGB задаёт цвет поверхности, Ambient проявляется вместе с заливкой. Output выбирает Both, Highlight Only или Shadow Only для прозрачной составляющей; при альфе Base Color = 1 он не влияет на результат. Альфа Light Color/Shadow Color задаёт силу этой составляющей. Общую непрозрачность и смешивание задавай у слоя. По умолчанию альфа Base Color у обоих FX равна 0. Для обновления старой встроенной копии повторно добавь пресет.
Нормализация карты нормалей
Normal Map → Normalize восстанавливает единичную длину нормалей, сохраняя альфу.
Используй его после обработки RGB-карты нормалей, если длина её векторов изменилась.
Нейтральная нормаль (0.5, 0.5, 1) остаётся прежней; неопределённое направление заменяется нейтральным.
Оставь Packed Color включённым для стандартного кодирования слоя Normal Map; для Linear Data выключи.
Этот переключатель учитывает цветовое кодирование, но не распаковывает платформенные форматы карт нормалей.
Сохранить свой пресет
В редакторе кода эффекта нажми Save HLSL Preset…. Создастся .hlsl-файл,
в котором текущие значения параметров станут значениями по умолчанию, включая цвета и Transform 2D.
Имя файла станет именем пресета. Сохранять можно в подпапку ShaderFX пользовательской
библиотеки или любую папку внутри Assets проекта. При перезаписи остаётся копия .bak.
Общий путь задаётся в User Settings → Presets → Presets Folder: кисти лежат в Brushes, эффекты — в ShaderFX. В ShaderFX и её подпапки можно положить готовые HLSL-пресеты; при следующем открытии + Preset они появятся в разделе User. Пресет из пользовательской библиотеки добавляется копией: последующие изменения файла не меняют уже добавленный эффект. Пресет, сохранённый в Assets проекта, ведёт себя как проектный эффект: файл остаётся связанным с уже добавленными эффектами, и его правка изменит их все.
Текстуры в пресете хранятся как ссылки, а не встроенные изображения. Для другого проекта перенеси
также соответствующие ассеты текстур с их .meta-файлами или назначь замену.
Настроить эффект прямо на холсте
У эффекта с параметром Transform 2D есть кнопка Edit on Canvas. Она включает зелёную рамку, которую можно перемещать, масштабировать и поворачивать. Вращение идёт вокруг центра, отдельного Pivot нет. Ctrl/Cmd + угол деформирует рамку, Ctrl/Cmd + грань создаёт скос, а Ctrl/Cmd + Alt + Shift + угол позволяет настроить перспективу парой углов. Alt вместе с Ctrl/Cmd симметрично двигает противоположный угол. Поля Position, Size и Rotation сохраняют деформацию; Reset Transform убирает её. Повторное нажатие кнопки или выбор другого инструмента завершает этот режим. Escape отменяет текущее перетаскивание.
Рамка меняет эффект, а не трансформ слоя. Её назначение зависит от эффекта: расположение изображения, масштаб узора или область воздействия. Сама по себе рамка не обрезает результат как маска, но у UV Transform за её пределами пикселей нет.
Пресеты искажения
Выбери FX → + Preset → Distortion → Spherize или Twirl.
- Spherize / Strength: положительное значение раздувает центр, отрицательное — стягивает. Ноль оставляет изображение без изменений.
- Twirl / Angle: скручивание вокруг центра; знак меняет направление. Угол задан в градусах на локальном радиусе 1 и растёт с расстоянием.
- Area / Edit on Canvas: перемещай, масштабируй и поворачивай зелёную рамку координат. Растяни её, чтобы сделать искажение эллиптическим.
У эффектов искажения — Spherize, Twirl и Polar Coordinates — нет маски или затухания у края рамки: искажение продолжается и за ней. При сильном значении в кадр попадают области за границей входного изображения — там повторяется его край. RGB и альфа искажаются вместе.
Полярные координаты
В Distortion → Polar Coordinates есть два эффекта:
- To Polar сворачивает полосу в круг: горизонталь идёт вокруг центра, вертикаль — от центра наружу.
- From Polar разворачивает круг в полосу: слева направо идёт полный оборот, снизу вверх — расстояние от центра.
Area / Edit on Canvas задаёт положение и форму круга: получившегося у To Polar или исходного у From Polar. Angle Offset сдвигает начало оборота в градусах; при нуле оно справа от центра, обход — против часовой стрелки. Radial Offset смещает начало радиуса: положительное значение у To Polar отодвигает рисунок от центра, а у From Polar начинает выборку дальше от центра. Единица соответствует расстоянию от центра до края рамки по её осям.
Радиус не ограничивается рамкой, плавного затухания нет. Чтобы на круге не было видимого шва, левый и правый края исходной полосы должны совпадать. В самом центре вся ширина полосы сходится в одну точку, поэтому обратное преобразование не восстановит там детали.
Обработать слой или изображение под ним?
Shader FX принадлежит одному слою и меняет его изображение.
Shader Processor — отдельный слой, который обрабатывает собранную картинку ниже себя. Помести его над теми слоями, которые нужно изменить. При наложении Normal уменьшай Opacity, чтобы смешать эффект с исходником; скрой Processor для сравнения до и после.
В группе Pass Through Processor может затронуть и фон под группой. Используй изолированную группу, если эффект должен остаться только внутри неё.
В отличие от Post FX превью, оба варианта попадают в сохранённое изображение.
Создать свой эффект
Если у тебя есть шейдерный код, нажми + Shader FX, вставь его в редактор и выбери Apply. Код и настройки останутся внутри документа — отдельный файл не нужен. При ошибке в коде останется видимым предыдущий рабочий вариант.
В HLSL-эффектах и кистях доступна встроенная библиотека шумов для зерна, органических масок и искажений. См. функции шума и пример.
Написание эффектов — необязательная возможность. Справочник по шейдерам предназначен для создания кода и общих библиотек.
