Изображения и слова

Два вида содержимого не берутся из 3D-модели: изображения, которые у вас уже есть, и слова. Оба входят в конвейер в самом начале, как части сцены, а не как прорисовка поверх в конце, — так что линии, обводка, затенение окружения, тени и палитра работают с ними без единого нового прохода.

Изображение в сцене

На шаге «Сцена» пункт Изображение › Из файла изображения… меню + панели «Структура» помещает изображение на плоскость: листва-билборд, далекое дерево, вывеска, освещенное окно, нарисованный задник. Это такая же часть, как любая другая, — со строкой на панели «Структура», блоком Transform и собственными параметрами в Инспекторе, и это узел Изображение графа сцены: строка и узел — одно и то же, его параметры тоже на узле, а ряд или кольцо после него его повторяют.

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

Две кнопки делают его четким, и обе используют показанную камеру:

  • «Целые пиксели» подбирает размер так, чтобы один пиксель изображения покрывал целое число пикселей спрайта. Все остальное пересэмплируется.
  • Повернуть к камере наклоняет ее на наклон этой камеры. Камера, смотрящая вниз, укорачивает вертикальную карточку, из-за чего пропадают строки, а буквы превращаются в кашу.

Из командной строки:

pxr project set game.pixor --add-picture bush.png:-1.1,0,-0.3:0.05
pxr project set game.pixor --add-picture bush.png:1,0,0.2:0.035 --mirror
pxr project set game.pixor --add-picture sky.png:0,0,-8:0.2 --layer 0 --unframed

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

pxr project set game.pixor --add-picture bush.png:-0.8,0,1.1 --facing sprite
pxr project set game.pixor --add-text "+12" --text-at 0.25,0.35,0.9 \
  --facing sprite --picture-pixels 2 --font pixor-5

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

pxr project set game.pixor --add-text "OPEN" --text-at 0,0.3,0.45 \
  --text-size 0.03 --facing decal --decal-reach 0.25 --font pixor-5

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

picture  bush: 330 of 330 pixels moved to the palette (100.0%)

--keep-colours оставляет их как есть. У проекта с автоматической палитрой пока не к чему привязываться — его палитра строится из того, что есть в сцене, включая карточки, — поэтому конвейер делает это дальше.

PNG или JPEG: вырезанному объекту нужна прозрачность PNG, а фотография для фона чаще всего бывает JPEG.

Изображение из нескольких кадров. Изображение с кадрами рядом — факел, мерцающий в четырех, флаг, развевающийся в шести, — это одно изображение с заданным параметром Кадры (--picture-frames 4). Карточка шириной в один кадр и показывает первый; клип, сделанный в Pixor, ставит ключи на то, какой кадр она показывает (picture:NAME, frame), так что нарисованное мерцание играет в листе, как все остальное. Отражено отражает каждый кадр на месте, сохраняя их порядок.

Кадры могут быть отдельными файлами вместо одной полосы — Файл на кадр, --picture-sequence: указанный файл — первый, flame_0001.png, а следующие за ним номера идут с тем же дополнением нулями; каждый кадр размером с первый. И они могут воспроизводиться сами — Воспроизводится само, --picture-plays: по одному на кадр, по кругу, под тем, что показывает лист, если только клип не задает ключами, какой показывать. Когда больше ничего не движется, они и есть анимация — цикл под названием picture.

pxr project set game.pixor --add-picture flame_0001.png:0.7,0,0.8 \
  --picture-frames 4 --picture-sequence --picture-plays --facing sprite

Небо

Небо находится позади всего, в пикселях, на которых ничего не нарисовано, — поэтому модель сохраняет свою обводку и без него. Это полосы — верхний цвет, нижний и целое число ступеней между ними, никогда не плавный переход, — или нарисованное изображение, привязанное к верху кадра и отцентрированное, по целому числу пикселей спрайта на пиксель изображения, с краями, продолженными за его стороны. Его цвета точно входят в палитру, поэтому полосы — именно те цвета, которые вы заказали. Оно часть мира: меню + Структуры, «Мир › Небо», или pxr project set game.pixor --sky '#2c3e6b,#9dbcd9,4' (или --sky dusk.png:2), и --no-sky.

Слова в сцене

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

pxr project set game.pixor --size 128
pxr project set game.pixor --add-text "GAME OVER" \
  --text-at 0,2.3,0 --text-size 0.033 --tilt -45 \
  --text-colour '#f4ecf2' --text-outline '#1a1620'

--text-size — это метры на пиксель шрифта, так что слова читаются, когда на него приходится пиксель спрайта или больше: рендер выводит, сколько пикселей листа приходится на метр (около 40 для проекта с рыцарем при --size 128, 0.033 × 40 ≈ 1.3; 37 с кустами и изображениями с этой страницы, все еще больше 1). При 64 px это около 24 — меньше пикселя на пиксель шрифта, и буквы распадаются.

Вариант Что делает
--font NAME|FILE pixor-11, pixor-5 или собственный файл шрифта: в формате Pixor или .bdf.
--align left|middle|right Где проходит каждая линия.
--wrap PIXELS Переносить строки на этой ширине. Слишком длинное слово остается целым: разорванное слово читать труднее, чем выступающую строку.
--letter-spacing N, --line-spacing N Дополнительные целые пиксели.
--text-colour, --text-outline, --text-shadow Тушь, однопиксельная обводка, пиксельная тень.
--text-scale N Каждый пиксель становится N на N. Только целые шаги.
--facing sprite, --picture-pixels N В пространстве спрайта: N пикселей спрайта на пиксель шрифта, на каждой камере.

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

Слова по умолчанию — подпись: они не влияют на кадрирование. В пространстве спрайта они точны с любой стороны, без наклона и без подгонки под камеру: --facing sprite.

Слова как геометрия

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

pxr shapes -o sign.glb --shape letters:2,0.5,0.25
pxr project set game.pixor --add-shape letters:1.2,0.3,0.1:0,3,0 --words HELLO

Стоя на высоте 3 м, слово не задевает шлем рыцаря; как и любой фигуре, ему нужен один пиксель спрайта или больше на каждый пиксель шрифта, чтобы читаться, что и дает рыцарь при --size 128.

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

Шрифты

Pixor поставляется с двумя шрифтами, нарисованными специально для него: pixor-11 — шрифт интерфейса — и pixor-5 — пять пикселей на заглавную и три на большинство строчных — для чисел над спрайтом, подписей и HUD, где больший перевешивал бы то, что он обозначает. Фигура letters выбирает между ними параметром Шрифт в Инспекторе. Собственный шрифт — это текстовый файл того же вида, такой же простой, как кажется:

== A
.###.
#...#
#####
#...#
#...#

Строка == C называет символ (или == U+00E9 для того, что нельзя набрать), затем идут его строки: # — чернила, . — пусто. Это читается, сравнивается в диффе и не требует библиотеки шрифтов.

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

Палитра из изображения

Файлом палитры может быть изображение: референс, скриншот игры, облик которой вам нужен, или полоса образцов цвета.

pxr render hero.glb --palette reference.png

Изображение с шестнадцатью цветами или меньше дает ровно их, в стабильном порядке; изображение с большим числом цветов дает до шестнадцати самых характерных (неразличимо близкие цвета сливаются в один). Одно и то же изображение на любом компьютере дает одну и ту же палитру.

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

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