Статья
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 — отмена и возврат.