Граф стиля

Каждый параметр шага Стиль — это ручка на проходе: затенение, линии, ребра меша, очистка, цвета, в которых выходит лист. Шаг «Стиль» и есть этот граф: проходы в виде блоков со связями между ними, каждый показывает создаваемое изображение и несет свои параметры, так что вы видите обработку, а не только ее результат. Проходы можно переставить, пропустить один через маску или смешать два.

Цепочка изображений от цветов модели до готового листа и есть объяснение конвейера. Кнопка с глазом выключает их на медленном компьютере.

Работать на холсте не обязательно: выбор узла показывает те же параметры в Инспекторе справа, так что ползунок всегда под рукой. Если узел не выбран, Инспектор показывает узел «Палитра», который несет цвета.

Стили. У проекта может быть сколько угодно Стилей, каждый под своим именем и со своим графом стиля, и ни один из них не принадлежит камере. На холсте показан тот, что выбран в списке «Стили» или в списке «Стиль» заголовка окна, и он рисует камеру и действие из заголовка. «Новый Стиль» под списком создает копию показанного, названную по нему (Pixel Art 2). Контекстное меню строки переименовывает его, «Дублировать» создает копию, удаление («Удалить NAME…», с подтверждением; первый тоже можно удалить, если остается другой), «Сохранить набор…» («Сохранить Стиль как набор») записывает его как набор с графом и палитрой внутри, а «Использовать набор…» («Использовать набор Стиля») делает Стиль, сохраненный из другого проекта, частью этого. Перетаскивайте строки вверх и вниз, чтобы изменить порядок. Сохраненные в библиотеке конвейеров, они появляются в библиотеке узлов в разделе «Мои конвейеры»; собственные конвейеры проекта — в разделе «Конвейеры», рядом с узлом «Пикселизация».

У каждого графа своя библиотека узлов слева, когда панель достаточно широкая: у графов сцены, действия, стиля и ассета одинаково. В ней перечислено все, что может содержать граф, — сначала входы и выходы, затем остальное по группам, со строкой о том, что делает каждый; введите текст в Найти, чтобы сузить список. Нажмите на узел, чтобы добавить его туда, куда его ставит граф, уже подключенным, — или перетащите его на холст, чтобы поставить там, где отпустите.

Проект, который ни разу не меняет узел, по-прежнему не хранит граф вовсе и рендерит точно так же, как раньше.

Граф, с которого вы начинаете

Это собственный конвейер Pixor, собранный из узлов:

Граф стиля, с которого вы начинаете: «Камера» в «Послойный рендер», его слои в «Свет и тень» и «Линейный рисунок», объединенные, очищенные и сведенные к палитре перед «Выходом»

Слева направо в порядке выполнения работы, чтобы связи шли вперед и пересекались как можно меньше.

  • Камера — это начало графа: камера, для которой рисует этот Стиль. Каждая камера, указывающая на Стиль, запускает граф один раз — со своей стороны.

  • Послойный рендер берет камеру: то, что она отрендерила из действия в этом кадре, до любого пиксельного шага, с каждым из восьми слоев на отдельном выходе — Альбедо, Нормали, Глубина, Часть, материал, Охват, Ключевой свет, Тень. Затенение читает Нормали и Тень, линии — Глубина, Нормали и Часть. Это группа атомов: откройте ее — и это рамка узла Рендер (один послойный кадр) и восьми узлов Слой, каждый из которых берет из кадра выбранный на нем слой. Связи показывают, что что читает, и они настоящие: подключите Поле шума к Тень у «Света и тени» — и тенью станет этот шум; без подключения проход читает сам рендер камеры.

  • Палитра — место, где выбираются цвета кадра: сколько базовых цветов и полос света, дизеринг, собственная палитра, сдвиг оттенка. Выход ничего не передает: это и есть кадр.

  • Свет и тень превращает освещение в ступень на цветовой рампе каждого пикселя. Это группа атомов, которые есть и у вас, по порядку: Полосы света (полоса ключевого света, в которую попадает каждый пиксель, с дизерингом на границах и удержанием между кадрами у границы), Свет мира (лампы, линии волн, тени облаков, лучи света, прибрежная пена), Блики, Свечение, Сдвиги рампы (и цикл цвета), затем Цвета затенения, который превращает затенение в цвета. Связь между ними несет затенение: рампу каждого пикселя и его ступень на ней.

  • Линии находит силуэт, внутренние линии и сгибы. Это тоже группа: Силуэт, Края (внутренние линии, сгибы, выпуклые складки), Чистка линий (короткие фрагменты отбрасываются, углы и дубли удаляются) и Цвета линий, со связью lines между ними.

