Компьютерное рисование по фактурному фону
Побочный эффект проникновения краски в основу, это эффект художественный. В зависимости от грунтовки холста или влажности бумаги, результат получается разным. Особенно в акварельной живописи. Получаемые артефакты - зернистость холста, окантовка, возникающая в пятнах высыхающей акварели, или расползание акварельного следа по бумаге, эти артефакты делаются не намеренно, но они предусматриваются художником в его работе. Более того, и свой инструмент, мастихин или кисти, он использует в расчёте на получаемый артефакт.
В компьютерной живописи изначально ничего такого нет. Вопрос сохранности "краски" не возникает, и артефакты она не создаёт. Напротив того, большинство "мазков" компьютерной кисти схожи между собой и удручают единообразием.
Однообразие следа кисти является главной проблемой компьютерной живописи. А искусственное создание артефактов, является способом решения этой проблемы.
Как в компьютерной, так и в реальной живописи артефакты можно подразделить на артефакты, вносимые кистью, артефакты, вносимые холстом, и артефакты, возникающие в тесном взаимодействии одного с другим. Все эти артефакты, хоть и предусматриваются, но имеют случайную природу.
Отдельной строкой рассматривают артефакты, не случайные, а преднамеренно созданные и оставляемые автором. Сюда относятся недостаточно прописанные места в картине, проглядывание холста, обычно по краям, и даже побочные изображения (такие, как "третья рука").
АРТЕФАКТЫ, ВНОСИМЫЕ КИСТЬЮ
Самым простым артефактом, который может создать компьютерная кисть, это зернистость следа. А самая простая зернистость – пиксельная. Отдельные пиксели просто случайным образом изымаются из следа, и тогда на их месте возникают прорехи. Или отдельные пиксели перекрашиваются в несколько другой цвет. Легко организовать так, чтобы это происходило преимущественно по краям кисти, или даже постепенно – по мере её продвижения в процессе формирования следа. Получаемые зернистые следы более живописны, но тоже не вполне совершенны, по той простой причине, что изымание или перекрашивание отдельных пикселей происходит не коррелировано, а вот корреляцию в этот процесс вносить нужно специальными методами и достаточно сложным путём. Достаточно – до такой степени, чтобы от этого пути отказаться.
А вот, артефакты, вносимые фактурой фона, коррелированы по своей природе, поэтому использовать её представляется более заманчивым.
АРТЕФАКТЫ, ВНОСИМЫЕ ФАКТУРНЫМ ФОНОМ
К сожалению, принципы, на которых основано использование фактурного фона в графическом редакторе, нигде не описаны. Приходится, используя свой опыт программирования, додумываться до них самому.
Единственно, что можно найти в интернете, это использование слоёв в совокупности с выделением на этих слоях фактуры с изменённой прозрачностью. С тем, чтобы одни слои как бы проглядывали через другие.
Для моей программы это совершенно не годится, потому, что прозрачности, как таковой, в ней нет, а прозрачность следа при работе кистями реализуется по-пиксельно и программным путём, алгоритм работает медленно, и обслужить кисть размером более чем 40 пикселей он не в состоянии.
Другое дело, если фактурный фон нарисован не как рисунок, а задан численным массивом. Такой массив, при загрузке его, копирует рисунок. Практически это осуществляется так –
Находим в интернете и загружаем в программу рисунок фактурного фона. Не обязательно чёрно-белого, но светлого, такого, какой показан на иллюстрации. Затем нажимаем клавиши Ctrl/F и ждём секунд 10.
Во время этих десяти секунд программа пробегает по всем пикселям рисунка, Для каждого пикселя вычисляется светлота тона – сумма трёх компонент цвета S=R+G+B, затем это числе нормируется на единицу и записывается в наш численный массив.
В результате белый цвет получает число 1, яркий чисто красный, зелёный или синий получает число 0.333, жёлтый, голубой или малиновый получает число 0.666 и так далее, соответственно общей яркости каждого пикселя.
Появляется сообщение "фактурный фон загружен", и теперь по фону можно работать. Включается фон кликом по кнопке «S». Вместо буквы S на кнопке появляется цифра 1, затем 2 и 3.
Цифра 1 означает, что влияние фона будет небольшим, при цифре 3 влияние фона максимально. Кликами правой кнопки мыши вслед за цифрой можно поставить маленькую букву о или штрих ‘ как указание на опцию использования фона.
Рисование по фону без этих опций оставляет краску без изменений на белых пикселях фона, а на тёмных пикселях краска светлеет. Поэтому вместо ровно окрашенной поверхности получается инвертированное по яркости изображение фона. Если же в качестве фона подложить инвертированную по цвету фотографию, то водя кистью по ровной поверхности можно получить вполне реалистичное изображение (см. иллюстрацию справа).
Но это, так сказать, побочный эффект. Основной эффект заключается в появлении фактуры фона при обычном рисовании кистью. Фон без опций, как уже было сказано, демонстрирует фактуру фона с инверсией, опция маленькой буквы о обращает инверсию в прямое отображение, а опция штриха подмешивает на тёмных пикселях фактурного фона краску, выставленную на кнопке фона в верхней части окна. В последнем случае создаётся режим рисования по фону в два цвета, и тогда фактура фона проглядывает не в яркостном, а в цветовом виде.
Разумеется, описанное использование фактурного фона, является самым простым – в зависимости от яркости его пикселей меняется цвет красящего вещества, но можно придумать и более сложные взаимодействия холста с красящей его кистью.
Текст программы, оформленной в виде подпрограммы-функции, меняющей цвет СС на цвет FFon, приведён ниже.
_________
4.06.2023
ПРИЛОЖЕНИЕ. Фрагмент текста программы.
Public Function FFon(M As Integer, CC As Long, X As Integer, Y As Integer) As Long
If M < 7 Then If F = 0 Or X > Xm Or Y > Ym Then FFon = CC: Exit Function '==========
If M = 0 Then '
If F52p = 2 Then ' работа по фону в два цвета
Z = Fon(X, Y): Z = 1 - (1 - Z) * F52 / 10: FFon = ccRGB(CC, cBack, Z):
Exit Function: End If '=========
Z = Fon(X, Y): If F52p = 0 Then Z = 1 - (1 - Z) * F52 / 3:
If F52p = 1 Then Z = 1 - (1 - Z) * F52 / 6: Z = 1 / Z:
B = (CC And 16711680) / 65536: G = (CC And 65280) / 256: R = CC And 255:
B = B / 255: G = G / 255: R = R / 255:
BB = B ^ Z * 255: GG = G ^ Z * 255: RR = R ^ Z * 255:
C = RGB(RR, GG, BB): FFon = C:
Exit Function: End If '====================
Свидетельство о публикации №223060400216