Provavelmente, a pior coisa que aconteceu no campo da geração de conteúdo processual (supondo que essa seja realmente a área de geração de conteúdo processual, da qual não tenho muita certeza) é o ruído de Perlin. O ruído de Perlin é incrivelmente adequado (pelo menos se você não olhar muito de perto) para gerar paisagens interessantes. Na geração subreddit
/ r / procedural, uma semana não passa sem que alguém publique um "sistema de geração processual" que acaba sendo o ruído perlin visualizado em cores diferentes. (Durante a redação deste artigo, duas dessas postagens apareceram!)
Não quero humilhar o barulho de Perlin. Essa é uma ferramenta incrivelmente útil para a geração de procedimentos, que se tornou um ponto de entrada nessa área para muitas pessoas, inclusive eu. Mas, ao mesmo tempo, é muito confuso, porque implica que a geração processual é muito mais simples do que realmente é. A maioria das postagens semanais sobre “sistemas de geração de procedimentos” em
/ r / processuraleration desaparece sem deixar rasto quando seus autores descobrem que o próximo passo na geração de procedimentos é muito mais complicado. A verdade é que o barulho de Perlin foi uma espécie de feliz coincidência. É ótimo para gerar paisagens interessantes, mas não há razões sistemáticas ou repetíveis.
Mike Cook publicou recentemente um
tutorial que contrasta o espaço de possibilidades com o espaço de geração. Se você criar um sistema de geração para criar X, o espaço de possibilidades será igual a todos os Xs possíveis e o espaço de geração será todo o X que seu sistema pode realmente gerar. Mike ilustra essa idéia com o Minecraft:
No caso do meu jogo
Dragons Abound , o espaço de possibilidades inclui todos os mapas possíveis, incluindo muitos casos degenerados, por exemplo, um mapa que consiste inteiramente do oceano com uma pequena ilha. O espaço de geração é o espaço menor de todas as cartas que os
Dragões Abundam podem realmente gerar. Graças às várias regras usadas,
Dragons Abound não pode gerar um mapa do oceano com uma pequena ilha; portanto, este mapa não está no espaço de geração de jogos. Comparando o espaço de possibilidades com o espaço de geração é uma visão interessante e útil da geração procedural, por isso recomendo que você leia
o post de Mike , que explica essa ideia em mais detalhes, e há vários exemplos interativos.
Além do espaço de possibilidades e do espaço de geração, também é útil pensar em um "espaço interessante". Se criarmos X, então este é o espaço de todos
os X
interessantes. Ou seja, no caso do meu jogo, este é o espaço de todas
as cartas de fantasia
interessantes . Um espaço interessante é um subconjunto do espaço de possibilidades e, esperamos, cruza-se com o espaço de geração - por exemplo, espero que pelo menos algumas das cartas geradas pelo meu jogo sejam interessantes.
Antes de seguir em frente, admito prontamente que "interesse" é um conceito vago e subjetivo. Minhas idéias e suas idéias sobre coisas interessantes provavelmente não coincidem. Eu nem sempre sei o que
me parece interessante - muitas vezes vejo algo novo e acho interessante, embora eu não pensasse que iria gostar até ver. Pior, quanto mais interessante vemos, menos interessante se torna. Quando você vê um recurso interessante em vinte cartas seguidas, ele não parece mais interessante. Portanto, "interesse" não é tão fácil de entender. No futuro, falarei mais sobre o que torna as coisas interessantes (e no passado eu tinha algo a dizer sobre a ideia íntima de um
espaço de criatividade ), mas até agora isso não é muito importante. É suficiente concordar que algumas coisas são mais interessantes que outras, e que coisas mais interessantes estão em um "espaço interessante", enquanto coisas menos interessantes não são.
É possível ilustrar um espaço interessante da mesma maneira que Mike mostrou o espaço de possibilidades e o espaço de geração? Como sugerido acima, um espaço interessante é um subconjunto do espaço de possibilidades, que (se você tiver sorte) cruza com o espaço de geração:
Um bom gerador se cruza fortemente com um espaço interessante; um gerador ruim é fraco.
Esses padrões são apenas uma metáfora, mas, dentro da estrutura dessa metáfora, quero fazer a seguinte pergunta: indiquei corretamente as
formas dos diferentes espaços? A forma do espaço de possibilidades não é realmente importante, apenas precisa conter outros dois espaços. Mas as formas do espaço de geração e do espaço interessante são questões mais interessantes (sic). Eu pintei os dois como formas compactas únicas dentro do espaço de possibilidades. Isso é razoável?
Acredito que designar o espaço de geração como uma elipse compacta é uma boa opção para muitos geradores de procedimentos, e especialmente para algo como o ruído Perlin. O formulário implica que o gerador crie todas as soluções em um único espaço claramente definido e compacto. Se o gerador puder criar X, geralmente ele poderá criar todos os vizinhos de X. Geralmente, não há grandes “furos” ou distorções estranhas no espaço de geração.
Os espaços de geração geralmente se parecem com isso por duas razões. Primeiramente, no nível da aplicação prática, um gerador é uma pequena quantidade de código associada a um espaço de possibilidades. Atualmente, a
Dragons Abound contém cerca de 28 mil linhas de código fonte. Comparado a muitos outros geradores de cartões processuais, isso é muito (talvez até um recorde), mas ainda é extremamente pequeno comparado ao espaço de possibilidades de todos os cartões de fantasia. Portanto, não importa quão inteligente seja o código do jogo, seu espaço de geração ocupará apenas uma pequena parte do espaço de possibilidades e, como o código do computador é, por definição, algorítmico e determinístico, esse espaço será relativamente compacto. Ou seja, se o jogo puder criar um tipo de cartão, certamente criará muitos outros cartões semelhantes.
A segunda razão pela qual os espaços de geração são compactos é estratégica. Para mim, o objetivo de criar
Dragons Abound é gerar mapas interessantes para que eles se cruzem com o espaço interessante o máximo possível. E é difícil entrar em um espaço interessante, é muito pequeno comparado ao espaço de possibilidades. De fato, é muito, muito pequeno. Todos esses espaços têm um grande número de dimensões, e o tamanho do espaço cresce essencialmente como uma potência do número de dimensões. A verdadeira relação entre o espaço interessante e o espaço de possibilidades é mais ou menos assim:
Apenas um espaço interessante é muito, muito menor. Isso força a geração processual a aderir a certas estratégias. Por exemplo, por que o jogo não cria mapas completamente aleatórios? Então o espaço de geração ficaria assim:
Somente pontos verdes são muito menores. As chances de passar de uma das cartas aleatórias para um pequeno espaço interessante são praticamente nulas. Para aumentar as chances de entrar em um espaço interessante, o criador da geração procedural usa conhecimento sobre o espaço de possibilidades e o espaço interessante para controlar a geração - o criador muda o espaço de geração para que ele fique localizado principalmente na vizinhança do espaço interessante e não apenas distribuído aleatoriamente.
Por todas essas razões, será lógico perceber o espaço de geração como uma área conectada e compacta.
Mas acredito que desenhar um espaço tão interessante provavelmente estaria completamente errado. Deve ser descrito como um conjunto dividido e disperso de áreas de formas estranhas. Porque Porque (1) as coisas podem ser interessantes por várias razões ortogonais e (2) o interesse é uma função descontínua.
Considere, por exemplo, esses dois fragmentos de mapa:
O primeiro fragmento é interessante, pois o litoral é minuciosamente detalhado e contém muitas pequenas ilhas. O segundo fragmento tem uma costa chata e suave, mas a costa tem características interessantes - é desabitada e tem o nome sinistro “Bleak Shore”. De certo modo, esses dois fragmentos são interessantes, mas por razões completamente diferentes. Portanto, não esperamos que essas duas partes do espaço interessante sejam vizinhas.
Além disso, essas duas partes do espaço interessante provavelmente não estão conectadas. De forma alguma será possível converter gradualmente o primeiro mapa interessante em um segundo mapa interessante sem criar vários mapas desinteressantes ao longo do caminho. Portanto, essas duas partes do espaço interessante são separadas.
Portanto, um espaço interessante não é uma área única, mas um conjunto de áreas divididas. Todo esse espaço interessante tem formas suaves e compactas?
Repito, não declaro que posso dar uma definição completa de "interesse". Mas em alguns aspectos, podemos concordar em vários pontos. Em primeiro lugar, se X é interessante, isso não significa que 2X será duas vezes mais interessante. Tomemos o exemplo da Costa Triste - uma área da costa misteriosa no mapa é interessante, mas uma dúzia delas será muito desinteressante. Você provavelmente pode criar outros exemplos de como o “interesse” se comporta de uma maneira estranha e contra-intuitiva. Portanto, o interesse tem alguns elementos de descontinuidade - não é uma função suave que muda de maneira racional e previsível quando se move pelo espaço de possibilidades.
Tudo isso nos faz entender que devemos designar um espaço interessante como uma série de áreas divididas de uma forma estranha.
Você já está começando a entender por que criar um bom gerador de procedimentos é uma tarefa difícil. Devido à maneira como os algoritmos funcionam e às limitações de nossos recursos, o espaço de geração será pequeno e compacto. Ao mesmo tempo, queremos entrar em tantas áreas estranhas e dispersas de espaço interessante quanto possível. É incrível que nós consigamos entrar neles!
Agora, voltemos ao tópico do ruído Perlin. Como será esse esquema para o espaço de geração de ruído Perlin no espaço paisagístico? Eu acho algo assim:
O gerador de ruído de Perlin tem mais interseção com um espaço interessante particular dentro do universo de todas as paisagens possíveis. E isso é excelente - quase tudo o que pode ser criado usando o ruído Perlin cai nessa área e parece bem interessante.
Mas esse rápido sucesso é enganoso. Se você é novo na geração procedural, verá como o ruído Perlin funciona bem e provavelmente decidirá que o ruído Perlin é uma varinha mágica para gerar todos os tipos de paisagens interessantes, sem mencionar todos os tipos de geração procedural. Mas, como mostra o diagrama, o espaço de geração de ruído de Perlin está realmente longe de muitas outras partes do interessante espaço paisagístico. O segundo passo padrão na geração de paisagem processual é a adição de rios. Mas se você tentar perceber os rios com a ajuda do ruído Perlin, descobrirá que é impossível! De maneira alguma se pode expandir os limites do espaço de geração de ruído de Perlin para alcançar espaços interessantes distantes contendo rios realistas.
O barulho de Perlin é enganador em outro sentido. Anteriormente, eu falei sobre o fato de o espaço interessante ser tão pequeno que, se você quiser entrar nele, precisa ter certo conhecimento sobre o espaço de possibilidades e o espaço interessante para controlar a geração de procedimentos. Mas o algoritmo de ruído de Perlin não sabe nada sobre paisagens, processos geológicos, o que as pessoas acham interessantes e, de alguma forma, funciona bem sem esse conhecimento! O barulho de Perlin acabou sendo a exceção, confirmando a regra (*). Mas se você é novo na geração de procedimentos, provavelmente não conhece esta regra. Na verdade, você está deduzindo uma regra incorreta - toda a geração processual como um todo deve funcionar
como o ruído Perlin.
(* Não foi por acaso que ele "se tornou" uma exceção. O ruído de Perlin se tornou um ponto de partida popular justamente porque é uma exceção. É muito fácil começar com o ruído de Perlin sem ter que estudar uma grande quantidade de informações sobre paisagens.)
Considere outro ponto de partida popular na geração de conteúdo processual: esquemas de masmorra. Diferentemente da geração paisagística, os esquemas de masmorra não possuem um algoritmo semelhante ao ruído Perlin, que magicamente cria soluções em um espaço interessante. Com base no que sabemos sobre o espaço de geração e o espaço interessante, podemos adivinhar que os geradores de masmorras devem (1) incluir conhecimentos específicos sobre os dias posteriores e a interessante, ou (2) criar masmorras principalmente desinteressantes. De fato, se você olhar para os geradores de masmorras publicados no ano passado na / r / processuralgeneration, verá que a maioria deles não contém nenhum conhecimento sobre masmorras além de verificar a conexão de todas as salas e, portanto, os dados exibidos por esses projetos são provavelmente mais aleatórios do que interessantes. .

