Que matemática todos os programadores de jogos devem saber? [fechadas]

163

Pergunta bastante simples: de que matemática todos os programadores de jogos devem ter uma compreensão firme para ter sucesso?

Não estou falando especificamente sobre renderizar matemática ou qualquer coisa nas áreas de nicho da programação de jogos, mais especificamente apenas coisas que até os programadores de jogos devem saber e, se não o fizerem, provavelmente acharão útil.

Nota: como não há uma resposta correta , esta pergunta (e suas respostas) é um wiki da comunidade.

Além disso, se você quiser equações matemáticas sofisticadas de látex, sinta-se à vontade para usar http://mathurl.com/ .

Tetrad
fonte
11
mmm eu acho que havia um tópico falando sobre livros de matemática que todo programador deveria ler ou algo assim, eu realmente não me lembro ... mas tinha algumas coisas legais ... não sei se estava aqui ou o stackoverflow também lol
Prix
@Prix: você quer dizer este: gamedev.stackexchange.com/questions/1210/... ;)
Michael Klement
15
Fechado como sendo excessivamente construtivo por Tetrad #
Thomas Eding
11
@ThomasEding Sim, muito amplo pode ter sido mais apropriado, pois essa é claramente uma pergunta da lista .
Anko

Respostas:

137

Existem muitas outras formas de matemática que são úteis, mas no mínimo absoluto você precisa saber estas:

  • Álgebra e Aritmética

Isso é bastante básico, mas se você não os conhece, não terá chance de ser um programador e muito menos um desenvolvedor de jogos.

Objetos em um mundo de jogo são representados com vetores. Um vetor representa coisas como a posição de um objeto, a direção e a velocidade da aparência. Cálculos Vector matemática como o Dot produtos , entre vários produtos , e Vector normalização são essenciais.

Como movo meu objeto de jogo? O novato pode dizer:

"Eu sei! Eu vou fazer:" object.position.x++.

Não não não. Você precisa usar um cálculo vetorial. O objeto precisa de um vetor de posição, direção e aceleração que você possa usar para mover o objeto. Se você faz o que é novato, fica preso em uma bagunça insustentável e como faz com que ele se mova em uma direção não alinhada com o eixo XYZ do mundo?

A principal razão pela qual os jogos usam quaternions é porque eles representam rotações quase com a mesma eficiência de espaço que os ângulos de Euler, sem sofrer o bloqueio do cardan . O bloqueio do cardan começa quando qualquer ângulo de Euler atinge uma rotação de 90 graus em torno de qualquer eixo: você perde imediatamente um grau de liberdade. Os quaternários tratam dessa questão adicionando uma quarta dimensão. Se você mantiver os ângulos de Euler, precisará restringir um eixo para nunca girar mais de ~ 89 graus.

Se você estiver programando a matemática para respostas de física em um jogo, participar de uma aula de física não seria uma má idéia.

Razões pelas quais você precisará conhecer as equações da física:

  1. Fazendo uma bola quicar (veja: coeficiente de restituição)
  2. Faça uma bola se mover em uma direção com newtons de força 'x'
  3. Faça com que algo tenha mais ou menos atrito, para que deslize a uma velocidade diferente
  4. Respostas de colisão: Em que direção o objeto girará quando eu o atingir 'aqui'?

Se você usa um mecanismo de física (ou um mecanismo de jogo que possui o mecanismo de física embutido), pode se dar bem com pouco conhecimento sobre física. Ainda assim, é muito bom saber quando você precisa sujar as mãos porque o mecanismo de física não está funcionando adequadamente.

Brock Woolf
fonte
11
Para a física, os artigos de Chris Hecker sobre a dinâmica do corpo rígido, incluindo resposta e restituição de colisão, são maravilhosos: chrishecker.com/Rigid_Body_Dynamics
tenpn
25
Você mencionou quaternions, mas não matrizes de transformação?
Andrew Russell
8
"Gimble [sic] lock é aquele efeito em que quando você move o mouse para olhar para baixo, ele pára quando você olha diretamente para baixo ..." Na verdade, isso geralmente é feito para a sanidade do jogador e não tem nada a ver com o bloqueio do cardan.
4
Surpreende-me a frequência com que os quaternions estão vinculados ao bloqueio flexível. Eu escrevi jogos em 3D sem quaternions e nunca tive um problema de bloqueio de gimble. Se você realmente entende matemática 3D e sabe o que é realmente um bloqueio flexível, não terá esse problema.
Skizz
7
O bloqueio do cardan é realmente causado por rotação ingênua com ângulos de Euler (geralmente ângulos de Tait-Bryan: guinada, inclinação, rotação). Representações alternativas como Axis-Angle também podem ser usadas para evitar sua ocorrência. Os quaternions, no entanto, têm o benefício de uma fácil interpolação e geralmente são preferidos por esse motivo.
precisa
51

