Генеративное искусство, как и любая тема программирования, может быть запугиваться, если вы никогда не пробовали его раньше. Я всегда был заинтересован в этом, потому что я люблю находить новые способы, которыми может быть использован программирование творчески. Кроме того, я думаю, что кто-то может оценить концепцию произведения искусства, которые буквально создают себя.
Что такое генеративное искусство?
Генеративное искусство является выходом системы, которая принимает свои собственные решения о части, а не человека. Система может быть такой же простой, как одна программа 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”