Então, se você considera que concorda mais ou menos com o que escrevi, que lições podem ser aprendidas desse conceito de espaço interessante?
- A geração de procedimentos é fundamentalmente complexa porque o espaço interessante é um alvo muito pequeno e difícil de atingir.
- Apesar das exceções ocasionais, como o ruído Perlin, não se deve esperar que algoritmos simples e ingênuos gerem com sucesso conteúdo interessante. Uma boa geração de procedimentos deve incluir e usar um conhecimento extenso e aprofundado da área de assunto e uma compreensão do que torna o conteúdo interessante.
- Porém, mesmo nos algoritmos de melhor geração, o espaço de geração é compacto, mas o espaço interessante não é, portanto, espera-se que a geração procedural falhe frequentemente e, portanto, os sistemas precisam ser construídos de acordo.
- Em áreas temáticas complexas, o espaço interessante é dividido e tem uma forma estranha. Você não deve esperar que um algoritmo ou abordagem que funcione bem em uma parte de um espaço interessante necessariamente funcione tão bem em outra parte. Portanto, devemos esperar que a geração procedural inclua muitos algoritmos diferentes usando diferentes partes do espaço interessante.
Se você está apenas começando a trabalhar com a geração de procedimentos, recomendo que pense em diversão. O que tornará a saída interessante? O que o algoritmo precisa entender para produzir dados que geralmente são interessantes? Que outra maneira de gerar dados pode ser interessante? Que novo algoritmo eu preciso para gerar esse tipo de interesse? Como combinar / equilibrar com o primeiro algoritmo?
Por exemplo, se eu quisesse criar um gerador de masmorras, pensei nas masmorras por um tempo e decidi que, na minha opinião, as masmorras são interessantes se:
- Eles parecem ter sido criados para se tornar armazéns, celas de prisão
e outras infraestruturas subterrâneas do grande castelo - Mais tarde, eles foram preenchidos com monstros e reconstruídos por eles para satisfazer suas necessidades de abrigo, comida, água, proteção contra ataques etc.
Agora você pode pensar em como deve ser o nível de armazéns subterrâneos, como deve ser o algoritmo para a geração procedimental de variações desse tema e como os monstros podem mudar esse esquema. Acredito que pensar em tais questões permitirá que você aprenda mais sobre geração de procedimentos do que a implementação de outro gerador de paisagem no ruído Perlin ou um gerador de masmorra de salas e corredores aleatórios.