Рубрики
Без рубрики

Как создать генеративное искусство Менее чем за 100 строк кода

Генеративное искусство, как и любая тема программирования, может быть запугиваться, если вы никогда не пробовали его раньше. Я … Теги с Python, учебником, Showdev.

Генеративное искусство, как и любая тема программирования, может быть запугиваться, если вы никогда не пробовали его раньше. Я всегда был заинтересован в этом, потому что я люблю находить новые способы, которыми может быть использован программирование творчески. Кроме того, я думаю, что кто-то может оценить концепцию произведения искусства, которые буквально создают себя.

Что такое генеративное искусство?

Генеративное искусство является выходом системы, которая принимает свои собственные решения о части, а не человека. Система может быть такой же простой, как одна программа Python, если она имеет правила и некоторые аспекты случайности.

С программированием довольно простым, чтобы придумать правила и ограничения. Это все условные заявления. Сказав это, нахождение способов сделать эти правила создать что-то интересное может быть сложно.

Игра Жизни Знаменитый набор из четырех простых правил, определяющих «рождение» и «смерть» каждой клетки в системе. Каждый из правил играет роль в продвижении системы через каждое поколение. Хотя правила простые и легко понимать, сложные шаблоны быстро начнут возникать и в конечном итоге формируют увлекательные результаты.

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

Лучшие примеры генеративного искусства – это те, которые находят комбинацию предсказуемости и случайности, чтобы создать что-то интересное, которое также статистически Иррепрокатный Отказ

Почему вы должны попробовать это?

Не все боковые проекты созданы равными, и генеративное искусство может быть не то, что вы склонны проводить время. Однако, если вы решите работать над проектом, вы можете ожидать, что эти преимущества:

  • Опыт – Генеративное искусство – это просто еще одна возможность отточить некоторые новые и старые навыки. Он может служить воротом для практикующих концепций, таких как алгоритмы, структуры данных и даже новые языки.
  • Ощутимые результаты – В мире программирования мы редко получаем, как какая-то физическая вещь выходит из наших усилий, или, по крайней мере, я. Прямо сейчас у меня есть несколько плакатов в моей гостиной, где отображаются отпечатки моего генеративного искусства, и я люблю, что программирование несет ответственность за это.
  • Привлекательные проекты – У нас был опыт объяснения личного проекта для кого-то, возможно, даже во время интервью, без легкого способа передать усилия и результаты проекта. Генеративное искусство говорит о себе, и большинство ваших творений будут впечатлены вашими творениями, даже если они не могут полностью понять методы.

Где вы должны начать?

Начало работы с генеративным искусством – это тот же процесс, что и любой проект, самый важный шаг – придумать идею или найти ее для создания. Как только у вас есть цель, то вы можете начать работать над технологией, необходимой для этого.

Большинство моих генеративных художественных проектов были достигнуты в Python. Это довольно легкий язык, чтобы привыкнуть, и у него есть некоторые невероятные пакеты, доступные для управления изображениями изображения, такими как Подушка и Pycairo Отказ

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

Генератор спрайта

Этот проект начался, когда увидел пост, демонстрирующий генератор спрайта, написанного в JavaScript. Программа создала 5×5 Pixel Art Sprites с некоторыми параметрами случайных цветов, и его вывод напоминал разноцветные пространственные захватчики.

Я знал, что хотел практиковать манипулирование изображениями в Python, поэтому я решил просто попытаться воссоздать эту концепцию самостоятельно. Кроме того, я подумал, что я могу расширить его, так как оригинальный проект был настолько ограничен в размере спрайтов. Я хотел быть в состоянии указать не только размер, но и количество из них и даже размер изображения.

Вот взгляд на две совершенно разные выходы из решения, с которым я закончил:

Эти два изображения вообще не напоминают друг друга, но они оба результаты одной и той же системы. Не говоря уже о сложности изображения и случайность Из генерации спрайта существует чрезвычайно высокая вероятность того, что даже с теми же аргументами эти изображения навсегда станут одним из видов. Я люблю это.

