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

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

Первый вопрос: Что вы хотите создать?

Обрисуйте, что именно будет делать ваш генератор. В этой статье я буду именовать это «артефактом», но в действительности это может быть все, что угодно: процедурно сгенерированные птицы, истории, анимированные пляски, рецепты гаспачо, RPG-квесты, шахматные вариации и т.д.

Теперь самое сложное. Втяните, выдохните и напишите на листке бумаги все, что делает ваш артифакт неплохим? Какими свойствами он должен обладать? «Увлекательный», «Гармонический», «Играбельный»? Теперь идем глубже: чем специфичней предмет, которую вы хотите создать, тем подробнее ее надо описать. Что значит «увлекательный» степень? Для Super Mario, Civilization и Bejeweled ответ будет совсем разным. Свойств, описывающих «хороший роман о любви и паранормальных явлениях в антураже викторианской эпохи» будет гораздо вяще, чем свойств, описывающих просто «хороший роман». Генераторы, какие сделать проще всего – это те, где «хороший» артефакт можно обрисовать в виде набора конкретных свойств.

Теперь перевернем этот проблема вверх тормашками: что делает ваш артефакт «плохим»? Перечислите все – и попросту нежелательные свойства, и абсолютно недопустимые. Теперь поставьте галочку рядышком с пунктами, которых не должно быть ни в коем случае. Это ваши ограничения. Самые верные генераторы – это те, что имеют подробно описанные ограничения.

Итак, сейчас у вас есть список свойств и ограничений, которые должны и не должны быть у ваших артефактов. Положим, мы хотим создать генератор с «пространством возможностей» (т.е. универсальный генератор, способный основывать любые типы артефактов), где у большинства артефактов будут неплохие свойства, а у нескольких (или вообще ни у одного) – плохие. Кроме того, нам необходимо, чтобы генератор выдавал некий ассортимент артефактов, а не одинешенек и тот же идеальный артефакт снова и снова. Однако то, насколько размашистым будет этот ассортимент, решать вам – дизайнеру. Эта проблема обрисована здесь Гиллианом Смитом (Gillian Smith) и исследована тут Майклом Куком (Michael Cook).

Теперь у нас есть база, позволяющая приступить к конструированию методов, с поддержкой которых создаются артефакты.

Есть, впрочем, и альтернативный подход: обрисованный выше метод хорош в случае, когда вы заранее ведаете, что именно хотите сделать. В ситуации, когда вы участвуете в гейм-джеме, создаете прообраз или работаете над сайд-проектом, ничто не мешает включить гибкость и импровизацию! Вы можете приступить с создания методов, чтобы выяснить, что «хочет» сделать ваш генератор (т.е. то, какие свойства он генерирует лучше итого), затем поразмыслить, какие из этого могут получиться артефакты, и в крышке концов понять, какой в результате может получиться генератор.

Создание «художника в коробке»

Artist-in-a-Box

Когда создавался редактор Spore, его разработчики узко сотрудничали с командой художников, чтобы понять, как художник или аниматор подходит к скульптингу и текстурированию основываемого существа. Поняв этот процесс и разработав алгоритм, какой мог бы его повторить, они могли бы создать «художника в коробке», способного процедурно генерировать созданий такого же качества, что и сделанные самим аниматором. Дизайнер Чэйм Гинголд (Chaim Gingold) разъяснил этот процесс в 2007 году на GDC (вот аудиозапись и слайды), а арт-директор Оушен Куигли (Ocean Quigley) использовал вылитый процесс в эксперименте по созданию строительных блоков, из которых можно собирать цельные города.

Таким образом, имеет смысл сесть рядышком с тем, кто умеет делать артефакты, которые вы хотите делать своим генератором, и попросить его, чтобы он показал вам этот процесс. Какие проблемы он себе задает в процессе создания? Как принимает решения? Как он описывает компромиссы между различными решениями? Как он описывает проблемы, которые ему приходится держать в уме? Как он именует элементы, на которыми работает, и все взаимоотношения между ними? К слову, в академическом вселенной для всего этого есть термин «онтология».

В некоторых районах написаны даже специальные (часто противоречивые) труды, в каких авторы описывают, как именно создаются шедевры в той или иной районы – эдакие своды правил. К примеру, в теории музыки есть несколько таких систем: для джазовых импровизаций, гармонических мелодий в стиле Баха, поп-музыки и т.д. Общие принципы создания нарратива обрисованы в трудах вроде «Путешествия Героя» или, к примеру, в вики-проекте TV Tropes. У художников за это отвечает золотое сечение, искусство краски и композиционные правила (правда, я в своей работе не нашла эти труды здоровыми, но, возможно, вы будете удачливей меня). Ни одна из этих систем не является законченной и не гарантирует, что вы стопроцентно будете основывать хорошие артефакты, но они в любом случае могут послужить чем-то вроде наставников и ключей вдохновения.

