2021-03-17 – A importância da Física e Matemática na criação de um Game Engine do zero…
Quero aqui explicar porque é importante adorar Matemática a quem queira criar um Game Engine do zero, e ter conhecimentos de Física também, e não apenas saber programar.
Vamos começar pela Matemática. Tudo no nosso Universo se representa por fórmulas matemáticas.
Deixo na imagem um exemplo de um “death ray” que criei com apenas 3 fórmulas matemáticas, a do meio, representa o “death ray” em si, que imaginemos que seja um raio da morte que ao contrário do LASER, se vá alargando demasiado cedo com a distância, e tal como a luz e etc, as suas ondas andam assim desta forma, e isto é representado por uma simples fórmula matemática.
Se eu quiser criar uma borda desse raio, talvez para criar uma coisa mais incandescente no seu perímetro (num jogo), teria de criar duas outras fórmulas matemáticas que representassem isso.
Eu consigo facilmente imaginar que fórmulas é que criam certas formas e padrões, talvez por dizerem que tenho um cérebro matemático-visual, eu consigo facilmente traduzir padrões e formas e até comportamentos, em fórmulas matemáticas que os recriam.
Quem esteja habituado a trabalhar com est etipo de coisas, sabe que é possível conhecendo bem as funções diversas na matemática, imaginar fórmulas que criem padrões que desejamos.
Agora, Física. Porquê? Porque num Game Engine, ao criarmos um do zero, temos de saber Física, nem que seja as bases (se forem suficientes o que duvido).
Isto porquê? Qualquer programador (Programador com “P” grande), e não me refiro a coders (aquele pessoal que sabe como usando certas funções e metendo comandos numa certa ordem, faz um programa funcionar), que saiba criar mesmo software (arquitectar o mesmo, encontrar soluções, etc), se quiser imitar a realidade num Game Engine (onde há gravidade, refracção de luz, ondas de água, fogo, etc), tem de saber que leis da Física já existem, pois não vamos reinventar a Gravidade, para fazer uma maçã cair da árvore, ou outras fórmulas que já existem e traduzem o mesmo.
Assim, ser coder é uma coisa (há milhões deles), ser Programador é outra (com “P” grande e nem me refiro a usar linguagens mais poderosas como C/C++), mas para se criar um Game Engine do zero, há que saber Física, para recriar a realidade, não é o mesmo que ir buscar um game engine à net ou algo que tenha tudo feito, refiro-me a criar do zero.
E para isto, é preciso gostar/adorar Matemática, pois usa-se muita Matemática.
Se os vosso filhos odeiam Matemática, podem ser coders na mesma um dia (também chamados de programadores, mas eu distingo “Programador” de “programador”), mas se eles quiserem criar jogos, ou pegam em game engines já feitos mas menos poderosos, ou se quiserem criar um do zero, há que gostar Matemática.
E têm de lhes explicar que com ela fazem estas coisas bonitas, porque nas escolas só ensinam lixo às crianças (e sinceramente nas universidades também nada de jeito no geral).
Agora na imagem mostro o fogo que estou a criar, algoritmos para simular o fogo na nossa realidade.
E aqui entra algo complicado porque, o fogo não bastam fórmulas normais, há que introduzir um certo factor de aleatoriedade, que Einstein vos diria que não existe pois o Universo é determinístico, pre-determinado, fácil de prever, e Heisenberg vos diria exactamente o contrário.
Com o fogo, não digo que o Universo não seja determinístico, mas existe um conjunto tão grande de factores a influenciar como se desenvolvem as chamas de uma fogueira, qeue a única maneira fácil que tenho de simular o mesmo, é introduzir uma variável para simular essa confusão e caos todo, através de alguma aleatoriedade, que é coisa que não existe em computadores, mas que é possível simular com uma semente baseada no Tempo em si (aquela coisa que eu firmo não existir lol).
Assim, com alguma aleatoriedade, simulo muitos processos da Natureza que ignoro para poupar CPU, e obter um fogo mais ou menos credível, mas ao inserir fumo no fogo, e torná-lo um pouco mais esbatido, não sei se o fogo em si fica menos realista, mas tentei.
De qualquer das formas, penso ter explicado (por vezes perguntam-me isto) porque é que Matemática e Física são importantes para quem criar um Game Engine do zero. Para criar jogos não, pois há quem não programe muito mas como pega em coisas já feitas, game engines do mercado, tipo o Unity, etc, tem a papinha toda feita, ou em linguagens mais fáceis tipo C#, Java, etc.
Mas algo feito do zero mesmo, requer gosto pela Matemática, conhecer algo de Física também, e não apenas saber programar em linguagens poderosas como C ou C++.
E isto explica também porque tenho perdido mais tempo a criar o Game Engine do zero em si, e ocupado mais com coisas tipo simular ondas, bolhas dentro de água, fogo, etc, do que criar jogos em si. O meu objectivo não é apenas criar jogos, é criar tudo do zero porque isto traz-me algum desafio, e criar apenas jogos com coisas feitas pelos outros, não traz qualquer desafio.
Eu gosto do solucionar problemas, aplicar Matemática, Física, ao digital, para recriar realidades novas nos jogos que irei criar um dia. Claro que em breve terei de me deixar destas coisas e criar apenas os jogos. Mas até lá divirto-me a usar um pouco o cérebro também e não apenas a jogar.
Já agora, estes sites online são-me úteis para testar se o que visualizo corre bem, se as fórmulas que imagino são exactas, antes de as aplicar.
Nos jogos antigos nada disto se fazia, era tudo por sprites pré-guardados, as explosões, os tiros, as bolhas dentro de água, no geral, eram pré-determinadas, eram animações pré-guardadas, no meu caso serão feitas em tempo real, cada jogo terá animações diferentes criadas em tempo real, daí a complicação acrescida, e será mais complexo do que os velhinhos jogos bem mais simples da Megadrive, como o Sonic, etc.
2021-03-17.