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


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

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

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

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 noise (и его преемнике Симплекс шума).

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/

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

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

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

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

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