Параметры группы — это параметры атомов внутри нее. Задание параметра на узле или из скрипта задает его на каждом атоме внутри, у которого он есть, — pxr graph set my.pixor --node light-and-shade --set dither=0.5, --node line-work --set min_inner_line=3, — так что группа, которую вы сами собрали из атомов, настраивается так же, как встроенные. Дважды щелкните по группе (не по заголовку) или нажмите стрелку в ее заголовке, чтобы открыть ее и посмотреть или переподключить, из чего она состоит.

  • «Каркас» тоже появляется, когда включен облик wireframe, и идет в третий вход «Объединить». Это группа из двух атомов: «Пути связей» (где ребра меша пересекают кадр и пропускается ли ребро за поверхностью, рисуется пунктиром или темнее), затем «Цвета связей».
  • Объединить накладывает их друг на друга, решает, что окажется под связями, и истончает линии относительно друг друга.
  • Очистка удаляет одиночные пиксели и смягчает углы линий. Это группа из двух атомов: Одиночные пиксели (участки одного цвета, слишком маленькие, чтобы их оставить, и сколько проходов их ищут), затем Сгладить углы (какие углы линий смягчаются на ступень вниз по рампе).
  • «Выход» — то, что создает граф: спрайт этой камеры в этот момент действия, который узлы «Спрайты» графа ассета затем нарезают на списки спрайтов. У него нет параметров; цвета задаются в «Палитре» перед ним.

Эти узлы вызывают тот же самый код, что и конвейер, поэтому граф, с которого вы начинаете, дает ровно те же пиксели, что и раньше. Собственные эталонные тесты Pixor каждый раз рендерятся обоими способами и сравниваются.

Работа в нем

Каждый граф работает одинаково — графы сцены, действия, стиля и ассета: та же панель, то же контекстное меню, те же клавиши и жесты. Эта таблица охватывает их все, во всех четырех. Каждая правка — один шаг истории (Ctrl+Z отменяет ее), включая перемещение узла; клавиши работают, пока указатель над графом.

Делайте Куда
Перетаскивайте средней кнопкой (или с Alt левой) перемещать вид
Прокрутка (или щипок) масштаб относительно указателя, от четверти до двойного размера, одно деление — тот же шаг, что в 3D-виде и 2D-виде; Кадр и первый взгляд на граф вписывают его
Кадр или Home показать все узлы на экране
Щелкните заголовок узла выбрать его: его параметры появляются и в Инспекторе, а в центре показывается то, что создает он; где узлы лежат друг на друге — верхний
Щелкните узел с Shift выбрать его дополнительно или снять выбор
Перетаскивайте фон рамка: выбираются все узлы, которых она касается (Shift сохраняет уже выбранные)
Перетащите узел переместить его и все выбранные вместе с ним узлы
+ или правый клик по холсту › Добавить узел список библиотеки узлов по группам: выбранное добавляется; из контекстного меню — туда, где вы щелкнули. Использовать набор… (Добавить набор как группу) вверху вставляет набор как одну группу
Ряд библиотеки слева щелкните, чтобы добавить его туда, куда его ставит граф, уже соединенным; перетащите на холст, чтобы поставить туда, где отпустите
Протяните от круглой точки справа на узле к точке слева на другом соединить их; пока вы тянете, каждая точка, к которой подходит связь, обводится кружком
Отпустите связь над пустым холстом меню подходящих узлов: печатайте, чтобы сузить список, Enter берет первый
Оттащите точку входа отсоединить ее; отпустите на другом входе, чтобы перенести связь туда
Щелкните связь, затем Delete разрезать ее; у связи под указателем (или выбранной) посередине тоже есть ×, разрезающий ее одним щелчком
F2 или двойной щелчок по заголовку узла переименовать его: собственное имя на заголовке (у группы — ее имя); если пусто, он снова называется тем, что он есть
Ctrl+D дублировать выбранные узлы ниже них, с теми же связями и читающими то же, что и они
Ctrl+C, Ctrl+V копировать выбранные узлы и вставить их под указателем — в любой граф того же вида: другой Стиль, другое действие, другой конвейер ассета, внутрь группы. Узлы графа одного вида не попадают в граф другого, и строка состояния об этом сообщает
− («Удалить выбранный узел») или Delete удалить выбранный узел; то, что читало его, читает то, что читал он, так что цепочка остается цепочкой
Группа или Ctrl+G выбранные узлы (и выделенный) становятся одной открытой группой
Стрелка справа от заголовка группы или двойной щелчок по группе вне ее заголовка открыть ее на месте или свернуть обратно
Сохранить набор… выбранная группа как набор или — если группа не выбрана — весь граф (заголовок диалога говорит, что именно)
Упорядочить заново расставить все узлы слева направо в порядке выполнения работы
Заметка поставить заметку вокруг выбранного узла или в видимой области
Глаз или правый щелчок › Изображения узлов показать или скрыть изображение, которое создает каждый узел
Щелкните холст правой кнопкой все перечисленное выше, с их клавишами, а также то, что есть только у одного графа: у графа стиля — Показывать только то, что задает пресет, Показывать параметры каждого узла и Вернуть граф пресета; у графа сцены — Вернуть одну копию; у графа ассета — Вернуть один лист

