Как начать с процедурной генерации?


147

Процедурная генерация была недавно поставлена ​​в центр внимания (Spore, MMO и т. Д.), И это кажется интересной / мощной техникой программирования.

У меня такие вопросы:

  • Знаете ли вы какие-либо проекты среднего размера, которые используют методические процедуры генерации?
  • Какой язык / класс языков лучше всего подходит для процедурного поколения?
  • Можете ли вы использовать процедурную генерацию для «серьезного» кода? (т.е. не игра)

1
Хотите знать, если вы найдете эту статью из X-Team полезной? x-team.com/blog/…
— Адам Джерард

Ответы:


117

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

Фракталы тесно связаны с процедурной генерацией.

Terragen и SpeedTree покажут вам удивительные возможности процедурной генерации.

Процедурная генерация - это метод, который можно использовать на любом языке (он определенно не ограничивается процедурными языками, такими как C, поскольку он может использоваться в языках OO, таких как Java, и языках логики, таких как Prolog). Хорошее понимание рекурсии на любом языке укрепит ваше понимание процедурного поколения.

Что касается «серьезного» или неигрового кода, методы процедурной генерации использовались для:

  • моделировать рост городов с целью планирования управления движением
  • моделировать рост кровеносных сосудов
  • SpeedTree используется в фильмах и архитектурных презентациях

Этот Perlin Noise очень похож на фильтр «облаков» в Photoshop.
— doubleOrt

Первая ссылка не работает
— Жан Карло Мачадо

Некоторая Electro музыка использует процедурное поколение, чтобы быть созданным
— Пойда

50

Процедурная генерация контента вики:

http://pcg.wikidot.com/

если то, что вы хотите, не там, то добавьте его;)


11
Я не могу скопировать всю вики здесь! Здесь нет «существенной части».
— Мартин

12

Процедура генерации контента теперь полностью написана для GPU, поэтому вам нужно знать язык шейдеров. Это означает, GLSL или HLSL. Это языки, связанные с OpenGL и DirectX соответственно.

Хотя я предпочитаю Dx11 / HLSL из-за скорости, более легкой кривой обучения и Frank D Luna , OpenGL поддерживается на большем количестве платформ.

Вам также следует проверить WebGL, если вы хотите сразу перейти к написанию шейдеров, не тратя (значительное) время, необходимое для настройки игрового движка OpenGL / DirectX.

Процессуальное содержание начинается с шума.

Таким образом, вам нужно узнать о шуме Перлина (и его преемнике Симплекс шума ).

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

Shadertoy был создан процедурным гением, Inigo Quilez , продуктом демо-сцены, которая работает в Pixar. У него есть несколько видео на YouTube ( отличный пример ) сессий живого кодирования, и я также могу порекомендовать их.


17
Что вы имеете в виду "процедурная генерация контента теперь полностью написана для GPU"? Вы просто говорите о таких вещах, как травинки? Вы не имеете в виду, например, создание карт или городов для игр?
— Дронз

2
Да, я думаю, что «все» комментарии здесь - это чрезмерная генерализация, но в области генерации ландшафта (что, я думаю, является наиболее распространенным видом), это полезный ответ. Хотя я не могу себе представить, кто хотел бы посмотреть, как кто-то набирает код в видео.
— Nate CK

1
Тот, кто хочет научиться писать сложный код, например, шейдеры, или научиться использовать сложные шаблоны в своем дизайне. И это только царапает поверхность.
— Ультроман Такоман

«Процедурная генерация контента теперь полностью написана для GPU, поэтому вам нужно знать язык шейдеров». это просто не соответствует действительности и 100% вводит в заблуждение. (Я делаю простой проект процедурного поколения, я написал 0 строк шейдерного кода в моей жизни)
— сокращение активности

9

Если вы хотите, чтобы пример генератора мировых пластин тектоники, эрозии, дождя и т. Д., Посмотрите на: https://github.com/ftomassetti/lands

Кроме того, есть симулятор эволюции цивилизаций:

https://github.com/ftomassetti/civs

Блог, полный интересного ресурса:

dungeonleague.com/

Это заброшено сейчас, но вы должны прочитать все его сообщения


Интересные источники.
— SalahAdDin

8

Я не эксперт в этом, но я могу попытаться дать несколько ответов:

  1. NetHack и его братья являются открытым исходным кодом и в значительной степени зависят от процедурной генерации уровней (карт). Ссылка на скачивание. Если вы больше заинтересованы в создании ландшафта / текстуры / облака, я бы порекомендовал вам поискать Gamasutra и GameDev, в которых есть немало статей на эту тему.

  2. AFAIK Я не думаю, что есть большая разница между языками. Большая часть кода, который вы увидите, будет на C / CPP, потому что он все еще остается официальным языком разработчиков игр, но вы можете использовать все, что захотите ...

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

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


8

На эту тему есть отличная книга:

http://www.amazon.com/Texturing-Modeling-Third-Procedural-Approach/dp/1558608486

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

Также стоит упомянуть, что существует профессиональный программный пакет, который реализует полный процедурный рабочий процесс, называемый SideFX's Houdini. Вы можете использовать его для изобретения и создания прототипа процедурных решений проблем, которые впоследствии можно будет преобразовать в код.

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


7

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

http://en.wikipedia.org/wiki/Demoscene


3

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

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

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

я видел слишком много «городских генераторов», которые в основном состоят из коробок произвольной формы с текстурой окон: (


3

(Более 10 лет спустя ...)

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

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

Вот несколько примечательных приемов:

Несколько игр, известных своим процедурным поколением:

Видео-учебник о процедурной генерации суши .

Конференция по генерации процедурного контента для игр, имеет много видеороликов на тему: все процедурное

Радоваться, веселиться.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.