Как начать с процедурной генерации? - PullRequest
141 голосов
/ 01 октября 2008

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

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

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

Ответы [ 8 ]

115 голосов
/ 01 октября 2008

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

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

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

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

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

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

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

http://pcg.wikidot.com/

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

14 голосов
/ 21 августа 2013

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

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

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

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

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

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

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

8 голосов
/ 30 августа 2014

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

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

https://github.com/ftomassetti/civs

Блог на интересном ресурсе:

dungeonleague.com /

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

8 голосов
/ 13 июля 2011

Есть отличная книга по теме:

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

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

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

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

8 голосов
/ 01 октября 2008

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

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

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

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

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

7 голосов
/ 01 октября 2008

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

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

3 голосов
/ 06 октября 2013

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

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

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

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

...