ГоловнаСтаттіГенеративне мистецтво та алгоритмічні візерунки

Воро́нєві плями: перетворення яскравості на поле крапок

Як вагові воронеї комірки та розслаблення Лай́да притягують точки в темні області та розсіюють їх з світлих.

mysimulator teamОновлено — червень 2026≈ 7 хв читання▶ Відкрити симуляцію

Претворення яскравості в щільність точок

Стіплінг – рендеринг зображення як поле окремих крапок – є традицією протягом століть у друку та ілюстрації: щільно пакуйте точки в темних областях, розсіюйте їх у світлих областях, і око конструює безперервний тон з чистої щільності. Зважений стіплінг Voronoi, представлений Адріаном Серкордом у 2002 році, автоматизує це, перетворюючи його на задачу оптимізації точок: враховуючи цільове зображення та бажану кількість точок N, розташуйте N точок так, щоб їх локальна щільність відповідала яскравості зображення всюди – щільно там, де зображення темне, рідко там, де воно світле (або навпаки, для естетики світло-темного).

жива демонстрація · пов'язана симуляція● LIVE

Вино́рні діаграми: наданню кожній точці власної території

Віно́рна діаграма розділяє площину на області, одна на точку, де будь-яка точка в заданій області ближча до цієї точки, ніж до будь-якої іншої точки — уявіть кожну точку як магазин і кожну область як територію ближче до цього магазину, ніж до будь-якого конкурента. Після того, як у вас є набір розкиданих точок, обчислення їх вино́рної діаграми є добре відомою геометричною конструкцією (алгоритм Fortune's sweep-line будує її за O(n log n)); цікава частина не сама діаграма, а алгоритм, який вирішує, де розміщувати точки в перше місце.

Ллойдский релаксация: перемещайте каждую точку к центру масс её ячейки

Ллойдский алгоритм (1957 года, изначально разработан для квантизации сигналов, независимо переоткрывался многократно с тех пор) — это итеративный цикл, который производит равномерное, органично выглядящее расположение точек. Начиная от случайного рассеяния точек:

повторяйте до сходимости: вычислите диаграмму Вороного для текущего набора точек для каждой точки p найдите центр масс её ячейки Вороного (взвешенное по локальной темноте изображения, а не просто площади) переместите p в направлении этого взвешенного центра # центр масс ячейки тянет точку к тому месту, где сосредоточена «масса» внутри этой ячейки Взвешивание связано с исходным изображением: вместо вычисления геометрического центра каждой ячейки, каждый пиксель внутри ячейки вносит вклад в центр в соответствии со своей темнотой (или, точнее, 1 минус яркость, так что черные пиксели учитываются полностью, а белые — нисколько). Точка, находящаяся в ячейке Вороного, пересекающей темную область, тянется к темной стороне своей ячейки; при повторных итерациях этот эффект растяжения накапливается, заставляя точки перемещаться из светлых областей в темные, разрежая области, где изображение светлое, и формируя области, где изображение темное — точно та плотность, которая нужна для создания точек.

repeat until converged:
    compute the Voronoi diagram of the current points
    for each point p, find the centroid of its Voronoi cell
        (weighted by local image darkness, not plain area)
    move p toward that weighted centroid
# a cell's centroid pulls its point toward where the "mass" inside that cell is concentrated

Чому розслаблення робить візерунок органічним, а не сітковим

Випадкове розміщення N точок, зважених за яскравістю, призведе до правильно зваженого, але візуально шумного, грудочкового результату — деякі області випадково отримають занадто багато точок близько одна до одної, а інші — занадто мало, лише через випадковість. Алгоритм Ллойда полегшує це, оскільки зведений до ладу діаграма Вороного має конкретну, доведену властивість регулярності: сусідні клітини схиляються до приблизно рівної площі (враховуючи вагу щільності), що змушує точки наближатися до приблизно рівномірного простору в межах будь-якої області відносно постійної яскравості. Результат читається як органічно рівномірно розподілений — подібно до візуальної регулярності шестигранної упаковки, але трохи збуджений основною варіацією щільності, щоб все ще виглядати природно, а не механічно сітковим. Зазвичай достатньо кількох ітерацій (10-30), щоб помітно заспокоїтися; більше ітерацій дає незначну користь, оскільки точки наближаються до фіксованої точки процесу розслаблення.

Вибір функції щільності

У алгоритмі нічого не вимагає від полів ваги надходження з фотографії. Забезпечення його математичною функцією замість цього — спіралею, набором концентричних хвиль, полем уникнення часу Мадленброта або щільністю імітованого кластерів зірок — дає той самий організований пакування точок, керований власними піками та западинами цієї функції, а не темрявою зображення, тому ця техніка також служить генеральним мистецьким інструментом: візуальна сигнатура розслаблення Ллойда (локально однорідне, глобально щільність-відповідне пакування) однакова незалежно від того, чи походить щільність з фотографії чи з рівняння.

Вартість та збіжність на практиці

Кожна ітерація потребує повного перерахування діаграми Вороної (O(n log n) за допомогою правильного алгоритму sweep-line, хоча багато практичних реалізацій приблизно це роблять швидше шляхом растрової обробки піксельної сітки з безпосереднього визначення карти найближчих точок), плюс один прохід з урахуванням зважених центроїдів на клітинку, O(пікселів) в цілому за ітерацію, оскільки кожен піксель відвідується один раз для накопичення в його власну клітинку. Для інтерактивних канв, що містять кілька тисяч точок, обчислення приблизної діаграми Вороної на сітці та виконуване кожного кадру є досить дешевим, щоб дозволити її підтримувати живо у браузері, що і дозволяє демо стіплера візуально анімувати переміщення та встановлення точок в реальному часі, а не лише показувати один кінцевий кадр.

Frequently asked questions

Чому точки накопичуються в щільних областях у темних ділянках і рідкісно розташовуються в світлих, не отримуючи на це вказівки?

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

Що насправді робить алгоритм Ллойда геометрично?

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

Чи можна використовувати цю техніку не лише для відтворення фотографії точками?

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

Спробуйте наживо

Усе, що вище, працює прямо у вашому браузері — відкрийте Stippling & Pointillism і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.

▶ Відкрити симуляцію Stippling & Pointillism

Що ви знайшли?

Додати кроки відтворення (опційно)