Что показывает изображение узла — граф за графом: в графе стиля — пиксели, которые он создает; в графе сцены — объекты, которые он передает дальше, вид сверху; в графе действия — то, что делает выход узла за один его проход (ниже); в графе ассета — кадры, которые передает список, или лист, или файл, который он записывает.

В графе действия у каждого вида узла изображение, которое говорит о нем больше всего:

Узел Его изображение
Клип, Ключевые кадры, Процедура, Действие модель в четыре равноотстоящих момента того, что она играет, слева направо — цикл на протяжении одного оборота, последний момент перед тем, как он начнется снова, — все через одну камеру, вмещающую каждую позу, с ракурса показанной камеры
Вращение, Покачивание, Качание, Пульсация, Скольжение, Волна, Шум, Рампа, Время сцены кривая каждого числа, которое действительно меняется, от наименьшего до наибольшего значения: у «Вращения» — рампа, у «Покачивания» — волна; числа, меняющиеся одинаково, идут одной линией (три размера «Пульсации»)
Фильтры, Применить к, Выход, группы в виде того, что они передают дальше: позы, когда это двигает больше трех чисел (клип, клип, слитый с вращением, удержание на двойках), кривая, когда это одно движение («Ступень» на «Вращении» рисует свою лесенку)

Кривые окрашены по типу — положения синие, повороты янтарные, размеры зеленые, все прочее розовое, — показываются не более шести, с наибольшим размахом; если навести указатель на изображение, оно назовет каждую линию и скажет, сколько их еще. Позы заменяются кривыми, когда движется не часть модели (камера, свет). Узел, который ничего не меняет — Constant, отсутствующий клип, — показывает Без движения вместо изображения. Линия поперек кривой или полоса под позой следует за временем на таймлайне во время проигрывания.

Изображения рисует собственный программный растеризатор Pixor, в малом размере, в отдельном потоке, начиная с выбранного узла: граф никогда их не ждет. Узел сохраняет прежнее изображение, пока не готово следующее, поэтому ничего не мигает; правка, не меняющая того, что узел передает дальше, не перерисовывает его. Узел занимает около 25 мс с рыцарем и 40 мс с тестовым гуманоидом FBX, так что двадцать узлов перерисовываются в пределах секунды после правки.

Заметки — это рамки позади узлов с вашим текстом вдоль верхнего края: для чего эта часть графа, что попробовать дальше. Печатайте прямо в ней. Ручка в левом верхнем углу перемещает ее вместе со всеми узлами внутри, поэтому заметка не только объясняет часть большого графа, но и держит ее вместе; угол справа внизу меняет ее размер, а минус удаляет ее (узлы остаются). Заметка не меняет ни одного пикселя.

Пока перетаскивается ползунок в узле, сначала заново создается изображение этого узла, затем выбранного узла, затем остальных по порядку — так изменение сразу видно там, куда вы смотрите.

У каждого типа связи свой цвет, поэтому что куда подходит, видно без чтения: слой цветов палитры, маска, число на пиксель, нормаль, рампа, палитра, камера, рендер, затенение, линии, пути проводов и значения (вкл/выкл, число, слова). Вход, на котором ничего нет, хотя что-то нужно, обведен красным, а строка внизу сообщает, что не так. Связь неподходящего типа и связь, замыкающая граф в круг, отклоняются, когда вы отпускаете кнопку.

Что такое узлы

Библиотека и меню Добавить узел перечисляют их в этих группах:

