sábado, 19 de novembro de 2022

Um olhar na Geração Procedural

    Outro dia encontrei uma série de tutoriais sobre como fazer landscape 3D por geração procedural no Unity. Eu tenho muito interesse em entender mais como funciona geração procedural assim como aplicações práticas, como a geração de mapas com essa técnica. Desenvolvedores independentes não podem se dar o luxo de passar semanas colocando 5 tipos diferentes de grama num cenário que o jogador pode nem passar durante a jogatina. E sim, uma série de tutoriais, por que assim que encontrei o primeiro veio uma enxurrada depois dele. 

    Quero falar um pouco do assunto, trazer um papo mais técnico pra cá mas sem entrar nos detalhes da programação ou algo assim. 


Primeiramente, o que é Geração Procedural?

    É uma técnica que se utiliza de matemáticas para gerar conteúdo, para criar coisas. É amplamente visto na geração de mapas e mundos, mas não se resume a isso, pode ser usada para gerar qualquer coisa, de textura de pão torrado a comportamento dos seres vivos simulados. 

    Exemplos famosos são o mapa do Minecraft que é gerado conforme o jogador explora os limites, e é tão grande que é praticamente infinito para os jogadores, apesar de ter sim um limite. Outro exemplo é Terraria, em que o mapa inteiro é criado de uma única vez sempre que um novo mundo é gerado, nesse caso as dimensões do terreno estão bem definidas logo no começo. O jogo Spore foi meu primeiro contato com o uso dessa técnica fora da caixinha, eles literalmente criaram alienígenas usando matemática, criaram formas de vida com culturas e tudo mais; e depois veio No Man's Sky quebrando ainda mais barreiras ao gerar o universo inteiro, desde a mais comum e insignificante pedra até os buracos negros no centro da galáxia, quase o jogo inteiro é resultado de fórmulas matemáticas. Números aleatórios? No fim são pseudo randômicos que nada mais são do que matemática de novo. 

    Como dá pra ver, tem como fazer muita coisa ao dominar as aplicações da geração procedural, mas o mais impressionante talvez seja o fato de que não exige pós doutorado em matemática para criar um universo. O conhecimento poderia vir a calhar, não estou negando isso, mas números aleatórios estão embutidos na linguagem de programação, geradores de ruídos quase sempre estão prontos para baixar e usar, e voltando o foco na Unity, não precisa se preocupar nem mesmo com a matemática de fazer curvas por que a ferramenta faz isso por você. Você só precisa unir essas ferramentas todas de um jeito inteligente e pá, tá montada uma matriz representando um mapa topográfico. Muda isso, aquilo, adiciona aquilo outro e pá, você tem um mapa climático. Tira isso, muda mais um tanto de coisa, coloca uma série de parâmetros pro gerador brincar a vontade e pá, tá pronto um gerador de qualquer coisa que a imaginação e algumas habilidades técnicas te permitem. 


Mas faz bastante sentido na prática, não faz?

    Beleza, agora que já atropelei o que é a geração procedural de forma teórica, vou atropelar a explicação de forma prática também. 

    Vamos supor um uso extremamente simplista de geração procedural. Quero, através de matemática, criar um cenário 2D ao estilo dos jogos de plataforma (os clássicos do Super Mario, Sonic, Donkey Kong, em que o personagem só anda para a direita ou para a esquerda, e pode pular para cima. Qualé, cê sabe do que tô falando né?). 

    Só definindo algumas coisas a mais, temos então essa simulação de gravidade puxando o personagem para baixo, e um bloco quadrado sólido por onde o personagem não passa. Nosso cenário vai ser bem pequeno, cabem exatamente até 10 x 10 desses blocos, onde não tem bloco o personagem passa, onde tem bloco o personagem não passa. 

    Aí vou lá e defino que o programa vai criar uma matriz de 10x10, representado todos os possíveis lugares onde eu posso colocar um bloco, e faço o código rodar todas as posições, sempre que encontrar uma posição com y=3 coloca um bloco sólido. O resultado disso é um mapa que é só uma linha reta no ar. Coloco uma roupagem bonita nesse cenário, coloco uma imagem bonita de plano de fundo, digo que meu bloco sólido é uma ponte e posiciono meu personagem em qualquer lugar com y=4 e pronto, meu cenário é gerado via matemática. Tá mais pra lógica, é verdade, mas ainda é matemática. 

    Beleza, nosso cenário está muito simples e poderia ser feito facilmente a mão, pra quê complicar? Bom, e se nosso mapa não tivesse fim? O eixo X tende ao infinito, você ficaria quanto tempo colocando blocos na mão até procurar um jeito mais inteligente de resolver o problema? Essa aqui é uma solução. Mas não estou satisfeito ainda, não vou deixar o mapa infinito, só quero que seja um novo mapa toda vez, pra não ter mapas repetidos, como faço? Traz um gerador de números aleatórios, garanta que ele tenha uma seed diferente sempre que quiser um mapa diferente, e depois seja criativo transformando o resultado dos números aleatórios em colocar ou não um bloco sólido em cada possível posição do cenário.


