Original:http://www.tylerlhobbs.com/writings/watercolor

ПОРОДЖУЄЧИЙ ПІДХІД ДО СІМУЛЯЦИЇ АКВАРЕЛЬНИХ ФАРБІВ

Я отримав багато запитів, щоб пояснити техніку за моїм "акварельним" генеративним твором мистецтва. Мій підхід схожий на деякі з методів, описаних у моїй публікації, на Генерація м'яких текстур , тому прочитайте, що спочатку, якщо ви ще цього не зробили. Алгоритм не є особливо екзотичним. Замість цього, це концептуально просте, але точно настроєне.

НАТХНЕННЯ

Я часто експериментую з акварельними фарбами в моїй ескізній книзі. Я особливо люблю безумно деталізовані та різноманітні ефекти, які можуть зробити фарби. Один нарис потрапив в очі, і саме я зосередив увагу на розробці цієї техніки:

ВОДОКОЛОР СКЕЦЧ

Моєю метою було не реалістично відтворити все, що стосується акварельної фарби. Замість цього я просто хотів сфотографувати суть цього, що мені дуже подобається.

ПОЛІГОННА ДЕФОРМАЦІЯ

На базовому рівні, техніка полягає у складанні безлічі майже прозорих шарів один на одного. Щоб зони з поступовим вицвітали, ці шари повинні мати велику різноманітність у формі. Проте в районах з чіткими межами шари потребують невеликих змін.

Ядром техніки акварелі є алгоритм рекурсивного деформування багатокутника. Це досить просто, і воно виходить приблизно так:

  1. Для кожного рядка A -> C в полігоні знайдіть серединну точку B. З гауссового розподілу, розташованого на B , виберіть нову точку B ' .
  2. Оновити багатокутник, замінивши рядок A -> C двома рядками: A -> B ' і B' -> C
  3. Якщо ми не потрапили до глибини максимальної рекурсії, повторіть кроки 1, розділивши лінії дитини.

Залежно від варіації вашого гауссового розподілу та глибини рекурсії, це дасть багатокутник з зубчастими, детальними краями.

ВИКОРИСТАННЯ ПОЛІГОННОЇ ДЕФОРМАЦІЙНОЇ МЕТОДИКИ

Для цього прикладу я збираюся застосувати метод деформації багатокутника до простого правильного багатокутника:

ПОЧАТОК ПОЛІГОНУ

Основна форма акварелі створюється через один круг деформування багатокутника. Вхідний багатокутник знімається і проходить через функцію деформації кілька разів (десь близько 7). Отриманий багатокутник стає "базовим багатокутником" для всіх шарів, які ми створимо. Це виглядає приблизно так:

БАЗОВИЙ ПОЛІГОН

Для кожного шару, починайте з "базового полігону" і запускайте його через функцію деформації ще кілька разів (можливо, 4 або 5). Це дозволить створити багатокутник, подібний до базового багатокутника, але відрізняється у всіх тонких деталях. Намалюйте полігон з низькою непрозорістю (десь близько 4%). Повторіть це на 30-100 шарів. Результат виглядатиме так:

Простий водонепроникний лондон

РОЗРОБКА: НИЗЬКА І ВИСОКІ ВАРІАЦІЙНІ ЗОНА

Заходи, які до теперішнього часу будуть створювати форму, яка має дещо м'які краї навколо. Для того, щоб надавати кордону гострим краям у деяких областях та м'яких краях в інших, ми можемо призначити різні рівні "дисперсії" для кожного сегмента рядка. Сегменти з високою дисперсією зазнають великих змін у кожній мутації навколо, а сегменти з низькою дисперсією зазнають невеликих змін. Коли сегмент розділений на два дитячих сегмента, ці діти можуть успадкувати дисперсію батьків. Звичайно, різниця повинна дещо знизитися, і це також гарна ідея трохи рандомізувати, яку дисперсію призначають кожна дитина. З цією зміною на місці, крапки виглядають більш цікаво:

ВОДОРОННИЙ БЛОК З СКОРОЧЕНОЮ ВАРІАЦІЄЮ
ВОДОРОННИЙ БЛОК З СКОРОЧЕНОЮ ВАРІАЦІЄЮ

РОЗРОБКА: ТЕКСТУРОВЕ МАСКУВАННЯ

Природна акварель не зовсім гладка і має певні зміни в непрозорість. Щоб зняти трохи цього, можна використовувати іншу маску текстури на кожному з 30 до 100 шарів. Маска зробить деякі частини шару повністю прозорою, створюючи варіації в остаточному непрозорість. Для цього прикладу я випадково розміщую приблизно 1000 маленьких кіл на зображенні для маски текстури.

; draw the watercolor blob shape
(with-graphics the-blob-mask
  (background 0 0 0)
  (stroke 0 0 layer-alpha)
  (fill 0 0 layer-alpha)
  (begin-shape)
  (doseq [[x y] final-poly]
    (vertex x y))
  (end-shape))

; draw the circles onto the texture mask
(with-graphics the-texture-mask
  (background 0 0 0)
  (no-stroke)

  (fill 0 0 layer-alpha)
  (doseq [j (range 900)]
    (let [x (random 0 (w))
          y (random 0 (h))
          len (abs-gauss (w 0.03) (w 0.02))
          [hue sat bright] (color-fn)]
      (fill hue sat bright)
      (ellipse x y len len)))

  ; Blend the watercolor blob shape layer into the current
  ; layer, only taking the darkest pixel from each. This
  ; effectively means we're taking the "intersection" of
  ; the two masks.
  (blend the-blob-mask 0 0 (w) (h) 0 0 (w) (h) :darkest))

(with-graphics the-overlay
  ; make the whole background red
  (background 5 80 80)

  ; apply the combination blob/texture mask
  (mask-image the-texture-mask))

; apply the masked layer
(image the-overlay 0 0)

Результат виглядає так:

ЛАТУННИЙ ВОДОРОЗ З ТЕКСТУРНОЮ МАСКУВАННЯМ

РОЗРОБКА: КОЛЬОРОВІ ЗБЕРІГАННЯ

З'єднання декількох кольорів з цією технікою добре працює, поки ви переміщаєте шари. Наприклад, робіть п'ять шарів червоної краплини, потім п'ять шарів жовтого кольору, потім п'ять червоних тощо. Це насправді не повторяє те, що відбувається з реальною фарбою акварелі, але воно все виглядає круто. У поєднанні з маскуванням текстури вище це виглядає так:

БЛЮДУВАННЯ ДВІ КОЛЬОРІВ

ПРИКЛАДНІ РОБОТИ

Ось декілька творів, які я створив із цими методами.

ISOHEDRAL XI
ЛІНІЯ

Це все, що на даний момент! Якщо ви знайшли це цікаво, перейдіть вперед і підпишіться на мою інформаційну розсилку у вікні нижче, щоб отримувати сповіщення кожного разу, коли я пишу про інші аспекти генеративних творів мистецтва. Ура!

Редагувати: Softdroid люб'язно опублікував російський переклад цієї статті .

Редагувати 2: я пішов більш глибоко на цю тему на Strange Loop 2017 з моєю розмову під назвою "Як зламати малюнок". Ви можете подивитися відео про цю розмову на youtube .