/ generative_art

Как я погружался в digital art

Как любитель всякого DIY, у меня постоянно зудела идея "А не сделать бы мне что-то эдакое?". Эдакого в интернете навалом, выбирай - не хочу. Одним из главных критериев было чтобы это эдакое каким-то образом преобразовывало информацию поступающую на вход и выдавало какой-то результат, который ты сам врядли бы выдал.

Воодушевился идеей того, как на ютубе какой-то бот генерит короткие видосы с 2 прямоугольниками. Начал смотреть в сторону нейронных сетей, искусственного интеллекта, генетических алгоритмов и т.п. Однако, как бы ни расписывали как легко и просто стартануть с tensorflow.js, все же нужно какое-то понимание того, как это работает и как этим управлять.
Для меня это оказалось непосильной задачей, требующей сил и времени для изучения.

2019-09-22_23h00_56

Человек я нетерпеливый, хотелось приступить прямо сейчас не особо что-то изучая.
К тому времени у меня в руках был переделанный (при помощи палок и саморезов) лазерный гравер в плоттер.

Каким то образом я набрел на Processing(IDE для скетчей на Java, с помощью которых можно рисовать) и начал открывать для себя Generative Art.
Если вы не знакомы с этим понятием, то вики говорит, что Процедуральное искусство (англ. Generative Art) – объединение высоких компьютерных технологий с искусством, с использованием автономной системы, которая может самостоятельно определять особенности художественных работ, которые в противном случае потребовали бы участия самого художника. С одной стороны можно утверждать, что система лишь воспроизводит генеративный художественный замысел творца, а с другой, что система берет на себя роль творца.

generative-art

В принципе, это то, что я и хотел! Конечно, картина сама себя полностью не нарисует, но отчасти - да! Тут я был конечно абсолютный 0 и не особо понимал с чего начать. Но из примеров было понятно, что чтобы получить результат, придется программировать. Это мы вроде можем, причем алгоритмы предполагают просто использование обычных конструкция типа циклов и т.п. Нужно было просто углубиться в специфику, как рисовать фигуры, линии, как в том же canvas в HTML.

По началу я тыкал примеры на openprocessing, менял в них переменные и условия, читал доку по processing. Потом обнаружил, что можно писать на p5.js (не нужно вникать в java как в оригинальном processing) и это вообще было идеально до определенного момента. А именно до того, пока я не задумался над тем, как начать переносить результаты работы скетчей на бумагу.

Если в растре передавать моему DIY плотеру, он будет либо это как-то криво переводить в g-code по контурам, либо как то попиксельно рисовать. Возникла необходимость переводить результат скетчей в svg. Да и еще, мой педантизм требовал от меня сразу на берегу разобраться с возможностью многоцветного рисования и многослойного экспорта.

Долгое гугление англоязычных формуов и статей дало мне понимание что с p5.js это увы невозможно и его можно оставить для каких-нибудь generative art фишек для web (что тоже неплохо). Зато все это возможно с оригинальным Processing на Java. Сильно плеваться я не стал, за плечами был опыт С# и я начал погружаться дальше.

Помимо программной части, меня интересовал вопрос как это все точно и быстро переносить на бумагу. Вообще, оригинальная программа для EleksMaker довольно глюченная и очень не любит работать с svg. Еще одно порция гугления наткнула меня на прикольный аппарат AxiDraw. Аппарат конечно немного дороговат для меня и я подумал что мой гравер/плоттер вполне сойдет, но только с доработками рисующей головки. Конечно так резво он не будет бегать как AxiDraw, но результат будет!

К тому моменту я уже успел обзавестись 3D принтером AnetA8. Некоторое время я потратил, чтобы его доработать и научиться немного в 3D печать. Быстренько спроектировал головку, которая бы поднималась/опускалась при помощь сервопривода и заменил деревянную на пластиковую.

При ознакомлении с описанием и возможностями AxiDraw я нашел довольно много всяких скетчей/программ по конвертации изображений с помощью разных эффектов (преобразование с помощью TSP (Traveling Salesman Problem), например) в svg. Как потом оказалось, проги были написаны на том же Processing с gui библиотекой. В них можно было на лету менять параметры обработки, что очень удобно (не нужно лезть к код). Также нашел плагин для Inkscape с эффектами, которые можно применять в редакторе и с возможностью управлять AxiDraw. Моей главной ошибкой было то, что я думал, что оригинальный AxiDraw управляется с Arduino с GRBL прошивкой (как для всяких ЧПУ). Подключив свой EleksMaker, я получил 0 эффекта.

После долгих копаний каким образом можно получать G-code из моих svg, и как мне его закидывать в EleksMaker, я нашел для себе более менее работоспрособный вариант, который описал в статье. В итоге процесс выглядел следующим образом.

  1. svg файл закидываем в Inkscape
  2. Подгоняем размеры для А3 или А4
  3. Переводим в g-code при помощи плагина - самый ужасный этап, потому что если слишком элементов, все может запросто накрыться (решение для этого я пока не нашёл)
  4. Результат перевода закидываем в Universal G-Code sender
  5. Рисуем
Посмотреть эту публикацию в Instagram

#drawer #test #processing

Публикация от Jem Jem (@drawbot_art)

На какое-то время мне этого было вполне достаточно (т.к. я начинал с простых скетчей с изображениями окружностей или спиралей и элементов для экспорта было не так много) пока я практиковался с Processing и переводом рисунков на бумагу.

Мой педантизм между тем требовал найти решение для рисования больших объектов (больше чем А3). Вариант рисования большого объекта по частям никак не подходил. Поиски в гугле меня натолкнули на удивительный проект - Polargraph.

Polargraph - рисовальная машина на 2 шаговых двигателях, управляемых Arduino (в первых версиях, сейчас v.3.1 управляется NodeMcu), работающий в полярных координатах. Этот проект меня порадовал масштабируемостью - фактически, нет особых границ для рисунка, достаточно нудно указать в настройках расстояние на котором расположены двигатели друг от друга и размер осбласти печати!!! Это просто фантастика.

IMG_1582-Edited
Естественно, я сразу загорелся и начал собирать информацию о том как это все запилить.

Подробнее о сборке Polargraph и аналога Axidraw я бы хотел расписать отдельно в следующих статьях.

Для тех, кому интересно посмотреть на процесс разрабокти и результаты, welcome в telegram @drawbot_art и instagram - drawbot_art.