fundo
Eu corro um servidor minecraft onde vou projetar uma cidade inicial de escala bastante grande. Eu tenho uma série de coisas, como placas de regras e gaiolas da multidão, eu gostaria de colocar em prédios lá. A cidade em si será extremamente grande e espalhada, de preferência entre 1000 e 1000 blocos.
Os próprios edifícios terão cubo ou pegadas retangulares baseadas em um determinado cubo base, como todos os múltiplos de 3 blocos. As ruas e a distância entre os prédios terão, de preferência, de 5 a 11 quarteirões de largura, dependendo da importância da rua.
Quando eu começar o plano da cidade, saberei exatamente o tamanho que quero que os edifícios tenham e quantos haverá.
O problema
O problema é projetar o layout da cidade. Obviamente, com algo dessa escala, e eu vindo de um background de programação e não de um planejador urbano, é bastante desafiador começar a entender o problema.
O problema especificamente é que eu quero que a cidade pareça o mais natural possível. É claro que isso seria bastante fácil de construir em um padrão de grade simples, mas eu quero evitar uma grade, ou qualquer coisa que pareça uma grade, o máximo possível.
A questão
Quais algoritmos posso buscar para me ajudar a projetá-lo usando código? Eu estava pensando que pareceria mais natural se eu usasse fractais de alguma forma, já que o minecraft usa fractais já em sua geração de terreno, e uma cidade parece crescer naturalmente em um padrão fractal.
Eu acho que, de certa forma, é semelhante a um algoritmo de execução de tetris, portanto, se alguém tiver soluções que existem nessa direção, também ajudaria. Estou imaginando algo em que poderei definir as formas que quero usar, e o software itera até encontrar a solução mais "ideal" para a distribuição uniforme dos edifícios. Já existe algo para me ajudar a resolver esse problema usando python, de preferência visualmente usando pygame?
Naturalmente, isso também tem implicações interessantes para a geração das cidades em geral no design de jogos, por isso estou muito animado para ver qual é a melhor solução.
edit Para ser claro, estou apenas procurando o layout neste momento, pois os prédios serão projetados e construídos no jogo.
Respostas:
Eu recentemente implementei um algoritmo para um layout de cidade processual. Ainda é um trabalho em andamento, mas parece promissor para mim. Dê uma olhada:
O algoritmo usado para criar esse layout é vagamente baseado em L-Systems . Eu tenho uma
Element
classe base , que tem um retângulo marcando seu lugar no mapa e um métodoGrow
, que cria outroElements
dentro do retângulo e / ou gera alguns objetos no mapa. Depois, há elementos reais, herdada esta classe base:City
,Street
,Building
etc.A geração começa com vários objetos "iniciais" (no meu caso, apenas um único
City
elemento colocado aleatoriamente no mapa). Em seguida, o sistema itera sobre todos os elementos, chamandoGrow
, até que todos os elementos se tornem inativos (Grow
retornosfalse
), ou algum grande número de iterações passa.A cidade na imagem é construída usando apenas algumas regras simples:
City
torna-se umStreet
elemento que divide a área em algum lugar.Street
crescem 0-3 ruas laterais, dividindo ainda mais a área.Street
s tentam continuamente ajustar um tamanho aleatórioBuilding
ao lado.O resultado não é muito interessante, mas também não é ruim. O sistema pode ser estendido facilmente e é simples o suficiente para entender o que está acontecendo (-8
fonte
Há uma palestra do GDC sobre geração de edifícios processuais há alguns anos. É para criar edifícios individuais com base em um conjunto de modelos, mas não para criar cidades inteiras (definindo ruas e assim por diante). Infelizmente, não há código livre para acompanhá-lo. O sistema descrito na palestra é implementado no Unreal, embora não esteja claro se está na versão gratuita do UDK ou não. De qualquer forma, você pode usar algumas das mesmas idéias para criar seu próprio sistema.
A pesquisa em "edifícios processuais" ou "cidade processual" também fornecerá alguns outros artigos e artigos sobre o assunto.
fonte
Encontrei um tutorial muito bom / detalhado para criar cidades procedurais há um tempo. Existe um vídeo @ http://www.youtube.com/watch?v=-d2-PtK4F6Y O tutorial está no blog do autor: http://www.shamusyoung.com/twentysidedtale/?p=2940 Espero que ajude amb
fonte