Sonho com o dia em que o desenvolvimento de jogos é tão impulsionado por dados quanto a produção artística. Eu não vejo isso em nenhum lugar no horizonte, por enquanto, saber um pouco de matemática parece ser uma necessidade.

A matemática é como técnica, quanto mais, melhor, desde que você possa aplicá-la.

Aqui está a ordem de importância que eu vejo.

  • Aritmética
  • Álgebra Linear (com interpretações geométricas)
  • Cálculo (física)
  • Combinatória (níveis aleatórios)
  • Probabilidade (balanceamento)
  • Estatística (Bayesiano especialmente para IA)

Eu poderia continuar. Quanto mais você souber, melhor, mas aprender um monte de matemática não significa que você fará um ótimo jogo, mas pode ajudar.

Jonathan Fischoff
fonte
4
O cálculo é um campo enorme. Provavelmente apenas uma pequena quantidade é necessária para o desenvolvimento do jogo.
Noldorin
2
@Noldorin sim. Na maioria das situações, entender o relacionamento entre derivada, aceleração, velocidade e posição pode ser suficiente ... mas o cálculo é impressionante.
Jonathan Fischoff
As IA Bayesianas tendem a não ser usadas para jogos devido ao uso comparativamente grande de memória, baixa depuração e previsibilidade e um espaço de problema bem definido. Uma boa implementação da pesquisa clássica com heurísticas inteligentes geralmente é (mas nem sempre) uma ferramenta melhor.
11
Para mim, não é um algoritmo bayesiano em particular que eu acho importante, mas entender o processo de raciocínio adotado por ET Jaynes. Não acho que seja algo inerentemente lento no raciocínio bayesiano.
Jonathan Fischoff
11
As estatísticas são maravilhosas quando você está desenvolvendo uma IA ou geralmente desenvolvendo um jogo de gerenciamento / magnata. Por outro lado, não tenho nenhuma familiaridade com cálculo. Eu argumentaria que estatística e probabilidade são essencialmente a mesma coisa para fins de aprendizado, pois o campo das estatísticas decorre do trabalho sobre probabilidade. É muito subjetivo.
Rushyo 10/09/10
25

Muito básico é o teorema de Pitágoras. Também conhecida como fórmula de distância.

a ^ 2 + b ^ 2 = c ^ 2onde ae bsão as arestas de um triângulo retângulo e cé a hipotenusa. Isso significa que, para encontrar o comprimento de um vetor, faça o seguinte:

distância = sqrt (a ^ 2 + b ^ 2)

Outra nota de interesse é que, se você estiver apenas comparando distâncias, não precisará usar a raiz quadrada (que pode ser relativamente cara). É por isso que a maioria das estruturas possui uma função "distância ao quadrado" ou "comprimento ao quadrado" para seus vetores.

Tetrad
fonte
11
Eu tenho certeza que eu li isso em outro lugar neste site antes :)
Ricket
Claro, este post foi inspirado nesse tópico / comentário.
Tetrad
Estou recebendo alguns déjà vu aqui ... :)
mmyers
2
De maneira mais geral, o comprimento de um vetor é a raiz quadrada do produto pontual. Então, sqrt(V dot V)é o seu comprimento. Assim, a distância entre dois pontos é:sqrt((A-B) dot (A-B))
greyfade
Também grande é a compreensão no contexto da sin² identidade trig (x) + cos² (x) = 1.
19
  • Vetores 3D e 4D, e como o componente W deve ser definido
  • Sistemas de coordenadas da esquerda e da direita e qual é o seu jogo
  • O produto escalar e para o que é útil
  • O produto cruzado e para o que é útil
  • Matrizes, como elas representam orientação e posição e como você pode combiná-las
  • Quaternions