Итак, спросите себя: как бы эту проблему решил человек?

dress generator

От правил к генеративным методам

К сожалению, знание того, как человек мастерит что-то – это не то же самое, что научить компьютер сделать что-то. Люд хороши в оценивании, построении догадок и синтезе огромного числа информации о событиях прошлого. Компьютеры знают лишь то, что мы им рассказали (а многие проблемы спрашивают очень много неявного знания), но они хороши в выполнении расчетов и рассмотрении большенного количества возможностей. Поэтому наши методы должны сделать так, чтобы компьютер решал проблемы как человек или, по крайней мере, копировал отдельный человеческие навыки. Методы, которые особенно хороши для создания генераторов (генеративные методы), дадут компьютеру отдельный из нижеперечисленных навыков:

  • Формирование знания о возможных вариантах (навык А)
  • Создание определенной структуры (навык Б)
  • Создание условных правил для выбора вариантов (А2)
  • Создание вариативности в структуре (Б2)
  • Умение задавать себе проблемы об ограничениях (я удовлетворяю этому ограничению?) (навык В)

Распространение

Это самый несложный вид генеративных методов. Допустим, у вас есть определенная вещь, и вам необходимо раскидать (распространить) ее по определенному пространству или времени. У таких методов, как правило, почти нет всеобщей структуры (Б), но они зачастую очень хороши в выборе вариантов (А). К образцу, можно доработать случайность, тем самым поменяв процент распространения, или воспользоваться «перетасовкой колоды» (кладем все карты в одну колоду, и если какая-то карта будет использована, отправляем ее на «погост»), позволяющей случайно не выбрать дважды один и тот же вариант. Эти методы также придутся для формирования условных правил (А2). Большинство систем выстроены на тщательно отобранных параметрах, заданных для каждого варианта, потому вы можете просто сравнить эти фиксированные параметры и сделать необходимый выбор. А вот произвольные условия на практике реализовать довольно сложно.

К образцу, вы работаете над RPG, и вам нужно раскидать по игровым локациям различных монстров (А). Высокоуровневые монстры должны быть в высокоуровневых локациях, водные монстры – в воде и так дальше (А2). Сюда можно добавить немного структуры вроде нескольких монстров-малышей, блуждающих рядышком с монстром-боссом. Эти методы подойдут и для лута: высокоуровневый лут вероятней итого будет выпадать из высокоуровневых монстров (А2), но при выпадении все равновелико будет элемент случайности, т.к. система будет выбирать одну или несколько предметов из огромного списка доступных вариантов (А).

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

Parametric

Параметрические методы

Положим, у вас уже есть почти готовый артефакт, но вы знаете, что его можно немножко доработать. У вас есть музыка, и вы хотите немного ею поиграться, к образцу, сделать громче или мягче. У вас есть чайник, и вы хотите сделать его носик немало изогнутым, корпус – более высоким, низким, толстым или ювелирным, а основу – более узкой или широкой. У вас есть группка инопланетных созданий, и вы хотите сделать их ноги длиннее и тоньше, ступни – размашистее, животы – худее или размером с бочку, и чтобы эти изменения также воздействовали на их голос. К слову, именно так варьируются существа в No Man’s Sky. Это очень верная и управляемая технология! Если вы работаете с 3D-моделями, то эти методы могут быть дешифрованы в Maya, что позволяет объединить их с другими анимациями (как трюк из Spore, использованный для анимаций строительных блоков). Однако вариативность (А) в этом случае будет выполняться вдоль фиксированного одномерного числового линии, а структурной вариативности не будет вовсе (Б2). Да, вы можете увидать что-то «новое», но никогда – удивительное.

Более совершенные образа параметрических методов используют другие формы входных этих, и могут генерировать новые артефакты, которые базируются не лишь на числах, но и на точках, путях и графиках. Когда вы при помощи планшетной ручки пишете в Photoshop линию, то она становится входными данными для алгоритма, какой генерирует мазок, рассчитывая параметры давления, скорости и наклона. В Spore для создания созданий использовался Metaballs, алгоритм создания геометрии, умеющий мастерить плавные трубы вдоль линий в 3D-пространстве. В числе иных алгоритмов для заполнения пространства и путей – диаграмма Вороного, шум Перлина, алгоритмы триангуляции, 3D-экструзия или вращение, а также алгоритм Diamond-Square для фракталов. Эти алгоритмы особенно подходят для интерактивных генераторов, так как пользователь может гарантировать их входными данными.

