Как начать с процедурной генерации?
процедурные недавно был привлечен в центр внимания (Spore, MMOs и т. д.), И это кажется интересным/мощным методом программирования.
Мои вопросы таковы:--5-->
- знаете ли вы о каких-либо проектах среднего размера, которые используют процедурные методы генерации?
- какой язык / класс языков лучше всего подходит для процедурной генерации?
- можете ли вы использовать процедурную генерацию для" серьезного " кода? (т. е. игра)
8 ответов
вы, вероятно, должны начать с небольшой теории и простых примеров, таких как алгоритм смещения средней точки. Вы также должны узнать немного о Перлин Шума Если вы заинтересованы в создании графики. Я использовал это, чтобы начать с моего последнего проекта года по процедурному поколению.
фракталов тесно связаны с процедурной генерации.
terragen выступает и SpeedTree покажет вам некоторые удивительные возможности процедурного поколения.
процедурная генерация-это метод, который может использоваться на любом языке (он определенно не ограничен процедурными языками, такими как C, поскольку он может использоваться в языках OO, таких как Java, и языках логики, таких как Prolog). Хорошее понимание рекурсии на любом языке укрепит ваше понимание процедурной генерации.
Что касается "серьезного" или неигрового кода, процедурных методов генерации привыкли:
- имитировать рост городов для того, чтобы планировать управление трафиком
- для имитации роста кровеносных сосудов
- SpeedTree используется в фильмах и архитектурных презентаций
генерация процедурного контента теперь написана для GPU, поэтому вам нужно знать язык шейдеров. Это означает GLSL или HLSL. Это языки, привязанные к OpenGL и DirectX соответственно.
в то время как мои личные предпочтения для Dx11 / HLSL из-за скорости, более легкой кривой обучения и Фрэнк Д Луна, OpenGL поддерживается на других платформах.
вы также должны проверить WebGL, если хотите перейти прямо к написанию шейдеров без необходимости потратьте (значительное) время, необходимое для настройки игрового движка OpenGL / DirectX.
процедурный контент начинается с шума.
таким образом, вам нужно будет узнать о шуме Perlin (и его преемнике Симплекс шума).
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/
он заброшен сейчас, но вы должны прочитать все его сообщения
самое главное-проанализировать, как структурированы дороги, города, блоки и здания. узнайте, что общего у всех зданий eg. взгляните на фотографии, карты, планы и реальность. если вы сделаете это, вы будете на шаг впереди людей, которые рассматривают городское строительство как чисто компьютерно-технологическое дело.
далее вы должны выработать решения о том, как создать эту геометрию в крошечных, отдельных этапов. вы должны определить правила, которые составляют красивый город. если вы в 3d моделирование вы должны переосмыслить многое из того, что вы узнали, чтобы компьютер мог следовать вашим инструкциям в любой ситуации.
чтобы не потерять трек, вы должны настроить много операторов, которые отвечают только за небольшие части всего процесса. это упрощает отладку, расширение и улучшение вашей системы. на следующем шаге вы должны связать эти операторы и проверить результаты, изменив параметры.
Я видел слишком много "котлов Сити" в основном состоят из коробок произвольной формы с некоторыми текстурами окон на них: (