Статья

glyph art

glyph art делит картинку или видео на сетку ячеек, замеряет тон каждой ячейки и рисует на её месте один знак. Тон передаёт размер знака: точка там, где тише всего, и жирная отметина там, где громче всего. Это ASCII-арт, только работает размер, а не выбор символа.

Есть и второй режим — halftone. Он устроен совершенно иначе: ни ячеек, ни знаков, ни лестницы, только повёрнутый растр из точек. Про него отдельная глава ближе к концу.

Всё считается прямо в браузере. Файлы, которые вы открываете, остаются на вашей машине — странице запрещено самой открывать соединения. Единственное, что она подгружает, — собственные знаки пресетов, картинками с того же адреса, и только когда вы выбрали пресет.

Если что-то не открывается, проверка браузера покажет, чего в нём не хватает.

Загрузить исходник

Бросьте файл в любое место холста или откройте его через панель source. Читаются MP4, MOV, WebM, PNG, JPEG и WebP. SVG годится для знаков, но не для исходника: браузеры не берутся надёжно растрировать его в битмап.

Декодирует видео браузер, а не сам инструмент. Если MP4 или MOV не открывается, перегоните его в H.264 или выгрузите из монтажки секвенцию картинок.

Размер выходного кадра берётся из сетки, а не из исходника: при 72 ячейках по ширине кадр получается 1728 px. То есть холст, на который вы смотрите, и есть экспортируемый кадр в полном размере — он только ужат под ваш экран. Отдельного качества превью, которое может разойтись с экспортом, тут просто нет.

Сетка

cells — сколько ячеек помещается по ширине, от 8 до 240. Высота считается из пропорций исходника. Начинать удобно с 72: на 72 лицо ещё читается, ближе к 48 превращается в абстракцию, после 120 — в текстуру. Когда на ячейку остаётся меньше восьми пикселей, знаки перестают читаться как знаки и лучше взять printor; панель об этом предупредит.

hand расшатывает сетку. Это одна ручка на три вещи сразу — небольшой поворот, небольшое смещение и небольшое изменение размера, и всё это разыгрывается для каждой ячейки отдельно. На нуле получается машина. Около 0.35 читается как штамп, поставленный рукой.

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

Тон

В какую полосу попадёт ячейка, решают три параметра.

levels — чёрная и белая точки. Он выставляется автоматически при загрузке, по 1-му и 99-му процентилю тонов ячеек: плоская фотография, порезанная на семь полос, займёт от силы четыре и будет выглядеть мёртвой, поэтому это делается ещё до того, как вы что-то увидите. Двумя ползунками можно переопределить. Если исходник действительно плоский, автоподбор его не трогает, а не вытягивает шум.

bands — на сколько тонов режется картинка, от 2 до 24. Три — это плакат, двенадцать — растр, семь — лестница, у которой видно каждую ступеньку. Смена числа полос растягивает уже собранную лестницу, а не сбрасывает её.

weight гнёт всю лестницу целиком. Меньше — печатает плотнее, больше — легче и воздушнее. После levels это самая полезная ручка, и лента тонов обновляется на ходу, так что видно, что именно она делает.

max mark — насколько знаку позволено вылезать за свою ячейку. Обрезается он при этом никогда: знаки штампуются в одну маску во весь кадр, так что крупный просто ложится поверх соседей. Но после примерно 1.2 они сплавляются в массу и перестают читаться поштучно. max ink — другой конец того же вопроса: какую долю своей ячейки просит закрасить самая тёмная полоса.

Эти двое и мирит кнопка fit ramp. Она поднимает max ink ровно до того предела, за которым первый же знак вылез бы за max mark, — и проверяет все полосы и все знаки, а не только самую тёмную. Разреженный знак в середине лестницы упирается в потолок задолго до нижней полосы. Нажмите её после загрузки своего набора, и лестница поднимется настолько, насколько эти знаки её вытягивают. Набор из тонких линий встанет на более светлую лестницу, чем набор из плашек, и это правда про эти знаки, а не неудача с чёрным.

Тона усредняются в линейном свете, а на полосы режутся в перцептивной светлоте. Знать это необязательно, но именно поэтому средние тона тут не забиваются так, как обычно бывает в подобных инструментах.

Лента тонов

Полоса внизу — это и есть инструмент. По колонке на каждую полосу тона, слева самая светлая, справа самая тёмная.

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