Um universo de possibilidades

    É aqui que entra a Arte dos geradores procedurais, você está livre para fazer como quiser, é só que técnicas muito simples e diretas vão entregar resultados muito simples e diretos, como o bloco quando y=3. E ainda assim isso é melhor que só tacar o resultado de um gerador randômico como a presença ou não de blocos, por que assim não tem controle nenhum e o resultado não fará sentido, possivelmente sendo até injogável. Coloca regras no gerador de números aleatórios e você tem algo mais imprevisível e ainda controlável, "e se definíssemos a presença do bloco aleatoriamente apenas quando y=3?" ainda não estaria perfeito mas é usável, o resultado iria parecer aquelas fases que testam sua habilidade de pular e cair no lugar certo. Aquela roupagem da ponte? Partes da ponte caíram, e pode ser que o personagem consiga passar por aqui mas pode ser que ele tenha que procurar outro caminho. Não chamei de Arte atoa, o desenvolvedor tem que ter uma noção de o que está buscando e outra noção de quais lógicas e métodos pode usar para alcançar esse resultado, sempre testando e refinando até conseguir. 

    O método de geração procedural provavelmente será mais trabalhoso que os métodos normais de criar conteúdo quando se precisa de criar pouca coisa. Mas quando sua intenção é criar 18 quintilhões de planetas únicos, fazer na mão pode levar um tempinho, melhor buscar uma fórmula pra isso. 

sábado, 12 de novembro de 2022

Confluência no Multiverso da Loucura

     Recentemente eu me peguei perguntando se estou trabalhando no formato certo, será um blog a maneira correta de eu externalizar meus pensamentos? Documentar os desenvolvimentos desse projeto paralelo interminavelmente grande chamado Grimório do Kadin? Tive problemas com meu conteúdo ser encontrado em mecanismos de busca, eu produzo poucos posts longos demais e que não sei quebrar eles em partes menores. Foi quando percebi que eu saí da essência do que eu queria com o blog, O Grimório do Kadin é apenas um dos mundos conectados na Confluência, acabei "deixando os outros portais esgotarem a energia e fecharem". 

    Parece que é hora da manutenção.

    Se eu analisar tudo o que a Confluência é, realmente, os posts do Grimório do Kadin são aqueles dos quais mais me dedico no meu dia a dia a criar conteúdo, mais me dedico a expandir. E como são posts longos que esgotam a energia pois requerem muitas releituras minhas, acabei não postando mais nada, nenhum outro assunto. Vou pegar novos cristais energizados aqui e plugar eles nos portais inativos, bora remexer a poeira parada que tem por aqui e dar voz aos conteúdos vindos de outros mundos. Posts menores parece saudável pro blog

    Bora reformular a estrutura de pensar desse blog para voltar a ir pro rumo que queria. 


sábado, 5 de novembro de 2022

