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

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

Мои вопросы таковы:

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

Ответ 1

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

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

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

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

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

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

Ответ 2

Вики-запрос создания процедурного содержимого:

http://pcg.wikidot.com/

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

Ответ 3

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

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

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

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

Итак, вам нужно узнать о шуме Perlin (и его преемнике Симплексный шум).

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

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

Ответ 4

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

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

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

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

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

Ответ 5

Существует отличная книга по теме:

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

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

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

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

Ответ 6

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

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

Ответ 7

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

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

https://github.com/ftomassetti/civs

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

dungeonleague.com/

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

Ответ 8

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

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

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

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