Число под ячейкой — этот размер в процентах от ячейки. Всё, что больше 100%, залезает на соседей, и это сделано нарочно: самая тёмная полоса обязана переливаться через край, иначе тени рассыпаются в горошек вместо того, чтобы собраться в массу. Насколько далеко это заходит, задаёт max mark; у пресетов он держится на 1.15, поэтому их знаки остаются счётными.

  • Полоса 0 по умолчанию пустая и подписана paper. Бумага — это тоже тон, и пустая верхняя полоса — главное, из-за чего первый же результат выглядит печатью.
  • Ползунок в колонке задаёт размер полосы руками. Рядом с числом появляется · — знак того, что полоса сошла с кривой. rebalance возвращает все полосы обратно.
  • ! в углу ячейки значит, что знак слишком разрежен и не добирает тон полосы даже на максимальном размере.

Почему размер — это не просто тон

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

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

Пресеты

В комплекте пять наборов: 18th century, 1812, Great War, 1941 и 1812 press. Каждый — отсканированные литеры и знаки своей эпохи: буквы, цифры, печати, орнаменты, — разложенные по двенадцати уровням.

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

На каждом уровне печатается минимум два разных знака, на трёх самых тёмных — минимум четыре. 1812 press печатает по десять на уровень и по двенадцать на самых тёмных, потому что материала хватает. Один знак работает на двух-трёх уровнях в разном масштабе: отсюда и берётся разнообразие без большего числа сканов, и поэтому уровень — это фактура, а не один штамп подряд.

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

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

Та же арифметика сама уводит вытянутые знаки в светлый конец, и никто при этом на пропорцию не смотрит. Знак вписывается в квадратную ячейку по длинной стороне, поэтому вдвое-с-половиной более широкий, чем высокий, достаёт по другой стороне лишь на две пятых и кладёт две пятых той краски, что обещает его плотность.

У каждого набора свой max ink, потому что это факт про материал: воздушная высокая печать не закрывает столько же ячейки, сколько сплошная доска, не вылезая за неё. 18th century — самый светлый набор именно по этой причине, настоящего чёрного он не даст; 1812 press — самый плотный, потому что в газетной наборной кассе есть по-настоящему жирные литеры. Это литеры, а не инструмент.

1812 press

Остальные четыре набора собраны знак за знаком руками. Этот нарезан из четырёх целых газетных полос 1812–1813 годов — «Вѣстникъ Европы», «Северная почта», «Рускiй Инвалидъ», «Сынъ Отечества» — автоматически, и от этого он другой: 125 знаков, отобранных из почти трёх тысяч, так что каждый уровень глубокий и две соседние ячейки одного тона не выглядят одинаково.

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

Знаки

По умолчанию стоит набор из шести отвлечённых знаков — точка, крест, косой крест, рамка, кольцо и ромб. Они разложены по семи полосам, а самая светлая полоса оставлена бумагой.

load a set в панели marks берёт сразу несколько PNG, JPEG, SVG или WebP и раскладывает их по полосам в порядке файлов. Это быстрый путь от папки с рисунками до готовой лестницы.

Чтобы расставлять знаки поодиночке, бросайте файлы прямо на колонку нужной полосы в ленте или нажимайте в ней +. Несколько файлов, бро́шенных на одну колонку, целиком уйдут на эту полосу и будут на ней сменяться. Клик по фишке знака убирает его с полосы.

Чтобы работать буквами, наберите символы в поле marks, выберите шрифт и нажмите add. Каждый символ становится отдельным знаком и попадает на выбранную полосу. Полоса выбирается кликом по колонке.

Загруженный файл читается как чернила, а не как картинка: белый фон не даёт ничего, прозрачность учитывается. Скан «чёрным по белому» готовить не нужно.

Как это оживить

Из стоп-кадра с одним знаком на полосу выйдет один кадр — меняться в нём нечему. Движение появляется, когда на полосе больше одного знака.

Тогда знаки начинают сменять друг друга. hold — сколько кадров держится каждый знак, от 1 до 24; панель показывает, сколько это получается знаков в секунду при текущей частоте.

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

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

Для стоп-кадра frames задаёт длину секвенции, а seamless loop ставит кратчайшую длину, на которой циклы всех полос снова сходятся.

Для видео длина берётся из клипа. frame rate постеризует время до 4–16 к/с: кадр N — это то, что исходник показывает на секунде N ÷ frame rate. Кадр держится, а не смешивается со следующим.