Хотите больше? На inconvergent.net еще куча подобных алгоритмов, да еще и с отворённым кодом. Они могут выдать поразительный результат, но, к сожалению, нередко недостаточно управляемы, чтобы удовлетворить требованиям, необходимым для геймплея и прочих артефактов, спрашивающих жестких ограничений.

Плиточные методы

Порежьте проблему на тонкие кусочки и поместите их в одинаковые ячейки. Создайте несколько решений, какими можно было бы заполнить эти ячейки. То есть артефактами в этом случае будут просто наборы заранее заготовленных решений (вариантов). Такая система используется, к образцу, при создании игрового поля в настольных играх вроде «Колонизаторов» или «Предательства в доме на холме» (в качестве образца цифровой игры можно привести «Цивилизацию»). Остров в «Колонизаторах» и особняк в «Предательстве» конструируются из одних и тех же плиток, но в любой игре они кладутся по-разному, что меняет геймплей. Самые ранние конфигурации генеративного контента можно обнаружить в музыкальной игре Musikalisches Würfelspiel из 1750-ых годов, в какой пианисты могли складывать вместе музыкальные «плитки» (в этом случае – такты), тем самым создавая более-менее приемлемый вальс.

Плиточные методы неплохи в создании маломасштабных структур (Б), но не способны создавать в них вариативность (Б2). Крупномасштабные структуры контролировать сложнее – они могут выйти полностью случайными. Кроме того, вы можете задать немало продвинутые ограничения, касающиеся, например, того, какие плитки могут соседствовать, а какие нет, но для того, чтобы учесть такие ограничения, потребуется сложный алгоритм («пляж может соседствовать с джунглями, но должен быть на дистанции двух плиток от реки…»). Отдельные плитки имеют весьма ограниченный набор возможных вариантов (А), потому что вариант для любой плитки выбирается человеком. У таких систем недостаточно познания, чтобы создавать хорошие новые плитки самостоятельно.

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

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

mything

Грамматические методы

Эти методы – одни из моих излюбленных, поскольку дают возможность создавать очень глубокие и сложные структуры, оставляя контроль над вариантами. «Грамматика» – это компьютерно-научный термин для того, что вящие штуки сделаны из штук поменьше, а эти штуки сделаны из еще немало мелких штук. Мой любимый пример – это Nested. Вселенная заключается из галактик, которые состоят из планет, которые состоят из континентов, какие населены существами, в которых полно мыслей, мечтаний, воспоминаний и атомов. Любой символ имеет набор подсимволов, и когда символ «распаковывается», он должен избрать один из этих подсимволов (вариантов), после чего любой подсимвол тоже «распаковывается», выбирая подподсимвол, и так далее… Грамматические методы упрощают расшифровку знаний об отдельном артефакте, а также его структуре и вариантах, и все это – в одном кусочке этих. Мне так нравятся эти методы, что я даже создала библиотеку, помогающую людям с ними трудиться – Tracery. Ее можно использовать, к примеру, чтобы создать сервис для твиттер-бота: вот по этим ссылкам можно отыскать несколько странных и креативных твиттер-ботов, созданных другими, а по этим – мои собственные.

Недостача грамматических методов в том, что они не умеют работать с ограничениями, за исключением случаев, когда эти ограничения в них уже встроены (к образцу, если кровать может быть только в доме, то лишь дом может иметь кровать). Грамматическим методам сложно основывать высокоуровневые отношения между вещами, сгенерированными в разных точках. Если вы желаете сделать предсказание смерти злодея в самом начале метода, то сделать это будет сложно, но тут на поддержка приходит «артиллерия» в виде решателей ограничений.

Constraint solvers

Решатели ограничений

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

Самый старый и простой способ решения этой проблемы – несложный перебор всех возможных вариантов. Сделайте все возможные варианты контента, щелкните по всем переключателям, создайте альтернативную вселенную и зачислите там все возможные решения. Другими словами, протестируйте все ваши ограничения, пока не поймете, какой вариант трудится лучше всего. Это отличное решение! Правда, далеко не для всех проблем… Как произнесёт вам любой математик, чем больше вариантов, тем больше артефактов, а нам охота чего-то побыстрее и без лишних манипуляций вроде создания альтернативной вселенной.

