На окраинах Painter’а
Если кто-то не в курсе, Painter — это уникальная графическая программа, главное предназначение которой состоит в том, чтобы максимально приблизить виртуальные инструменты художника к их реальным прототипам — холстам, краскам, кистям, аэрографам и пр. Обо всех этих чудо-возможностях Painter’а можно говорить часами и написать горы книг. Однако в этой статье речь пойдет о вещах, которые традиционному художнику-«некомпьютерщику» знать не только не обязательно, но даже вредно…
Что такое потеря данных в jpeg?
Сразу о сложном…
Уже много версий подряд в Painter’е существует малоизвестный, но по-своему интересный модуль ColorTalk (рис. 1). С его помощью можно оперировать различными характеристиками пикселов холста, слоев и масок, используя для этого специальный язык программирования. (Уважаемый читатель, посмотрим правде в глаза. Если вы имеете смутное представление об устройстве растровых изображений, цветовых моделях и языках программирования, настоятельно рекомендую не терять ваше драгоценное время на эту статью и не читать ее дальше.) С помощью модуля ColorTalk можно изменять RGB- и HSB-компоненты цвета и степень прозрачности масок. Сила ColorTalk заключается в том, что он позволяет использовать при работе с пикселами не только различные арифметические действия (+, –, *, /) и большое количество математических функций (sin, log, max,..), но и значения координат пиксела (x, y), расстояние от центра прямоугольного выделения до пиксела (distance) и угол поворота до пиксела (angle). Кроме того, можно использовать случайные величины (noise), текущую текстуру поверхности (grain), значения основного и вспомогательного цвета (cc, bc) и кое-что еще.
Язык ColorTalk крайне прост как по своей конструкции (в нем нет не только циклов, но даже условий), так и по пользовательскому интерфейсу (код программы невозможно внести с клавиатуры, он собирается мышкой из готовых кусочков и должен поместиться в одну строку). Если необходимо выполнить несколько команд одновременно, они разделяются между собой точкой с запятой. В остальном все очень похоже на традиционные алгоритмические языки программирования.
К примеру, для того, чтобы добавить к красному компоненту цвета (red) зеленый (green), достаточно написать: red = red + green (или red += green, что тоже самое). А инвертировать яркость изображения (value), оставив при этом без изменения значения цвета и насыщенности (hue и saturation), можно, написав: value = 1 – value (это работает, поскольку значения цветов (а также координат, углов и расстояний) в ColorTalk находятся в диапазоне от 0 до 1).
Список операций и функций языка ColorTalk приведен в приложении 1. Описание модуля на английском языке можно найти в файле technote.pdf на фирменном компакт-диске (Джереми Саттон, автор книги Fractal Design Painter Creative Techniques, с которым мне посчастливилось общаться, говорит, что эта документация существует, по крайней мере, с четвертой версии Painter’а). Сам модуль вызывается клавишей n (странно, но об этом почему-то не сказано ни в документации, ни в help’ах).
Ну и зачем все это нужно?
Резонный вопрос. Здорово, конечно, что при помощи пары-тройки «магических заклинаний» можно повысить насыщенность изображения или инвертировать его, но ведь то же самое можно сделать и обычными штатными средствами Painter’а или, тем более, Photoshop’а.
Действительно, кое-что можно. Однако есть несколько случаев, для которых этот модуль практически незаменим. Вот несколько примеров применения модуля ColorTalk.
Цветовые таблицы
Самое простое из всего того, что можно сделать с помощью ColorTalk, это, пожалуй, цветовые таблицы (вроде тех, что на рис. 2 и 3). Для их построения надежнее воспользоваться модулем ColorTalk, нежели пытаться подобрать комбинацию фильтров и эффектов наложения слоев Painter’а или Photoshop’а, способных привести к желаемому результату.
Если вы хотите почувствовать, как ведет себя компьютерный цвет при разной его яркости и насыщенности, рекомендую уделить немного времени экспериментам с возможностями ColorTalk. Заодно станет понятнее, что делает с цветом компьютер, когда выполняет ту или иную цветовую коррекцию.
Математические узоры…
В отличие от банальных цветовых таблиц, эта тема куда более захватывающая и, несомненно, творческая. В модуле ColorTalk более чем достаточно средств для создания различных математических узоров, хотя специально для этого он, разумеется, не предназначен. Комбинируя математические функции и операции, можно добиться действительно потрясающих эффектов. Процесс создания таких математических узоров достаточно специфичен, кропотлив и практически непредсказуем, но результат при правильном обращении с формулами стоит затраченных усилий.
На рис. 4 и 5 приведены примеры таких узоров. Хотя они интересны и сами по себе, ничто не мешает использовать их как основу для других работ.
Создавая математические узоры, есть смысл делать изображение максимально насыщенным (saturation = 1) и работать только с яркостными (value) и цветовыми (hue) характеристиками, не трогая его RGB-компоненты. В то же время важно помнить, что яркость пиксела в ColorTalk изменяется от 0 до 1, и нужно следить за тем, чтобы результат вычислений попадал в этот диапазон. В противном случае, какими бы сложными ни были операции над яркостью пиксела, результатом их работы будет либо черный (value < 0), либо белый (value > 1) холст. То же самое относится и к насыщенности. Для цвета же таких ограничений нет, можно вполне написать hue = 1 / value, и хотя в этом случае значение цвета в темных участках изображения будет стремиться к бесконечности, такая раскраска нигде не будет зашкаливать.
Если вам покажется, что математические узоры излишне искусственны, используйте при их подготовке текущую текстуру (grain) или произвольное изображение с холста (c_value).
Конечно, такого вида творчество требует знания математики и программирования, по крайней мере в пределах школьной программы, но никто и не обещал, что в этой статье будут даны легкие рецепты для чайников и/или гуманитариев.
… и мультипликация
Математические узоры не только непредсказуемы, но и очень пластичны. Стоит незначительно изменить какой-нибудь коэффициент в формуле, и результат получается похожим на предыдущий, но уже несколько другим (примерно так, как это происходит в калейдоскопе или фракталах). Если каждое такое изменение записывать в виде отдельного кадра, может получиться интересный анимационный ролик.
Вот пример кода с добавочным коэффициентом, который можно использовать для создания мультипликации:
t1 = 1; value = 0.333 * usin(ucos(angle) / t1 * distance) + 0.333 * ucos(t1 * distance / usin(angle)) + 0.333; saturation = 1; hue = 0.7 / value + 0.1 * t1;
Здесь добавочный коэффициент, влияющий на величину distance и смещающий цветовую палитру, для удобства записан в переменной t1. При t1 = 1 получается тот же узор, что и на рис. 3. Последовательность кадров при t1, изменяющемся от 0,2 до 0,7, показан на рис. 6.
Обратите внимание, что, используя коэффициенты при значении distance, мы, по сути, устанавливаем масштаб изображения. Используя же такие коэффициенты при значениях координат x и y, можно искажать изображение по горизонтали и вертикали.
Разумеется, для того, чтобы при подготовке анимации каждый раз не вводить код программы заново, его нужно сохранить в библиотеке ColorTalk (кнопка Save). Но это, к сожалению, максимум автоматизации, которую может предложить ColorTalk, — изменение параметров для каждого кадра придется делать вручную.
Что такое потеря данных в jpeg?
Вот еще один простой пример применения модуля ColorTalk, так же, как и предыдущие, связанный с математическими алгоритмами: на этот раз с алгоритмами jpeg-компрессии (рис.7).
Известно, что при записи изображения в jpeg-формате его качество теряется. Эта потеря тем больше, чем с большей компрессией оно было записано. Причина потерь — в алгоритме jpeg-сжатия, который упрощает информацию о цвете в светлых и темных участках изображения, то есть именно в тех участках, в которых человеческий глаз хуже всего различает цвета.
С помощью модуля ColorTalk можно легко посмотреть, во что превращается цвет при jpeg-компрессии. Для этого нужно отделить цвет изображения от его яркости и насыщенности, используя, например, такой код:
value = 0.5; saturation = 1 – step(0, saturation);
Вторая строка написана так сложно для того, чтобы учесть бесцветные участки изображения, которые при простой записи (saturation = 1) окрашиваются в ярко-синий цвет.
Результат работы этой программы можно посмотреть на рис. 8 и 9.
Если понадобится отделить насыщенность изображения от его яркости и цвета, можно использовать такой код:
value = saturation; saturation = 0;
Запись HSB-характеристик пикселов изображения в RGB-каналы (для дальнейшего анализа и обработки, например, в Photoshop’е, который сам, к сожалению, «разучился» это делать с версии 2,5), осуществляется так:
t1 = hue; t2 = saturation; t3 = value; red = t1; green = t2; blue = t3;
Обратное преобразование (из HSB в RGB) выполняется аналогичным образом.
И это всё?
Разумеется, это далеко не все, что можно делать с помощью модуля ColorTalk. Так, к примеру, ничего не было сказано о его возможностях при работе с масками, цветокоррекции изображений (см. рис. 10, 11, 12) и очень интересном методе раскрашивания черно-белых фотографий (это отдельная большая тема, достойная обсуждения в отдельной статье). Будьте смелее, экспериментируйте! Смею вас заверить, что ColorTalk совсем не так сложен, как может показаться на первый взгляд.
КомпьюАрт 7'2000