Halftone

halftone в шапке левой панели переключает на другой принцип — и стоит прямо сказать, насколько другой.

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

Лестницы здесь нет, поэтому полосы, знаки, seed, hand и всё, что отвечает за смену знаков, пропадают. Остаётся печатный станок.

Растр

lines — линеатура: сколько линий помещается по ширине кадра, от 8 до 200. Панель сама пересчитывает — 60 линий на кадр 2048 px это точка в 34 px.

angle поворачивает весь набор растров. По умолчанию 45°, потому что под этим углом сетка точек пропадает из виду; на 0° видно ряды.

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

Цветоделение

mono — один чёрный растр. duotone — два растра в 30° друг от друга, красками на ваш выбор; вторая краска придержана в светах, поэтому пара читается как две краски, а не как одна, напечатанная дважды. cmyk — четыре плашки под 15°, 75°, 0° и 45°: классический набор, потому что два растра в 30° дают розетку, а два растра в паре градусов — муар размером со страницу.

В cmyk ручка black — это чёрная генерация. На 0 нейтрали собираются из голубой, пурпурной и жёлтой вместе: густо и плохо приводится, цветную бахрому в серых видно глазом. На 1 нейтрали несёт одна чёрная плашка, как в газете, и серые выходят чистыми.

Тон

levels работает так же, как в режиме знаков. gain гнёт тон в площадь точки: меньше 1 раскрывает тени, больше — придерживает. spread — это станок: каждая точка масштабируется перед печатью, так что больше 1 — краска растекается по бумаге, меньше 1 — растр недокормлен.

invert colour берёт негатив кадра: белые точки на чёрном и цветной негатив сведённых плашек. Размеры точек при этом не меняются.

Кадр и экспорт

frame задаёт ширину вывода — 1024, 1536, 2048 или 3072 px, — высота идёт от исходника. Сетки, из которой её можно было бы вывести, здесь нет, да и точка рисуется как контур в дробной позиции, так что выравнивать не к чему. Обе стороны выходят чётными, поэтому MP4 не приходится пересчитывать кадр.

На двух и четырёх красках галочка separations кладёт в архив по папке на плашку, каждая — чёрным по белому. Это то, что заряжают в печать.

Цвет и инверсии

В режиме знаков mono печатает одними чернилами по бумаге. source colour заливает каждый знак средним цветом его собственной ячейки, так что цвет исходника сохраняется, а тон по-прежнему целиком держится на размере. (В халфтоне цвет берётся из цветоделения — см. выше.)

Инверсии две, и они делают разное:

  • invert colour меняет местами чернила и бумагу. Белые знаки на чёрном.
  • invert ramp разворачивает то, в какую полосу попадает тон: жирные знаки уходят на светлые ячейки, тонкие — на тёмные. Сама собранная лестница остаётся как была, переворачивается только попадание в неё.

Экспорт

png пишет ZIP: по одному PNG на кадр, и может сразу нести три прохода, каждый в своей папке:

  • flat — знаки по бумаге, непрозрачно.
  • marks → alpha — только знаки, бумага прозрачная.
  • paper → alpha — только бумага, знаки из неё вырезаны.

Вместе с invert colour это закрывает все четыре варианта. В README.txt внутри архива записаны частота кадров и либо сетка, число полос и seed, либо линеатура, угол и цветоделение.

mp4 пишет H.264 на целевой частоте. У H.264 нет альфа-канала, поэтому MP4 всегда плоский. Кадр при этом не пересчитывается по размеру.

Экспорт останавливается на 900 кадрах.

Seed, проекты, клавиатура

seed управляет всеми розыгрышами по ячейкам — дрожанием hand и фазами циклов. Один и тот же seed воспроизводит работу в точности, reroll переходит к следующему. Неуправляемой случайности в инструменте нет нигде.

save сохраняет файл проекта вместе с вашими знаками. share кладёт настройки в адресную строку — загруженные знаки для ссылки слишком тяжёлые, поэтому в ссылке они подменяются штатными, о чём инструмент прямо сообщает. Если знаки важны, сохраняйте проект файлом. Знаки пресетов ссылку переживают: это имя и путь, а не картинка.

Клавиатура: пробел — старт и пауза, стрелки — шаг по кадрам, зажатый \ показывает исходник, ⌘Z и ⇧⌘Z — отмена и возврат.

Открыть glyph art →