Páginas Perdidas do Grimório do Kadin

     Bom dia, boa tarde, boa noite. Cheguei pra mais um post, desta vez tão espaçado em tempo que dá até vergonha por que tempo eu tive. A boa notícia é que embora eu não dê a moral que o blog pede, o projeto mesmo está sempre vivo na minha mente, matutando ideias e soluções, estou sempre buscando inspirações de várias fontes, mesmo as não relacionadas com magia - principalmente as fontes não relacionadas com magia, diria que são as mais impactantes. 

    O problema da vez é a lore dos módulos da Transformação, as peças que serão passadas para o jogador tentar montar suas magias e com as informações que o jogo precisa para traduzir aquilo em uma magia de fato. 

    Adoro usar D&D como referência. 

    No Dungeons & Dragons, existem algumas características que devem estar presentes em todas as magias, que fazem parte da estrutura da magia, e que são necessárias pois afinal, D&D é um jogo cooperativo e precisa de algumas regras para funcionar. São essas características o Nível da Magia, o Tempo de Conjuração, o Alcance, a presença (ou falta) de Componentes (Verbais, Somáticos, Materiais), a Duração do efeito e por fim, os Alvos
    Eu pessoalmente gosto dessa visão pois, novamente, D&D é um jogo, e ele já trata de questões técnicas de uma magia. É necessário descrever em detalhes o que é necessário para conjurar, o que ou quem a magia afeta, qual a distância máxima que ela consegue ser efetiva ainda, por quanto tempo seu efeito consegue durar. 
    Ainda no D&D, ele faz questão de não descrever, ou de descrever apenas o mínimo possível, dos motivos, dos porquês, pois assim ele deixa aberto ao jogador fazer como quiser, colocar a roupagem, a skin que quiser, o que é exatamente o problema que quero resolver aqui, e isso me diz muita coisa. 
    Se o D&D que é o D&D fez como fez, por que eu faria diferente? Bom, por que eu quero ir além. A WotC tem mais o que se preocupar do que só a sessão de magias no Livro do Jogador. Eu não, estou completamente focado nessa sessão e dane-se o resto do mundo.

    Então prosseguindo, como crio minha skin para meus módulos?

    Vou continuar me apropriando de materiais criados por aí, sejam eles da fantasia ou não. 

    Relendo posts antigos eu fiz referência a Naruto e seus ninjutsus, e aqui os módulos para um ninjutsu é uma mistura das características do chakra do usuário, a manipulação do chakra e os selos com a(s) mão(s). Provavelmente tem mais coisa aí mas tanto faz, tá feita a roupagem pra um sistema de magia que tem até nome, Ninjustsu. 
    No universo de Harry Potter não explica muito bem essa roupagem, tem um fator genético, tem a varinha, tem palavras que precisam ser ditas, tem gestos que precisam ser feito. Na verdade não é um bom exemplo pra mim também pois faz eras desde que assisti pela última vez, mas estou citando pois vi que teve fanfic que tentou (e se páh conseguiu) fazer exatamente o que estou fazendo aqui (um sistema de magia) só que focado nesse universo, confesso que ainda não li, mas está lá, toda uma descrição dando sentido a como a magia do universo do Harry Potter funciona. 
    O jogo Magicka 2 possui 8 elementos (módulos) que podem ser usados sozinhos ou combinados seguindo algumas regras, e algumas formas diferentes de conjurar essas magias como só tacar, ter a si mesmo como alvo ou epicentro do efeito ou encantar a arma com aquele efeito para que ele aconteça em golpes. Existe todo um conjunto de regras tratando cada possível combinação e daí saem a maior parte das magias, pois ainda existem algumas magias que são aprendidas no decorrer do jogo que exigem uma combinação específica dos elementos e uma forma exclusiva de conjuração. A lore desses módulos da magia nesse jogo está em cima desses elementos, que são concedidos ao jogador um a um no começo do jogo e explicado o que são, como elemento da vida ou da necromancia que se anulam, elementos clássicos como água, fogo e terra, mas optaram por não colocar ar, e outros elementos que costumam aparecer quando percebe-se as limitações do sistema dos 4 elementos, como gelo ou relâmpago. Esses são os poderes dos magos lá (deixei uns 2 ou 3 de fora), e acabou a roupagem. Ou melhor, não precisa de dizer mais dessa roupagem pois são auto explicativos na maior parte das vezes, com a apresentação um a um, o que eles fazem. Parece limitado mas não é, é bastante intuitivo, pelo menos dentro do cenário desse jogo. 

    Mas no fim vou dizer que os módulos são runas, cada runa tem suas características, e se posicionadas de certa maneira conectam suas características em efeitos mais complexos, e por aí vai na criação da magia. Evoluo isso ainda mais adicionando os círculos mágicos, então tenho uma mistura de runas e geometria que são ambos esteticamente agradáveis e possíveis de construir num código de computador para que o jogador construa suas magias. Não é como se não houvesse outros métodos, mas é que esse parece um bom começo. 

    Runas e Círculos

    Começando com as Runas, existe uma questão cultural e estética aqui, a cultural é a relação com as runas nórdicas que são várias vezes relacionadas a magia da vida real, e isso causa a questão estética que faz as pessoas já estarem de certa forma acostumadas a verem essas runas pensarem que estão relacionadas a magia. E a questão estética nem precisa estar relacionada as runas nórdicas, vários símbolos trazem misticismo junto com eles, um Ankh, o Olho de Hórus, os vários símbolos do  horóscopo, sigilos então nem se fala, um gerador de sigilos é a automação da criação de símbolos aparentemente mágicos (aparentemente, por que enquanto for só o resultado do script é só um desenho aleatório, a magia de fato viria depois). 
    Existe todo um conceito por trás dessa estética fazer sentido que não pretendo me aprofundar aqui, mas quero dizer que a estética funciona, ela trás para quem vê a ideia de que aquilo está relacionado com magia. Bom, para o meu jogo eu não gostaria de usar nada que já exista de fato nesse ponto, vou usar a ideia, não o conteúdo. Mas eu vou me aprofundar na ideia, na lore, vou tentar criar um motivo para que os símbolos que criar para representar os módulos sejam como são e fazer as coisas com que tenham múltiplas camadas de sentido. No futuro, claro. Por hora, foco em fazer a mecânica funcionar. 
    Por falar em mecânica, os círculos mágicos estão amplamente conectados a magia arcana. Ainda mais, amplamente conectados a magia fantasiosa na cultura popular, apesar de ser mais uma apropriação da fantasia sobre a realidade. E mais uma vez traz consigo um pacote estético muito poderoso, muito presente, o que é bom pra mim: Se a própria imagem é tão atrelada a magia, mesmo uma explicação ruim sobre o por que ela é mágica é mais facilmente aceita! =p
    Falando mais um pouco da mecânica antes de voltar para a lore, tenho aqui então as runas representando os módulos e os círculos representando as conexões entre esses módulos? Ainda não, tenho que criar mais conexões com a Mana e com o desejo do personagem conjurador, e vou fazendo isso lado a lado com a lore


        Tá, mas e a lore

    Porquê uma Runa é mágica? Como ela está relacionada com a magia? Com a Mana? Como esse efeito acontece? Porquê "esse" efeito e não "outro"? Bom, vou ter que simplesmente criar uma resposta agora, sem mais raciocínio lógico em cima de pesquisas. É essa a hora de colocar a culpa em algum deus da magia? Yep.
    Recapitulando, estou trabalhando na criação de um sistema de magia, que com regras e lógica seja capaz de reproduzir quase todas as magias que vemos na fantasia, mas como isso é amplo demais eu decidi começar com a Mana, uma energia em específico amplamente conectada com magia (na fantasia, claro), da qual estou mais habituado eu mesmo. Lá atrás na página 7 eu criei um conjunto de regras e descrições para a Mana do mesmo jeito que estou fazendo neste texto agora, características que tenho que respeitar o máximo possível para continuar criando. E para conjurar usando Mana, disse que o conjurador precisa de Sentir, Manipular, Subjugar, Transformar e enfim Manifestar a Mana em Magia, sendo a transformação a etapa onde as runas e círculos se encaixam. 

    Ditas as regras, vamos criar os fatos:

  • Uma runa é um pedaço de texto ou de desenho (ou de pictograma, ou de ideograma, ou de qualquer representação visual bidimensional que seja esteticamente interessante) que guarda um significado em si, com a característica de interagir com a Mana de maneiras específicas para cada runa. Isso é um fato da natureza, assim como as coisas caem para baixo ou o fogo queima, a runa está entre aquelas poucas coisas que interagem naturalmente com a Mana. Porque disso? Insira qualquer história aqui. A resposta "fácil" é falar que um deus mudou a realidade para ser assim, mas podemos só dizer que sempre foi assim ou dizer são reminiscentes de uma civilização mágica antiga que foi capaz de alterar a realidade em que viviam mas assim como os atlantes, sumiram da existência. Na verdade deixar em aberto pode ser mais interessante do que definir uma resposta, então a resposta é que não há resposta para o por que das coisas serem assim, só são. 
  • Um conjunto de runas formam um Sistema Rúnico, que assim como as letras do alfabeto precisam estar seguidas umas das outras em um padrão para formarem palavras, as runas podem ser conectadas seguindo certos padrões para formarem novos efeitos ou efeito mais complexos.
  • Um círculo mágico é literalmente um desenho de círculo que serve para encapsular um sistema  rúnico, fechando as conexões das runas, ajudando a direcionar a Mana através dessas runas. As geometrias usadas em conjunto com um círculo também tem essa função de auxiliar a Mana através das runas e auxiliar o posicionamento das runas dentro do círculo, como um caderno de caligrafia ajuda uma pessoa a escrever as letras alinhadas e espaçadas corretamente. Essas geometrias, para quem ainda não visualizou, são as formas que se vê dentro dos círculos, como pentagramas ou hexágonos. 
  • Um círculo pode conter outros círculos dentro, o que significa que é um sistema dentro de outro sistema, e assim como a matemática resolve os parênteses primeiro, para calcular o resultado desses sistemas rúnicos deve-se resolver os círculos mais internos primeiro. 
  • Os efeitos que uma runa faz podem, teoricamente, serem reproduzidos pela mente do conjurador, desfazendo então a necessidade das runas. Porém, o conjurador precisa ter conhecimento para fazer com que isso se torne verdade, e enquanto as runas fazem o trabalho automaticamente, a mente do conjurador tem que processar cada efeito individualmente, fazendo com que magias complexas sejam demais para a mente de um conjurador.

    Esses fatos parecem bons. Dá pra criar um história bacana usando isso de base. E também obedecem ao que defini como requisito aqui e aqui. Tem um problema a resolver que já percebi que é: se as runas estão baseadas na Mana, quando elas transformam a Mana em outra coisa por causa da magia, como vai ficar essa interação da runa com essa outra coisa? É importante mas nada que mais umas regras arbitrárias não resolvam. E certamente tem outros problemas ainda viu.... Essa parte do círculo ainda está difícil, mas deboas também, por que se pensar, uma magia com efeito tão simples mal precisa de runa, uma magia um pouco mais complexa precisa de uma ou algumas runas, conforme vai deixando ela mais complexa cria-se um sistema rúnico, para só então chegarmos nos círculos mágicos que já são magias bem mais complexas, então eles serem complexos não me parece um problema tão grande assim. No mínimo não são problema pra agora hahahaha. (O Kadin do futuro que se vire)

    Agora vem o teste. Isso tudo está sendo desenvolvido ao longo dos anos, com longos intervalos e possivelmente algumas coisas que disse agora não bate com o que disse antes. Preciso fechar essas pontas, testar se o sistema está funcionando e então, finalmente, escrever a próxima página do grimório. Tô achando que esses últimos posts todos poderiam ter sido páginas já, só não fiz pois achei que precisava seguir o modelo de um pedaço de Lore e depois minhas observações do tema. Acabou não sendo, fazer o que. Pois é, achou que é fácil? Não é não rapaiz, tá foda bagarai. Mas aqui está meu "algo mais". Feito melhor que perfeito.