Тут могут сгодиться различные пути-сокращения, которые зависят от того, какую структуру имеют ваши ограничения (если в вероятном будущем я не пойду покупать мороженое, то зачем мне выбирать вкус этого мороженого?). Истина, вручную это делать очень долго и муторно (спросите об этом, к образцу, разработчика Storyteller).

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

Поскольку эти инструменты пока чересчур большие и громоздкие, их трудно встроить в игровые движки. Кроме того, они пока в новинку, потому руководств по ним не так уж много. Самое лучшее, на мой взгляд, это вот эта статья Адама Смита (Adam Smith), посвященная программированию стабильных моделей. Также обратите внимание на Craft от Иэна Хорсвилла (Ian Horswill) – это узкий случайный генератор чисел, недавно портированный на javascript. Помяните мое слово, пройдет немножко времени, и эти методы станут очень популярными!

Агенты и симуляции

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

А теперь внимание… Люди – не один-единственные, кто способен решать проблемы!

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

Рулевое поведение (это тоже одинешенек из методов, заслуживающих собственной статьи) может помочь в генерации сложного поведения гурьбы. Машинки Брайтенберга изначально были просто мысленным экспериментом о несложных устройствах, оснащенных двумя светочувствительными глазами и двумя колесиками, вращение какими позволяет менять направление движения. Несмотря на полную безмозглость, эти конструкции могли демонстрировать «страх» и «смелость», а их поведение было портировано на многие стили и использовано в настоящих роботах.

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

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

Ltrees

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

  • Предметы, которые вы можете модифицировать («генотип»)
  • Вещи, по которым можно судить о итогах модифицирования («фенотип»)
  • Способ превратить первое во второе

В случае с красками генотип – это массив чисел с плавающей точкой. Этот массив скармливается параметрическому генератору, основывающему красивые анимированные цветы (т.е. превращающему генотип в фенотип). Пользователь может посмотреть, какой цветок ему нравится (фенотип, какой можно оценить). Он выбирает наиболее понравившийся цветок, его генотип клонируется и мутируется (это элемент, какой можно модифицировать, помните?), после чего рождается вытекающее поколение, и так, раз за разом… происходит эволюция! То есть мы имеем дело с сексуальной репродукцией, какая в генетических алгоритмах используется сплошь и рядом, но ею одной дело, разумеется, не заканчивается. Есть еще много различных типов репродукций, каждая из которых еще ждет своего исследователя!

Cellular automata

Клеточные машины полагаются на множество маленьких и простых агентов, каждый из каких функционирует параллельно. Канонический пример – это игра «Жизнь», разработанная Джоном Конвеем (John Conway), где присутствует решетка, в ячеях которой живут крошечные автоматы, каждый из которых обладает собственным поведением. Все это может сгенерировать такое многообразие удивительных поведений и феноменов, что их поиск и каталогизация даже превратились для немало математиков в хобби.

Клеточные автоматы с более сложными правилами использовались для создания Dwarf Fortress, классической Powder, а с расцветом воксельной анимации обрели новоиспеченную жизнь в движке, на котором был сделан Minecraft.

Итак, вы сгенерировали контент…

Вы прошерстили список генеративных методов, составили собственный список свойств и ограничений и, наконец, сделали собственный генератор!

Что дальней?

Генератор не работает

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

Есть ситуации, когда вы можете вычислительным линией определить, что именно пошло не так. Решение в том, чтобы сгенерировать новоиспеченный контент, пока ограничения не будут удовлетворены. Допустим, вы желаете сгенерировать кресло, у которого центр тяжести находится рослее точек опоры (вроде ножек), чтобы оно не опрокинулось. Это можно рассчитать в физиологической симуляции, поэтому если сгенерированное кресло получилось несчастливым, сгенерируйте новое, затем еще одно, и еще – до тех пор, пока оно не будет удовлетворять заданным ограничениям. Этот подход именуется «генерируй и тестируй».

Что может пойти не так с этим подходом? Хм. Что если тест не проходит ни одно сгенерированное вами кресло? Сходит, что контент, удовлетворяющий ограничениям, будет очень редким. Вероятно, дело в том, что вы задали слишком много ограничений: на толщину материала, стоимость, симметричность, комфорт и так далее. То есть большинство ограничений ваши кресла проходят, но одно-два становятся камнями преткновения, и в итоге контент проваливает тест. Возможно, тут пригодится решатель ограничений. Или, вероятно, вам нужно ограничить генератор, чтобы его выбор стал немало консервативным, но в этом случае вы рискуете потерять интересное пространство возможностей.

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