Если вы хотите, чтобы тысячи примеров того, насколько разнообразны результаты, проверьте Это твиттер бот Я настроил на Raspberry Pi, который делает новый пост каждые 20 минут.

Окружающая среда

Если вы хотите начать играть с помощью генератора спрайта, есть небольшая работа основана, которая должна быть сделана в первую очередь.

Настройка правильной среды с Python может быть сложно. Если вы не работали с Python раньше, вам, вероятно, нужно будет скачать Python 2.7.10 Отказ Я планирую в конечном итоге обновить этот учебник для Python 3+ как 2,7 становится устаревшим.

Вопросы зависимости имеют много с проектами Python. Если вы начнете бегать в проблемы, вы можете делать то, что я сделал и настроил Виртуальная среда Отказ Последнее, но не в последнюю очередь, убедитесь, что у вас также установлена подушка.

Как только у вас установлена среда, вы можете скопировать мой код в файл с расширением .py и выполнить со следующей командой:

Python SPRITHETHOTS.PY [SPRITE_DIMENSIONS] [номер] [Image_size]

Что-то Очень важно Обратите внимание, что размеры спрайта должны быть Нечетное число Отказ Причина этого – это то, как обрабатывается симметрия, что будет иметь больше смысла, когда вы копаете в реализации.

Код

Это решение – это длительный путь от идеального, но он показывает, что создание генеративного искусства не принимает тонна кода. Я сделаю все возможное, чтобы объяснить ключевые фигуры.

Главная Функция начинается, создавая начальное изображение и определение размера спрайтов. Два цикла несут ответственность за определение границы для каждого спрайта, в основном разделяют размеры изображения по количеству запрошенных спрайтов. Эти значения используются для определения координат для каждого.

Давайте игнорируем прокладку и посмотрите на изображение ниже. Представьте, что каждый из четырех квадратов представляет собой спрайт размером 1. Граница, которая передается следующей функции, относится к верхней левой и нижней правой координатам. Таким образом, кортеж для верхнего левого спрайта будет (0,0,1,1), тогда как кортеж для правого правила (1,0,2,1). Они будут использоваться в качестве измерений и координат базы для квадратов каждого спрайта.

Функция create_invader Определяет границу для каждого квадрата внутри спрайта. Тот же процесс определения границы применяется здесь и представлен ниже, только вместо полного изображения мы используем заранее определенную границу для работы внутри. Эти окончательные координаты для каждого квадрата будут использоваться в следующей функции, чтобы фактически нарисовать спрайт.

Чтобы определить цвет, простой массив трех случайных корпусов RGB и три чернокожих используются для моделирования натянутой 50% шансов. Функции лямбда вблизи верхней части кода несут ответственность за генерацию значений RGB.

Настоящая хитрость этой функции создает симметрию. Каждый квадрат в паре со значением элемента. На рисунке ниже вы можете увидеть значения элементов, когда они достигают центра, а затем уменьшаются. Квадраты с соответствующими значениями элементов нарисованы с тем же цветом.

Как create_square Получает свои параметры от create_invader , он использует очередь и значения элементов, прежде чем для обеспечения симметрии. Первое вхождение значений имеют их цвета на очередь, и зеркальные квадраты выключают цвета.

Я понимаю, насколько трудно прочитать и понять чужое решение для проблемы, и шероховатость кода, безусловно, не помогает со своей сложностью, но, надеюсь, вы получите довольно хорошую идею для того, как она работает. В конечном итоге было бы невероятно, если вы сможете вообще ловить код и выяснить совершенно разное решение.

Вывод

Генеративное искусство требует времени, чтобы полностью оценить, но это так стоит. Я люблю быть возможность комбинировать программирование с более традиционной визуальной целью, и я определенно многому научился в каждом из моих проектов.

В целом, возможно, могут быть более полезные проекты, чтобы преследовать и генеративное искусство, возможно, не должно быть чем-то, с кем вам нужен опыт, но это тонна веселья, и вы никогда не знаете, как это может отделить вас от толпы.

Спасибо за чтение!

Оригинал: “https://dev.to/thebuffed/how-to-create-generative-art-in-less-than-100-lines-of-code-1k9m”