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


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.