Mesmo se você não é o cara dos gráficos, vai usar vetores e matemática de vetores 80% do tempo. São as cebolas do nosso divertido bolonhesa.

tenpn
fonte
4
Esta não é uma lista ruim, mas eu esperava uma resposta mais descritiva. Ou seja, qual é a fórmula do produto escalar, o que significa e como é útil.
Tétrada
3
@Tetrad A Wikipedia não fornece isso a você? en.wikipedia.org/wiki/Dot_product#Definition .
Jonathan Fischoff
11
Não para jogos especificamente, não.
Tétrada
5
Faz. Ele diz que o produto escalar é o cosseno do ângulo. É tudo o que você precisa saber (e pode saber), pois o aplicativo ainda depende do que você deseja usá-lo. Orientando a IA? Você precisa do ângulo, então o ponto é seu amigo. Renderizando luz? Você precisa do ângulo. Tudo o que se pode dizer é que ele (produto escalar neste caso) define o cosseno do ângulo vezes o comprimento do vetor a, vezes o comprimento do vetor b. Esse é o conhecimento que pode ser dado. Qual parte dele usar e como não pode ser informada, pois os aplicativos são infinitos.
Kaj
Para obter mais detalhes sobre o componente W, consulte Famous: Preciso do componente 'w' na minha classe Vector? e O que a placa gráfica faz com o quarto elemento de um vetor como posição final?
Ivan Aksamentov - Drop
10

Um aperto firme de +, -, *, e /. Sem eles, você está completamente ferrado.

O Pato Comunista
fonte
12
Acho que todos podemos concordar que isso não é o que a pergunta estava fazendo. (você também esqueceu%).
Coderanger
2
Outras respostas se votou-se para isso (aritmética básica) ....
RCIX
7
Não apenas aritmética básica, mas entender como todas as operações funcionam em ambientes de dois pontos complementares, ponto fixo e ponto flutuante IEEE. Sem uma compreensão firme sobre por que 0,1 * 3! = 0,3 ou por que -x pode não ser o que você espera, você está ferrado.
11
@ user744 Estou realmente ferrada, o que é essa feitiçaria?
11609 Neon Warge
9

Sim, a programação de jogos tende a ser bastante intensiva em matemática. O que você precisa de matemática depende do que você está trabalhando. A aritmética básica é uma obrigação, é claro, exatamente como em toda a programação. Além disso:

A geometria é vital para qualquer trabalho gráfico. Se você deseja exibir itens na tela, precisa entender os sistemas de coordenadas. E se você quiser movê-los em qualquer direção, exceto nas direções cardinais, ficará completamente perdido sem uma compreensão sólida de senos, cossenos e vetores (trigonometria básica). E se você precisa trabalhar em 3D, os requisitos de geometria e trigonometria ficam muito mais complicados.

Se você deseja modelar qualquer tipo de física remotamente realista, precisa de cálculo para isso. (Foi o que levou Newton a inventar o cálculo, afinal).

Qualquer tipo de cálculo de probabilidade requer conhecimento de estatística e teoria das probabilidades, a fim de obter resultados sãos sem quantidades insanas de tentativa e erro.

Provavelmente há muito mais, mas é isso que me vem à cabeça.

Mason Wheeler
fonte
Lembro-me de quando meu irmão mais novo tentou fazer um jogo de Bang-Bang como um projeto para sua aula de VB no ensino médio. Ele deu tudo certo, exceto que não fazia ideia de como fazer as balas de canhão voar em um arco baseado no ângulo e na força, porque ainda não havia tomado o Trig 1. Depois que expliquei o básico, funcionou muito bem.
Mason Wheeler
No Trig necessário para o arco, basta usar s=u.t + a.t.t/2. Você precisa de trig para obter a velocidade inicial (u).
Skizz
Por que isso não é mais alto? Metade dos programadores com quem trabalhei não pode usar senos e co-senos para a vida deles.
zaratustra 9/09/10
@ Skizz: Sim. Você precisa de trig para transformar um ângulo e uma potência em um vetor inicial. Depois disso, você só precisa de um loop de animação e uma constante gravítica.
Mason Wheeler
9

No mínimo, você precisará.

  • Álgebra
  • Geometria básica
  • Trigonometria básica