Группа Узлы
Входы Камера, Рендер, Слой (альбедо, нормали, глубина, ID части, ID материала, покрытие, ключевой свет или тень рендера), Изображение, Заполняющий свет, Движение, Дизеринг поверхности, Фаза цикла, Рампа цвета, Позиция на рампе, каналы материала Металличность, Шероховатость, Свечение, Затенение, Прозрачность и Крайние пиксели (где собственные ребра меша пересекают кадр поверх всего)
Проходы «Затенение», «Линии», «Ребра меша», «Объединить», «Очистка», «В палитру» — каждый — целый проход в одном блоке
Затенение Полосы света, Свет мира, Блики, Свечение, Сдвиги рампы, Цвета затенения и рисованная отделка: Фигуры, Без полос, Отблеск, Смягчить полосы, Штриховка
Линии Силуэт, Ребра, Чистые линии, Цвета линий, Цветные края, Толщина линий
Каркас Пути связей, Цвета связей
Очистка Одиночные пиксели, Сглаживать углы, Чистый силуэт
Цвет «Палитра», «Ближайший цвет» (каждый пиксель — в ближайший к нему цвет палитры, без учета рамп), «Ступени рампы», «Ступени по маске», «Сплющить», «Дизеринг палитры», «Карта рампы», «Цвета тайлов», «Субпиксельное движение»
Маски Порог, По части, По материалу, По направлению, Шум, Узор, Сплошные пиксели, Не, И, Или
Смешать Выбрать по маске, Смесь дизеринга, Слой поверх
Математика Число, Сложение, Вычесть, Умножение, Деление, Меньше, Крупнее, Без знака, Дробная часть, Целое число, Удержание между, Переназначение, Смешать, Ступень на, Плавная ступень, Совпадение, Длина, Как число, Поле шума (шум, по порогу которого работает маска «Шум», в виде числа)
Пробел «Смещение», «Размытие», «Склон», «Рост», «Сжать», «Впадины» — каждый сообщает, как далеко вокруг пикселя он смотрит, и именно это сохраняет швы тайлов точными
Значения см. Каждое свойство — это вход
Группы Вход и Выход — порты внутри группы
Выходы «Выход», CRT (изображение для просмотра, никогда не спрайт)

Над ними библиотека перечисляет «Конвейеры» (Стили проекта и «Пикселизацию»), «Мои конвейеры» и «Мои узлы».

Изображение — это ваш собственный слой: фактура бумаги, узор, нарисованное небо или логотип, каждый пиксель — в ближайший к изображению цвет палитры, на собственных пикселях спрайта от места, куда его поставили, или замощенный на весь кадр. Выбрать по маске кладет его туда, куда нужно, Слой поверх кладет его сверху. Изображение читается один раз и хранится в узле, так что сохраненный облик или набор несет его с собой. Из скрипта:

pxr graph add my.pixor --node picture --set file=logo.png --set tile=false   # node 8 on a new project
pxr graph add my.pixor --node layer-over --in under=4 --in over=8             # node 9: the logo over the palette's frame
pxr graph wire my.pixor --from 9 --to 5 --slot layer                          # into the Output

Смешивание никогда не создает новый цвет. Pixor работает в пространстве индексов палитры, поэтому смесь выбирает один пиксель или другой; она никогда не смешивает два в третий, которого нет в палитре. Смесь дизеринга укладывает A и B упорядоченным узором — так смешивает цвета пиксель-художник.

Рисованная отделка

Некоторые узлы делают то, что пиксель-художник делает вручную, когда затенение уже есть. В исходном графе их нет; добавьте нужные. Узлы, работающие с shading, ставятся между Сдвиги рампы и Цвета затенения (откройте группу Свет и тень) в порядке ниже; работающие с lines — между Ребра и Цвета линий (откройте Линейный рисунок). Каждый узор, который они укладывают, закреплен на поверхности, поэтому движется с моделью, а не ползает по ней, и ничего из созданного ими не выходит за палитру — кроме CRT, намеренно. Узлы, решающие по тому, что вокруг пикселя или где он на поверхности (Фигуры, Отблеск, Штриховка, Без полос), там, где поверхность не сдвинулась с предыдущего кадра, сохраняют прежнее решение, поэтому не добавляют мерцания; зацикленный клип через граф с таким узлом сначала проходит один круг, чтобы его первый кадр следовал за последним.

