Recentemente, fiz essa pergunta e a conclusão parece ser que o uso de programação genética ( GP ) para criação de conteúdo de jogos para procedimentos não foi realmente feito. Eu quero mudar isso.
Estou bastante certo de que o GP pode ser implantado para ajudar a encontrar um novo gerador de terreno. A pergunta que estou chegando é como isso pode ser alcançado?
Todos os GPs têm algumas partes básicas que podem ser generalizadas para todos os GPs (seleção dos pais, recombinação, mutação, sobrevivência). Eu posso descobrir isso sozinho. O problema surge nas partes específicas do problema. É assim que você representa o problema no código (isso geralmente usa uma árvore) e como você avalia o quão bom um gerador pode ser (pode ser um ou mais valores).
As perguntas em poucas palavras:
Como você representaria um gerador de terreno de uma maneira que possa ser analisada em uma árvore?
Que tipo de terreno isso teria que gerar? (mapa de altura, gráfico de vértices, ...)
Quanto menos isso for baseado em um hightmap, melhor.
O que seria usado para avaliar a adequação de uma solução?
ex: queremos terrenos interessantes para que possamos ter um dos valores como a variação média nas normais de cada vértice no terreno.
fonte
Respostas:
Você pode ter alguma sorte com uma abordagem semelhante às imagens genéticas de Karl Sims .
Ele usa um conjunto simples de operadores em uma linguagem semelhante ao LISP, de modo que a saída de qualquer operador possa ser utilizada para influenciar a imagem, da mesma forma que em alguns idiomas de sombreador (ou seja, um escalar seria um valor em escala de cinza,
vector3
seriaRGB
, etc.) )Embora eu ache que isso seja coisa de implementação, o que você provavelmente quer são as palavras-chave, que (iirc) contêm todos os princípios básicos:
sin, cos, tan
etc.)x, y
)sqrt, pow, abs, inverse
)fBm, noise2, noise3
)mandelbrot, julia
)lerp, quad, step, smoothstep
)(Algumas das opções acima podem não estar em sua implementação; eu encontrei o trabalho dele há muito tempo e fiz algumas tentativas do que você está descrevendo ao longo dos anos - para que as memórias estejam vazando :)
Mantendo-o interessante (e rápido)
Tive um pouco de sorte com uma abordagem de várias camadas que reduziu enormemente a quantidade de evoluções mortas.
Contudo...
Agora que eu pulei convenientemente o algoritmo de condicionamento físico , usei principalmente a abordagem de "seleção não natural" de Karl Sims, na qual você vê a geração atual no meio do quadrado de um monte de filhos (popularizado pelas Ferramentas de Potência de Kai na época - aqui está uma imagem do que eu quero dizer ) ..
No entanto, você provavelmente poderia ter um conjunto de imagens de treinamento, talvez algumas de imagens de satélite e outras artificiais com qualidades particulares, e talvez use a wavelet ou a análise 2D FFT nelas versus o terreno que você está testando?
Este é um tópico interessante, mas duvido que você precise de uma resposta :)
EDIT: ahh. tive que remover um monte de links porque eu sou um novo usuário: - |
fonte
Não tenho certeza de que você possa responder a essa pergunta, mas sinto uma explicação sobre por que pode ser uma resposta útil o suficiente. Então, Respostas em poucas palavras:
Algoritmos genéticos são geralmente usados para resolver um problema conhecido em que você pode definir o ambiente através de regras. Em seguida, você pode criar conjuntos de dados que representam propriedades diferentes que afetam como as coisas reagem às regras. O computador então executa uma 'rodada' com o conjunto de dados inicial, seleciona o número X superior, mistura seus valores após emparelhá-los e faz outra rodada. Um exemplo comum disso é 'criar um troll melhor' encontre um conjunto de valores em que o troll geralmente se sai muito bem em seu ambiente (é capaz de caçar e comer, matar ou ficar longe dos moradores, pode coletar itens e acumular todos os objetos brilhantes que deseja etc.).
Só não tenho certeza do que você está tentando realizar é aplicável no domínio da geração de terrenos. A única coisa que posso sugerir seria o tipo de avaliação do conteúdo do jogo em que você não queria planejar um mundo, mas queria fazer um em que o caminho da IA pudesse ser calculado de maneira agradável ou algo assim. Mesmo com isso, você está procurando um único ou pelo menos limitado conjunto de mundos.
fonte
Definitivamente um gráfico de vértice (uma malha), é compacto em termos de armazenamento e pode ser rasterizado (tesselated) sob demanda.
Autômatos celulares. Eu posso pensar em duas implementações:
Autômatos definidos por regras, talvez com elementos de autômatos finitos (quando o estado atual, como tentativas de contador ou tempo ocioso, é levado em consideração).
O próprio conjunto de regras pode ser representado como uma árvore de decisão de ramificação ou um simples lote de comandos (não tenho certeza se funcionará)
É apenas um conjunto de regras para cada nó
Construtores do mundo. Em vez de aplicar um solucionador para cada nó, você pode criar apenas alguns deles e permitir que eles naveguem na malha.
Ainda assim, receio que a segunda abordagem precise ser apoiada pela primeira: a aleatoriedade inicial precisa ser suavizada e não tenho certeza se os construtores podem fazer o truque. Afinal, toda célula viva tem mitocôndrias.
A integridade do terreno resultante - não deve parecer um mish-mash. E a diversidade - geralmente queremos que o maior número possível de variações seja representado possível (o terreno plano de uma extremidade a outra não é divertido). Talvez algo mais complexo, como a forma como os nós vizinhos se encaixam (tundra no meio do deserto, o que?)
Tenho que experimentá-lo com meu gerador de malha quando / se tiver algum tempo livre =)
fonte