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

процедурные недавно был привлечен в центр внимания (Spore, MMOs и т. д.), И это кажется интересным/мощным методом программирования.

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

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

8 ответов


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

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

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

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

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

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

создание процедурного контента wiki:

http://pcg.wikidot.com/

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


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

в то время как мои личные предпочтения для Dx11 / HLSL из-за скорости, более легкой кривой обучения и Фрэнк Д Луна, OpenGL поддерживается на других платформах.

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

процедурный контент начинается с шума.

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

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

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


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

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

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

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

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


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

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

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

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

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


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

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


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

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

https://github.com/ftomassetti/civs

блог полный на интересном ресурсе:

dungeonleague.com/

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


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

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

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

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