Узел Соединяйте Что делает Параметры
Фигуры затенение → затенение Формы света и тени, очищенные как нарисованные: форма одной полосы меньше Наименьший получает полосу, которой больше всего вокруг нее, затем каждый пиксель получает полосу, к которой относится большинство пикселей в пределах Сгладить от него, — это убирает «языки» такой ширины и сглаживает границы. Друг для друга учитываются только пиксели одной части и одной рампы, а полосе нужно большинство окружения пикселя, поэтому пятно собственного цвета остается для Одиночные пиксели. Пиксель, чья поверхность не сдвинулась и чей свет не изменился, сохраняет полосу, полученную в прошлом кадре. Наименьший, Сгладить
Без полос затенение (+ линии) → затенение Граница полосы, идущая вдоль силуэта, края части или линии на одном расстоянии от него — эффект «подушки», — смещается на пиксель отрезками, как это делает рука: на половине, по два пикселя из каждых четырех, отсчитанных по поверхности, чтобы ступени двигались вместе с ней. В пределах (пикселей от края), Сколько
Отблеск затенение (+ маска, + свет) → затенение Один намеренный блик на каждой части (части рендера, где бы она ни была в кадре) там, где задана маска, — в ее самом ярком пикселе верхней полосы; если два одинаково ярки, он остается там, где был в предыдущем кадре. По частям запрашивает больше, каждый не ближе Интервал к остальным. Без подключения свет — ключевой. Размер (1 или 2), По частям, Раздельно, Только отблеск (остальные блики там опускаются до верхней полосы)
Смягчить полосы затенение → затенение Углы лесенки между двумя полосами смягчены: между полосами, которые прыгают на две ступени и больше (падающие тени, лампы, блики), угол получает промежуточную ступень; между соседними полосами при включенном Дизеринг углы на одном цвете шахматки, наложенной на поверхность, получают другую полосу — промежуточный дизеринг в пределах палитры, который очистка не трогает. Обе стороны, Дизеринг
Штриховка затенение → слой Цвета затенения с диагональными линиями, перекрестной штриховкой или точками поверх каждой полосы ниже верхней — тем гуще, чем темнее полоса, — ступенью ниже или цветом линии. Заштрихованная полоса — это узор, как и зона дизеринга: очистка не трогает пиксели между штрихами. Заменяет Цвета затенения. Узор, Цветом линии
Впадины (normals, depth) → число Насколько поверхность вогнута внутрь: больше 0 в сгибе, меньше 0 на гребне. Примените к нему Порог и подключите к Ступени по маске со значением −1, чтобы сгибы стали на ступень темнее. Без связи он читает рендер. Радиус, Скачок глубины
Цветные края (lines, albedo) → lines Линия там, где окрашенный цвет меняется внутри одной части, на более темной стороне, чтобы она была шириной в один пиксель, окрашенная как складки (поэтому задайте в «Цвета линий» цвет складок). Ставьте ее перед «Чистые линии», который избавляет ее линии от углов и удвоений. Без подключения она читает собственные цвета модели. Контраст
Толщина линий линии → линии Силуэт толщиной в два пикселя на стороне, отвернутой от света, и Рамка — кольца обводки вокруг него, цветом внешней линии или, с Свой цвет, цветом Цвет (ближайшим в палитре). Там, где внутренняя линия встречается с силуэтом, она остается в один пиксель. Теневая сторона, Рамка, Свой цвет, Цвет
Чистый силуэт слой → слой Однопиксельные шипы срезаются с обводки (кроме конца тонкой части), однопиксельные выемки и дыры заполняются окружающим цветом — но не цветом обводки, если она от этого станет толщиной в два пикселя. Шипы, Выемки
Дизеринг палитры слой (+ свет) → слой Собственный цвет поверхности каждого пикселя, освещенный подключенным коэффициентом (1 — без изменений), в виде пары цветов палитры, смесь которых ближе всего к нему (дизеринг Илиуомы), уложенной по порогу поверхности. Линии остаются; остальное — дизеринг, который очистка не трогает. Разброс пар: чем выше, тем ближе пары
Карта рампы число (+ рампа) → слой Рампа художника, прочитанная из полосы изображения: число от 0 до 1 выбирает позицию на ней, от темного к светлому. Полоса из нескольких строк дает каждой рампе свою строку. Без изображения — собственные полосы цвета. Подключите к нему «Ключевой свет» через «Переназначение». Файл
Цвета тайлов слой → слой Кадр разбит на тайлы от левого верхнего угла, в каждом ограниченное число цветов — так NES раскладывает тайлы 8 × 8 по 3: самые частые цвета остаются (пиксель, которому противоречат три соседа, засчитывается им, чтобы краевой пиксель растеризатора не менял выбор), остальные берут ближайший из них, а пиксель, оставшийся один в своем цвете, берет цвет соседей по тайлу. Тайл, Цвета
Субпиксельное движение слой (+ движение) → слой Часть, которая сдвигается меньше чем на «Неподвижно ниже» пикселей за кадр (вдох, покачивание), показывает это в своих краевых пикселях: частично покрытый пиксель опускается на ступень по рампе, а пустой пиксель, в который она вползает, принимает этот цвет, когда покрыт на четверть. В любом месте графа: край берется из рендера, поэтому и после «Объединить» это работает, а обводка остается как есть (меняются только краевые пиксели внутри нее). Неподвижно ниже, Шаги
CRT слой → слой Его изображение — кадр на экране: строки развертки, теневая маска или сетка ЖК-дисплея, несколько экранных пикселей на пиксель. Это изображение вне палитры, поэтому оно только для просмотра и стоп-кадров: слой идет дальше к спрайту без изменений, и ни один лист или экспорт не несет экран. Выберите его, и 2D-вид покажет экран, сначала с целыми шагами; pxr stages MODEL --style KIT --node crt записывает его как crt.still.png. Ставьте его последним, перед Выход. Экран, Размер

Из скрипта, как любой узел:

