Как начать с процедурной генерации?
процедурная генерация недавно был привлечен в центр внимания (Spore, MMOs и т. д.), И это похоже на интересную/мощную технику программирования.
Мои вопросы таковы:
- знаете ли вы о каких-либо средних проектах, которые используют процедурные методы генерации?
- какой язык / класс языков лучше всего подходит для процедурного поколения?
- можете ли вы использовать процедурную генерацию для" серьезного " кода? (т. е., не игра)
8 ответов:
вы, вероятно, должны начать с небольшой теории и простых примеров, таких как алгоритм смещения средней точки. Вы также должны узнать немного о Перлин Шума Если вы заинтересованы в создании графики. Я использовал это, чтобы начать работу с моим последним проектом года по процедурному поколению.
фракталов тесно связаны с процедурной генерации.
terragen выступает и SpeedTree покажу вам некоторые удивительные возможности процедурной генерации.
процедурная генерация-это метод, который может использоваться на любом языке (он определенно не ограничивается процедурными языками, такими как C, поскольку он может использоваться в языках OO, таких как Java, и логических языках, таких как Prolog). Хорошее понимание рекурсии на любом языке укрепит ваше понимание процедурной генерации.
Что касается "серьезного" или неигрового кода, процедурные методы генерации были использованы для:
- имитировать рост городов для того, чтобы планировать управление движением
- для имитации роста кровеносных сосудов
- SpeedTree используется в фильмах и архитектурных презентаций
процедурная генерация контента теперь написана для GPU, поэтому вам нужно знать язык шейдеров. Это означает GLSL или HLSL. Это языки, привязанные к OpenGL и DirectX соответственно.
в то время как мои личные предпочтения для Dx11 / HLSL из-за скорости, легче кривой обучения и Фрэнк Д Луна, OpenGL поддерживается на других платформах.
вы также должны проверить WebGL, если вы хотите перейти прямо к написанию шейдеров без необходимости потратьте (значительное) время, необходимое для настройки игрового движка OpenGL / DirectX.
процессуальное содержание начинается с шума.
поэтому вам нужно будет узнать о Perlin noise (и его преемнике Симплекс шума).
Shadertoy является превосходным справочником для изучения шейдерного программирования. Я бы рекомендовал вам прийти к нему, как только вы дали шейдерное кодирование, так как код там не для математически брезгливого, но вот как делается процедурное содержание.
Shadertoy был создан процедурным гением,Quilez Иниго, продукт демо-сцены, который работает в Pixar. У него есть некоторые видео на youtube (пример) живых сеансов кодирования, и я также могу рекомендовать их.
Я не специалист в этом, но я могу попробовать и внести несколько ответов:
NetHack и его brethern являются открытым исходным кодом и в значительной степени зависят от процедурной генерации уровней (карт). ссылке для "загрузки" ее. Если вы больше заинтересованы в создании ландшафта/текстуры/облака, я бы рекомендовал вам искать круто и GameDev что есть довольно много статей на эти темы.
AFAIK I не думаю, что есть большая разница между языками. Большая часть кода, который вы видите, будет на C / CPP, потому что это все еще очень Официальный язык разработчиков игр, но вы можете использовать все, что захотите...
Ну, это зависит, если у вас есть проект, который может получить выгоду от такой технологии. Я видел процедурное поколение, используемое в симуляторах для армии (которые можно считать игрой, хотя они не очень воспроизводимы :)).
и небольшой Примечание-мое определение если процедурная генерация-это что-то, генерирующее много данных из небольшого количества правил или шаблонов и много случайности, ваши результаты могут отличаться :)
есть отличная книга на эту тему:
http://www.amazon.com/Texturing-Modeling-Third-Procedural-Approach/dp/1558608486
он смещен в сторону визуальных эффектов и анимации в режиме реального времени, но теория и идеи могут использоваться за пределами этих областей, я полагаю.
Это может также стоить отметить, что существует профессиональный пакет программного обеспечения, реализующий полный процессуальных рабочего процесса SideFX Гудини. Вы можете использовать его для изобретения и прототипирования процедурных решений проблем, которые позже можно перевести в код.
хотя это довольно дорогой пакет, он имеет бесплатную лицензию на оценку, которая может использоваться как очень хороший образовательный и/или инженерный инструмент.
процедурная генерация активно используется в демосцене для создания сложной графики в небольшом исполняемом файле. Уилл Райт даже сказал, что он был вдохновлен демосценой, делая споры. Что может быть лучшим местом для начала.
Если вы хотите пример мирового генератора моделирования тектоники плит, эрозии, дождевой тени и т. д. взгляните на: https://github.com/ftomassetti/lands
кроме того, есть также симулятор эволюции цивилизаций:
https://github.com/ftomassetti/civs
блог полный на интересном ресурсе:
dungeonleague.com/
сейчас он заброшен, но вы должны прочитать все его должности
самое главное-проанализировать, как структурированы дороги, города, кварталы и здания. узнайте, что все, например, здания имеют общее. взгляните на фотографии, карты, планы и реальность. если вы сделаете это, вы будете на шаг впереди людей, которые рассматривают городское строительство как просто компьютерно-технологическое дело.
далее вы должны выработать решения о том, как создать эту геометрию в крошечных, отдельных этапов. вы должны определить правила, которые составляют красивый город. если вы находитесь в 3D моделирование вы должны переосмыслить многое из того, что вы узнали, чтобы компьютер мог следовать вашим инструкциям в любой ситуации.
для того, чтобы не потерять трек вы должны настроить много операторов, которые отвечают только за небольшие части всего процесса. это значительно упрощает отладку, расширение и улучшение вашей системы. на следующем шаге вы должны связать эти операторы и проверить результаты, изменив параметры.
Я видел слишком много "котлов Сити" в основном состоят из коробок произвольной формы с некоторыми текстурами окон на них : (