Программное обеспечение Introversion, создатели игр Defcon, Uplink и Darwinia (среди прочих) начали работу над игрой около года назад, которая широко использует PCG для генерации городов, вот видео их работы , и вы можете прочитать больше об этом в дневнике разработки игры (начните с первой части внизу страницы!).
Это сразу заинтересовало меня, и, видя потенциал для игр, я сразу же начал исследовать технологию. Я собрал папку из 18 PDF-файлов на эту тему (научные статьи, презентации SIGGRAPH и т. Д.). Здесь я загрузил его для вас .
Основной подход заключается в использовании L-систем, однако я так и не нашел достаточно понимания, чтобы что-то из этого сделать. Я пробовал другие, менее успешные подходы, такие как Вороной , рекурсивное разбиение прямоугольной области на более мелкие области и небольшое смещение границ для получения некоторой случайности и многоугольного деления.
Последний метод, который я получил из постов Майка в Code Code ( здесь и здесь ). Скриншоты, показанные в его блоге, заставляют меня пускать слюни, и моя самая большая мечта программиста - когда-нибудь получить что-то похожее на это. Я написал ему по электронной почте, чтобы спросить, как он это сделал, и вот соответствующая часть его ответа, я уверен, что он не против, чтобы я разместил это здесь:
L-Systems, безусловно, один из способов, но я этим не занимаюсь. Основой моего метода является подразделение полигонов. Я начинаю с простого многоугольника, который представляет всю территорию города. Затем я делю его (примерно) пополам, а затем разделяю эти два многоугольника и т. Д., Пока не доберусь до размера городских кварталов. В этот момент края всех моих полигонов обозначают дороги. Затем я использую тот же метод подразделения, чтобы разбить блоки на участки размером с здание.
Дьявол, конечно, в деталях, но это основной метод.
Мне, например, до сих пор не удалось полностью реализовать решение, которое меня устраивает, но оно остается одним из, если не мечтой моего самого большого программиста, когда-либо достичь чего-то подобного.