pxr graph add my.pixor --node tidy-silhouette --in layer=3   # node 8, after Cleanup
pxr graph wire my.pixor --from 8 --to 4 --slot layer         # and into the palette

Отблеск и другие узлы, принимающие shading, ставятся внутрь группы Свет и тень, где находится затенение (вне ее группа выдает готовый слой): откройте группу в приложении и добавьте их туда или сохраните группу как набор, отредактируйте и верните через pxr graph swap --kit.

У каждого есть эталонный случай (tests/golden/cases.txt, hand-*): граф, с которого начинается облик, и добавленный узел — в виде набора графа стиля, который читает pxr render --style.

Каждое свойство — это вход

Параметры узла — это его свойства: строки внутри узла, у каждой порт слева. Задайте значение на узле или подключите к нему значение — строка станет серой и покажет то, что приходит по связи. Значения — отдельные узлы в разделе «Значения» библиотеки: «Числовое значение», «Вкл./Выкл.», «Угол», «Слова» и математика над ними («Сложить значения», «Вычесть значения», «Умножить значения», «Деление значений», «Меньшее значение», «Большее значение», «Выше», «Наоборот», «Оба вкл.», «Любой включен», «Выбор значения»), чьи операнды — тоже свойства. Один узел «Вкл./Выкл.», подключенный к трем узлам, включает или выключает все три сразу.

Свойства собраны в именованные группы (От и Куда у Remap, Цвета и Поиск у Edges); щелкните имя группы, чтобы свернуть ее. Связь, подключенная к свернутому свойству, приходит на имя группы.

Свойства группы — это ее входы значений. Сгруппируйте узлы, свойства которых питаются значениями, и каждое значение станет входом группы, названным по свойству, в которое оно идет, и указанным после остальных входов группы: строка на блоке группы, которую задают там (это задает каждое свойство внутри, подключенное к ней) или подключают снаружи.

Группы, которые задают разделы Стиля, — «Свет и тень», «Линейный рисунок», «Каркас», «Очистка», — задаются как этими разделами, так и свойствами атомов внутри них; «Палитра» — это цвета кадра, которые задает раздел «Цвета».

Один раз на материал, один раз на часть

Узел выполняется один раз для всего кадра, если не указано иное. Выберите узел и задайте в Инспекторе «Выполнение»: «Один раз на материал» или «Один раз на часть» — и он выполнится для каждого из них, каждый раз видя только его, будто остальной кадр пуст; затем фрагменты собираются обратно попиксельно. Тогда в его заголовке написано каждый материал или каждая часть.

Именно это не дает размытию, росту, обводке или очистке перекидываться с одной части на соседнюю: узел Линии, выполняемый по частям, рисует линию вокруг каждой части, тогда как тот же узел, выполненный один раз, рисует одну линию вокруг всей модели. Группа, настроенная так, выполняет так все внутри себя. Узел, выполняемый по частям, не смотрит на предыдущий кадр, поэтому у него нет гистерезиса мерцания.

Тот же параметр в командной строке или в файле облика — это scope узла: pxr graph set my.pixor --which style --node cleanup --set scope=object (frame, material или object).

Изображение узла как отдельный слой

Спрайт — это то, что получает выходной узел, но записать можно и изображение любого узла. Выберите узел и введите имя в поле Дополнительный выход в Инспекторе: его заголовок тогда показывает layer и имя, и каждый экспорт несет его рядом с lines и flat — отдельный лист с этим именем при экспорте layers (hero_rim.png) и скрытый слой в .aseprite, который повторное запекание заменяет, как и другие слои Pixor. Контровой свет, маска для шейдера, линии одной части — что угодно, что создает узел. Очистите имя — и он больше не выход. Нельзя взять имя, которое уже есть у листа (final, lines, flat, normal, depth, emission и подобные), или имя другого дополнительного выхода.

Из скрипта: pxr graph extra my.pixor --node line-work --name rim, а --drop — чтобы убрать его.

Пример: выветренная краска

Сгладьте затенение, затем выбирайте между затененной и плоской версией с помощью маски шума — и поверхность будет читаться как краска, местами стертая пятнами:

 Light and shade --+---------------+
                   |               +--> Choose --> Combine --> ...
                   +--> Flatten ---+
 Noise ----------------------------+
  1. Добавьте «Сплющить» и подключите к нему «Свет и тень».
  2. Добавьте «Шум»; задайте его размер около 5 пикселей.
  3. Добавьте «Выбрать по маске»: «Свет и тень» — в A, «Сплющить» — в B, «Шум» — в маску.
  4. Оттащите связь от входа shading узла Объединить и подключите туда Выбрать по маске.

Группы: одна коробка, которую можно открыть