Você também deseja ter pelo menos um conhecimento prático das operações de vetor e saber o que é uma matriz e para que ela pode ser usada, embora os detalhes não sejam estritamente necessários.

Se você quiser entrar na programação gráfica, precisará de muito mais conhecimentos de matemática, mas a programação geral de jogabilidade não precisa ser tão intensiva em matemática.

jessecurry
fonte
9

Sistemas de numeração binária e hexadecimal e como convertê-los para / de números decimais.

Embora você geralmente não precise trabalhar com números binários brutos , eles são freqüentemente usados ​​para variáveis ​​Flag, que exigem lógica booleana e troca de bits.

Hex não é tão importante (a menos que você queira processar 0xDEADBEEF ), mas, no mínimo, você gostaria de reconhecer quando eles estão sendo usados ​​e por quê.

Ciclope
fonte
11
Se você não consegue ler hexadecimal, não pode programar efetivamente. A maioria das constantes bit a bit em C e C ++ serão especificadas como valores hexadecimais.
Eu acho que você tem Booleane se binaryconfundiu. Não tenho certeza se eles são absolutamente necessários para a programação de jogos.
Skizz
@ Skizz, bom ponto - fixo. (E outro ponto menor, é um wiki - nada que impeça você de mudar isso :).
Cyclops
Se você não consegue ler hexadecimal, use uma ferramenta para convertê-lo para você.
Thomas Eding
6

Nenhuma menção à matemática básica da programação de computadores? Teoria dos grafos, teoria dos números, teoria dos conjuntos e matemática concreta, geralmente todos agrupados em turmas dolorosas e pouco ensinadas, chamadas "matemática discreta" na universidade.

Os "truques estúpidos" economizam todo tipo de tempo do programa (e geralmente são equivalentes a alguns truques de string e truques), tipos de gráficos e travessias são usados ​​em todo o lugar (mesmo que você esteja apenas escolhendo contêineres STL), e a complexidade algorítmica é essencial para a otimização, à medida que as linguagens atingem níveis mais altos.

user744
fonte
5

Eu acho que a matriz de pagamento é uma ferramenta essencial. Os jogos costumam ser mais divertidos quando se aproximam de um saldo interessante de fair play de soma zero, e as matrizes de pagamento ajudam a quantificar isso em casos complicados. Acho que este artigo da wikipedia é tão bom quanto qualquer outro, e apresenta o conceito básico necessário: http://en.wikipedia.org/wiki/Normal-form_game

Kzqai
fonte
Isso parece extremamente impraticável para mim. Você acha que Starcraft ou Warcraft 3 foram equilibrados usando um método como este? Acho que não, acredito que foram iterações e testes de reprodução e patches constantes.
bobobobo
Uh, eles quase certamente foram, os exércitos iniciais de warcraft foram duplicados modificados um do outro que provavelmente foram criados com matrizes de pagamento projetadas para torná-los equilibrados em geral. Depois disso, eles podem simplesmente ter construído o que aprenderam a ajustar as coisas, mas provavelmente tiveram que fazer isso novamente com starcraft para obter um nível razoável de equilíbrio agora que três exércitos diferentes estavam envolvidos e novamente quando as unidades starcraft II foram adicionadas. Obviamente, você não para simplesmente no modelo, o playtesting geralmente mostra propriedades emergentes, mas uma matriz de pagamento é como você inicialmente modela a complexidade.
Kzqai
[citação necessária]?
bobobobo
11
Foi assim: amazon.com/Game-Architecture-Design-New-Edition/dp/0735713634/… Desejo que a versão amazon tenha ativado a pesquisa dentro do livro, porque pode ser uma grande coisa fazer referência em bits para este site. Embora talvez a pesquisa interna do livro da Amazon não funcione dessa maneira. De qualquer forma, foi aí que eles analisaram as matrizes de pagamento, usando o warcraft como exemplo, e a vantagem de gerenciar a complexidade era tão clara que me transformou em uma conversão instantânea. Isso é nenhuma garantia de que a Blizzard realmente usou essa abordagem, mas eles são caras inteligentes, de modo que provavelmente tinha uma solução matemática ...
Kzqai
... pelo menos para uma maneira de entender rapidamente o equilíbrio. Obviamente, você deseja adicionar testes a isso também. Na verdade, comprei o livro com a força de um panfleto menor e menor, com um conteúdo incrível relacionado ao jogo, incluindo discussões sobre a matriz de pagamento e as relações pedra-papel-tesoura e todos os tipos de coisas excelentes, e fiquei desapontado ao descobrir que o final O livro é um tomo e lida muito com a programação C ++ (que não é minha coisa), além de problemas de gerenciamento de títulos AAA. Tudo no panfleto foi ótimo, no entanto.
Kzqai
4