Можно ли использовать это прилагательное для описания персонажа или оно чересчур оскорбительное? Не выглядит ли эта цветовая палитра похожей на корпоративный логотип? Эта штука подлинно похожа на гениталии? Или просто… уродлива? Это, боюсь, сложная и даже неразрешимая проблема. Если вы не в состоянии обрисовать «плохой» контент, то его невозможно отфильтровать, особенно когда пользователи пытаются обогнуть алгоритм обнаружения. В этом случае наилучшим решением будет сделать генератор, в каком невозможно или маловероятно создать какой-либо оскорбительный контент. Но это, к сожалению, сокращает ваше пространство возможностей, поскольку вы удаляете слова, какие безвредны и даже полезны, но лишь до тех пор, пока какой-нибудь находчивый пользователь не скомбинирует их определенным манером.

Эстетика: самая сложная задача

Самая распространенная вина разочарования в генераторах – когда у них не получается создать интересный контент. Что значит «увлекательный»? Зависит от ситуации. Лишь немногие генераторы создают лишь что-то одно. Многие генераторы основывают контент постоянно, а твиттер-боты постят контент каждый час, но в итоге у них набегает вяще контента, чем у генератора романов, который постит их каждый месяц. Потому добиться новизны от матерого твиттер-бота будет очень сложно, потому что он сгенерировал так немало артефактов, что все они начинают казаться менее особыми.

Итак, ваш алгоритм сгенерировал 18446744073709551616 планет. Они, вероятно, слегка отличаются друг от друга, но мере того, как игрок учит их, будут ли они по-прежнему казаться разными? Я люблю называть это «проблемой 10000 тарелок с овсяными шариками». Я могу запросто сгенерировать эти 10000 тарелок с шариками, причем любой шарик будет лежать на новом месте и в новой позиции, и с математической точки зрения все они будут безотносительно уникальными. Но пользователь будет видеть просто много тарелок с овсяными шариками. Перцептивная (то есть воспринимаемая) уникальность – это реальный показатель, и добиться тут хороших результатов очень сложно.

uniqueness

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

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

Выдающиеся артефакты – это еще одна тема для отдельной статьи, однако отдельный эстетические правила диктуют, что человеку нравятся объекты, в каких читается определенный смысл. Людям нравится видеть доказательства процесса и мочи – вроде почвы, вытолкнутой у основания дерева, или травы, вырастающей в тени надгробного камня. Эти структурно-генерируемые тонкости дают постичь, что это не просто объект, а живой мир, пускай и очень маленький. Книжка Кевина Линча (Kevin Lynch) «Image of the City» демонстрирует, что есть факторы, способные сделать город запоминающимся, но главное – поддающимся описанию. Вероятно, в мире есть и другие эстетические правила, пока не отыскавшие своего открывателя.

Итого и дополнительные материалы

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

Если мой труд таки сподвиг вас поиграться с генераторами, то вот чета инструментов, с которых можно начать свои изыскания:

  • cheapbotsdonequick.com – созидатель твиттер-ботов на Tracery, теперь с поддержкой SVG
  • www.contextfreeart.org
  • ncase.me/simulating/ – симуляция «Мир Эмодзи», изумительная игровая площадка для клеточных машин на базе эмодзи

Хотите больше? Хотите повстречать единомышленников?

  • Вот даровой онлайн-учебник по процедурной генерации, написанный ведущими академическими исследователями в этой районы, но с прицелом на игры
  • По уши влюблена в эту книгу замечательного Дэниэла Шиффмана (Daniel Shiffman), какой учит языку Processing сквозь призму природных процессов
  • Группа компьютерной креативности из лондонского Голдсмитса немало и широко работает в области компьютерной креативности, т.е. пытается сделать компьютеры «креативными». Интернациональная конференция компьютерной креативности – то самое место, где многие из этих людей встречаются товарищ с другом, чтобы обменяться идеями. Их последние статьи – это отличный ресурс знаний о генерации живописи, стихотворства, музыки, мемов и так далее
  • Студия экспрессивного интеллекта – это мой дом в UCSC, где мы трудимся над ИИ для художественных целей, а не только для решения проблем
  • Принципы цифровых игр – это каждогодняя конференция об экспериментальных идеях в игровой индустрии, и на ней есть воркшоп по процедурному контенту
  • Научно-геймдизайнерская рок-звезда Майкл Кук запустил ProcJam – каждогодний тематический джем с лекциями, руководствами и инструментами
  • Под чутким руководством Дариуса Каземи (Darius Kazemi) работает National Novel Generating Month – конкурс на создание программы, способной написать цельную книгу. Еще он написал кучу ботов, и еще более громадную груду – о ботах.

Автор Кейт Комптон, So you want to build a generator…