Группа — это граф, используемый как один узел. Pixor поставляет «Пикселизацию» — весь описанный выше конвейер в одном блоке (в библиотеке в разделе «Конвейеры») — и группы, из которых состоит исходный граф: «Послойный рендер», «Свет и тень», «Линейный рисунок», «Каркас» и «Очистка»; их названия отличаются от проходов «Затенение» и «Линии», которые делают в одном блоке то же, что группы делают по шагам. Ни одна из них не является привилегированной встроенной функцией.

Группа открывается на месте, в любом графе. Дважды щелкните по ней (не по заголовку) или нажмите стрелку справа в ее заголовке (стрелка есть только у группы): сама группа становится рамкой графа, из которого она состоит. Группа внутри открытой группы открывается так же, внутри ее рамки. Ее заголовок идет поверху, параметры остаются слева, а там, где было ее изображение, раскладываются узлы внутри — в том же графе. Связи пересекают рамку только по двум ее сторонам. То, что питает группу, приходит на ее входы слева и выходит из якоря справа от каждого, где была граница закрытого блока, к узлам внутри, которые это читают. Каждый выход — якорь на правой границе рамки на уровне того, что его создает внутри, и все, что читает этот выход, подключается оттуда. Ничто внутри не выходит за рамку, а узлы после нее раздвигаются, освобождая место, — только на экране: граф помнит, где они были. Каждый узел внутри редактируется как любой другой: параметры, изображение, связи, имя; узел, вставленный или отпущенный внутри рамки, попадает в группу. Стрелка снова сворачивает ее в блок с изображением. Какие группы открыты — это свойство окна, а не проекта.

Как сделать свою группу. Выберите узлы, которые в нее войдут, — обведите их рамкой или щелкайте с Shift; выбранный узел тоже учитывается, — затем Группа (или Ctrl+G): они станут одним блоком со входом для каждой входящей связи, а то, что остальной граф читал из них, станет его выходом. Группа сразу открывается; F2 дает ей имя. Сохранить набор… на панели сохраняет выбранную группу как ваш собственный набор (Сохранить группу как набор; диалог открывается в папке, которую библиотека показывает в разделе Мои узлы), и библиотека показывает его там в каждом проекте, в графе его вида; если группа не выбрана, сохраняется весь граф (Сохранить граф стиля как набор). Сохранить набор… в каждом графе означает именно это.

Группа переносится как набор, как и любой другой облик, а pxr graph flatten look.pixorkit раскрывает ее в простые узлы, которые она заменяет, поэтому она читается как дифф, а не как черный ящик.

Сохраненный облик — тоже группа. + › Использовать набор… вставляет набор, записанный командой Стиля Сохранить набор… или pxr graph save, в граф на экране одной группой: ее узел «Выход» становится выходом блока — слоем, который вы подключаете, например поверх собственного результата графа через Слой поверх или в Выбрать по маске, чтобы одна часть модели получила другой облик. Дважды щелкните по ней, чтобы увидеть и изменить облик внутри.

Из чего можно строить

Помимо проходов, в библиотеке есть мелкие узлы, из которых пишется облик: входы, математика, пространство, маски, цвет и смешивание — узлы, перечисленные выше.

Поставляемые группы — Свет и тень, Линейный рисунок, Каркас и Очистка — состоят из атомов, каждый из которых делает одну работу с несколькими ручками: полосы света, минимальная длина внутренней линии, собственные ребра модели, одиночные пиксели, найденные по тому, как они соединяются. Целые проходы, которые они заменяют, по-прежнему есть в библиотеке для графа, которому нужен один блок. Любой из них по-прежнему можно заменить своей цепочкой: соедините Ключевой свет с Переназначение, Ступень на и В палитру — и вы написали собственное затенение, или поставьте Крайние пиксели маской узла Выбрать по маске между плоским обликом и обликом на ступень выше — и вы сами нарисовали каркас.

Как поделиться обликом

«Сохранить набор…» и «Использовать набор…» Стиля переносят облик из одного проекта в другой; модель, клипы и экспорт остаются как есть. Набор Стиля переносит и граф, поэтому «все ассеты в моей игре совпадают» распространяется и на облик со связями.

Щелчок правой кнопкой по холсту › Вернуть граф пресета отбрасывает граф и возвращает конвейер Pixor. После этого проект вообще не хранит граф.

У каждого графа одинаковая панель: что он показывает (имя конвейера, путь назад из процедуры), затем + (добавить узел), − (удалить выбранный), Кадр, Упорядочить, Заметка, Группа, Сохранить набор… и глаз, который показывает или скрывает изображения узлов, — и все они работают в каждом графе.