Entenda o produto escalar: se dois vetores têm aproximadamente a mesma direção (teta <90 graus), o produto escalar é positivo, ou negativo. Pode ser usado para testar sempre que o jogador está à vista (assumindo que o FOV é de 90 graus).

E generalize seu jogo 2D para dimensões mais altas. (use cálculos vetoriais)

Se você pode implementar um mecanismo 3D sozinho, está pronto.

Ming-Tang
fonte
4

Depende do que você está fazendo .

Todos os programadores de jogos devem conhecer pelo menos a álgebra do ensino médio. Que significa:

  • Um bom senso de números
  • Conforto com a matemática básica (somar, sub, mult, dividir)
  • Trigonometria (pecado e cos)
  • Vetores, ângulo entre vetores, produto escalar, produto cruzado

Seus programadores gráficos devem saber:

  • Todas as opções acima e
  • Álgebra matricial (para matrizes de transformação)
  • Métodos de interseção de polígonos / polígono de raios (consulte um livro como detecção de colisão em tempo real

Seus programadores de física devem saber:

  • Todas as opções acima e
  • Equações diferenciais
  • Métodos numéricos
bobobobo
fonte
3

Além de senos e cossenos (que 50-75% dos programadores que conheci não sabiam usar), aprenda a função mágica do arco-bronzeado e como ela pode ser usada para obter o ângulo de qualquer vetor.

zaratustra
fonte
5
na maioria dos casos, você deseja, atan2pois isso cuida sozinho da manipulação do quadrante.
CodesInChaos
0

Estou surpreso que ninguém tenha mencionado Quaternions . Não tenho muita experiência com mecanismos diferentes, mas pelo menos o JME o usa em todos os lugares e tive a impressão de que eles são um conceito muito importante.

Raoul
fonte
2
er eu mencionei quaternions.
Dezpn 03/08/19
Ahh, desculpe, eu perdi.
Raoul
3
Para 1% dos programadores de jogos que escrevem código de animação de baixo nível no mecanismo de renderização, os quaternions são uma ferramenta útil. Para os outros 99% dos programadores de jogos, eles não são realmente necessários.
Skizz
-1

Fazer jogos é trazer vida "real" à realidade virtual. É melhor saber mais sobre o mundo real / universo do que menos :) .. A matemática é apenas uma ferramenta. E se você está fazendo um plano, também precisa dedicar tempo para estudar os planos.

EDITADO: Eu vi alguns mal-entendidos :) .. Eu acho que esse conjunto de aquisições matemáticas que você precisa governar depende de coisas concretas que você deseja descrever. Ninguém sabe tudo. E melhor maneira de fazê-lo é. Não para aprender tudo no começo, mas aprenda pouco, use, aprenda, use etc. Então você pode fazer isso durante o desenvolvimento, se tiver um bom plano.

samboush
fonte
11
Quanta vida real existe em tetris?
Dezpn
Muito de :). Tetris é sobre o pensamento lógico sob a pressão. Como outros jogos lógicos. É sobre praticar. Mais praticante, mais seguro você pode lidar e ainda se divertir com isso. Parece-me vida real
:)
3
você não faz sentido quando falha em abordar a questão de maneira justa.
Heath Hunnicutt
@Heath Hunnicutt, você está certo.
Samboush
3
Eu realmente respeito essa resposta.
Heath Hunnicutt
-2

Resposta simples: MUITO!

Resposta detalhada:

Álgebra Aritmética, Elementar e Linear, na maioria dos casos Trig, se você estiver fazendo um jogo em 3D, DEFINITIVAMENTE Cálculo e Física (Física requer Cálculo)!

Darius Goad
fonte
3
Você pode esclarecer um pouco a lista? Você está dizendo "Desencadear se estiver fazendo um jogo em 3D" ou "Se você estiver fazendo um jogo em 3D, DEFINITIVAMENTE Cálculo"?
yoozer8