Чего он не делает

  • Никаких узлов-скриптов и GPU-узлов. Каждый узел — фиксированная функция своих входов, поэтому один и тот же проект каждый раз дает одни и те же пиксели — сегодня и через десять лет (на другом компьютере почти всегда: см. FAQ).
  • Узлы никогда не меняются у вас за спиной. Граф запоминает, с какой версией каждого узла он создан, а старое поведение остается в Pixor под старой версией.
  • Это не универсальный редактор изображений. Здесь собственные проходы Pixor, типизированные так, чтобы соединялось только осмысленное. Рисованию, фильтрам и произвольной математике место в графическом редакторе.

Справочник узлов

Все узлы четырех графов: что каждый делает, что принимает и выдает, и каждый параметр с диапазоном и значением по умолчанию.

Граф стиля

КамераРендерСлойИзображениеЗаполняющий светДвижениеДизеринг поверхностиФаза циклаРампа цветаМеталличностьШероховатостьСвечениеЗатенениеПрозрачностьКрайние пикселиЗатенениеПозиция на рампеЛинииПолосы светаСвет мираБликиСвечениеСдвиги рампыЦвета затененияСилуэтРебраЧистые линииОдиночные пикселиПути связейЦвета связейСглаживать углыЦвета линийРебра мешаОбъединитьОчисткаВ палитруПалитраСтупени рампыСтупени по маскеСплющитьПорогПо частиПо материалуПо направлениюШумПоле шумаБлижайший цветУзорСплошные пикселиНеИИлиВыбрать по маскеСмесь дизерингаСлой поверхРисованиеЧислоДобавитьВычестьУмножениеДелениеМеньшеКрупнееБез знакаДробная частьЦелое числоУдержание междуПереназначениеСмешатьСтупень наПлавная ступеньСовпадениеДлинаКак числоСмещениеРазмытиеСклонРостСжатьФигурыБез полосОтблескСмягчить полосыШтриховкаВпадиныЦветные краяТолщина линийЧистый силуэтДизеринг палитрыКарта рампыЦвета тайловСубпиксельное движениеCRTВыходЧисловое значениеВкл./Выкл.УголСловаСложить значенияВычесть значенияУмножить значенияДеление значенийМеньшее значениеБольшее значениеВышеНаоборотОба вкл.Любой включенВыбор значенияПослойный рендерСвет и теньЛинейный рисунок

Граф действия

КлипКлючевые кадрыПроцедураДействиеВремя сценыПостоянныйВолнаШумРампаВращениеПокачиваниеКачаниеПульсацияСкольжениеМатематикаСмешатьСлитьПоследовательностьСдвиг во времениСкоростьОбрезкаПовторРеверсЗапаздываниеШагПределПереименоватьВыбратьЭкземплярыПрименить кВыходЧисловое значениеВкл./Выкл.УголСловаСложить значенияВычесть значенияУмножить значенияДеление значенийМеньшее значениеБольшее значениеВышеНаоборотОба вкл.Любой включенВыбор значения

Граф ассета

СпрайтыФайл изображенияСлитьСлойДиапазон кадровУдержаниеОтразитьТегРасположитьРазмещениеСтопкаНаложениеЛистФайлJSONФайл AsepriteSpriteFrames GodotКарта нормалейКарта глубиныКарта свеченияСлои линий и заливкиПалитраGIF на клипAPNG на клипВидео на каждый клипНабор светаКартридж PICO-8ОтчетСлой тенейВарианты палитрыСлои бумажной куклыСлои параллаксаТекстовый файлАрхив ZIPТайлсетИконкиФайл анимацииJSON тайлсетаTileSet GodotТайлсет TiledЛист двойной сеткиАвтотайлы GameMakerАвтотайлы RPG MakerUnity RuleTileПроект LDtkПалитровые варианты тайловПревью картыЧисловое значениеВкл./Выкл.УголСловаСложить значенияВычесть значенияУмножить значенияДеление значенийМеньшее значениеБольшее значениеВышеНаоборотОба вкл.Любой включенВыбор значения

Граф сцены

ИмпортОбъектКольцоРядСеткаРассеятьСмотреть наРазбросВоспроизвестиСлитьВидно камереРазностьОбъединитьПереместитьОтразитьПодразделитьСмещениеПоле высотФаскаОпустить на землюНа поверхностиНа точкахЗадать фигуруАтрибутВыбратьВыходФигураИзображениеТекстОбъемЛампаЭффектПредметРеквизитПружинаРельефВеточкиЛистваВодаОблакаНебоВетерЛучи светаВремя сутокЧанкиЧисловое значениеВкл./Выкл.УголСловаСложить значенияВычесть значенияУмножить значенияДеление значенийМеньшее значениеБольшее значениеВышеНаоборотОба вкл.Любой включенВыбор значения

То, что описано на этой странице, есть в полной версии; бесплатное демо в браузере ограничено обликом по умолчанию и PNG-листом.

Попробовать в браузере Получить Pixor