Qu'est-ce que tous les programmeurs de jeux devraient savoir? [fermé]


163

Une question assez simple: à quels calculs tous les programmeurs de jeux doivent-ils avoir une solide compréhension pour réussir?

Je ne parle pas spécifiquement du calcul mathématique ou de quoi que ce soit dans les créneaux de la programmation de jeux, plus précisément de choses que même les programmeurs de jeux devraient connaître, et s'ils ne le font pas, ils le trouveront probablement utile.

Remarque: comme il n’existe pas une seule bonne réponse , cette question (et ses réponses) est un wiki de communauté.

De plus, si vous souhaitez utiliser des équations mathématiques en latex sophistiquées, n'hésitez pas à utiliser http://mathurl.com/ .


1
mmm je pense qu'il y avait un sujet qui parlait de livres de maths que chaque programmeur devrait lire ou quelque chose comme ça, je ne m'en souviens pas vraiment ... mais il y avait quelques jolies choses dessus ... je ne sais pas si c'était ici ou stackoverflow aussi bien lol
Prix


@Prix: vous voulez parler de celui-ci: gamedev.stackexchange.com/questions/1210/… ;)
Michael Klement

15
Fermé car trop constructif par Tetrad ♦
Thomas Eding

1
@ThomasEding Ouais, trop large aurait peut-être été plus approprié, car il s'agit clairement d'une question de liste .
Anko

Réponses:


137

Il existe de nombreuses autres formes de mathématiques utiles, mais vous devez au minimum les connaître:

  • Algèbre et Arithmétique

Celles-ci sont assez basiques, mais si vous ne les connaissez pas, vous n’aurez aucune chance d’être un programmeur, encore moins un développeur de jeux.

Les objets d'un monde de jeu sont représentés par des vecteurs. Un vecteur représente des éléments tels que la position d'un objet, sa direction et sa vitesse. Calculs mathématiques Vector tels que le produit Dot , Cross produit et normalisation Vector sont essentiels.

Comment déplacer mon objet de jeu? Le novice pourrait dire:

"Je sais! Je vais juste faire:" object.position.x++.

Non non Non. Vous devez utiliser un calcul vectoriel. L'objet a besoin d'un vecteur de position, de direction et d'accélération que vous pouvez utiliser pour le déplacer. Si vous faites la chose novice, vous allez être coincé dans un gâchis incontrôlable, et comment le faites-vous bouger dans une direction non alignée avec l'axe XYZ du monde?

La principale raison pour laquelle les jeux utilisent les quaternions est qu’ils représentent des rotations presque aussi économe en espace que les angles d’Euler, sans souffrir du blocage de Gimbal . Le blocage du cardan commence quand un angle d'Euler atteint une rotation de 90 degrés autour de n'importe quel axe: vous perdez immédiatement un degré de liberté. Quaternions résout ce problème en ajoutant une quatrième dimension. Si vous vous en tenez aux angles d'Euler, vous devrez limiter un axe pour ne jamais faire plus de 89 ° de rotation.

Si vous programmez les maths pour les réponses de physique dans un jeu, alors suivre un cours de physique n'aurait pas été une mauvaise idée.

Raisons pour lesquelles vous aurez besoin de connaître les équations de la physique:

  1. Faire rebondir un ballon (voir: coefficient de restitution)
  2. Faire un ballon bouger dans une direction avec 'x' newtons de force
  3. Faites que quelque chose ait plus ou moins de frottement pour qu'il glisse à une vitesse différente
  4. Réponses de collision: dans quelle direction l'objet va-t-il pivoter quand je le frappe ici?

Si vous utilisez un moteur physique (ou un moteur de jeu dans lequel le moteur physique est incorporé), vous pouvez en savoir très peu sur la physique. Néanmoins, il est bon de savoir quand vous devez vous salir les mains car le moteur physique ne fonctionne pas correctement.


1
Pour la physique, les articles de Chris Hecker sur la dynamique des corps rigides, y compris la réaction de collision et la restitution, sont merveilleux: chrishecker.com/Rigid_Body_Dynamics
tenpn

25
Vous avez mentionné les quaternions mais pas les matrices de transformation ??
Andrew Russell

8
"Le verrouillage de Gimble [sic] est cet effet: lorsque vous déplacez votre souris pour regarder en bas, il s'arrête lorsque vous regardez directement vers le bas ..." En fait, cela est généralement fait pour la santé du joueur et n'a rien à voir avec le verrouillage de la nacelle.

4
Cela me surprend combien de fois les quaternions sont liés à Gimble Lock. J'ai écrit des jeux en 3D sans aucun quaternion et je n'ai jamais eu de problème de blocage de gimble. Si vous comprenez vraiment les mathématiques en 3D et savez ce qu'est un verrou à gimble, vous n'aurez pas ce problème.
Skizz

7
Le blocage du cardan est en réalité causé par une rotation naïve avec des angles d'Euler (généralement les angles de Tait – Bryan: lacet, tangage, roulis). Des représentations alternatives comme Axe-Angle peuvent également être utilisées pour empêcher son apparition. Les quaternions ont toutefois l'avantage d'une interpolation facile et sont généralement préférées pour cette raison.
Jason Kozak

51

Je rêve du jour où le développement de jeux est aussi basé sur les données que la production artistique. Je ne le vois nulle part à l'horizon, donc pour le moment, savoir que quelques mathématiques semblent être une nécessité.

Les maths sont comme la technique, plus il y en a, mieux on peut l'appliquer.

Voici l'ordre d'importance que je vois.

  • Arithmétique
  • Algèbre linéaire (avec interprétations géométriques)
  • Calcul (physique)
  • Combinatoire (niveaux aléatoires)
  • Probabilité (équilibrage)
  • Statistiques (Bayésiennes surtout pour l'IA)

Je pourrais continuer. Plus vous en saurez, mieux ce sera, mais apprendre un tas de mathématiques ne signifie pas que vous ferez un bon jeu, mais cela peut vous aider.


4
Le calcul est un domaine immense. Il n'en faut probablement qu'une petite quantité pour le développement de jeux.
Noldorin

2
@ Noldorin ouais. Dans la plupart des situations, comprendre la relation entre la dérivée, l'accélération, la vitesse et la position peut suffire… mais le calcul est impressionnant.
Jonathan Fischoff

Les IA bayésiennes ont tendance à ne pas être utilisées par les jeux en raison d'une utilisation relativement importante de la mémoire, d'une médiocre capacité de débogage et de prévisibilité et d'un espace de problèmes bien défini. Une bonne implémentation de la recherche classique avec une heuristique intelligente est généralement (mais pas toujours) un meilleur outil.

1
Pour moi, ce n'est pas un algorithme bayésien particulier que je trouve important, mais la compréhension du processus de raisonnement tel qu'épousé par ET Jaynes. Je ne pense pas que le raisonnement bayésien soit fondamentalement lent.
Jonathan Fischoff

1
Les statistiques sont formidables lorsque vous développez une intelligence artificielle ou simplement un jeu de gestion / magnat. D'autre part, je n'ai aucune connaissance du calcul. Je dirais que les statistiques et les probabilités sont essentiellement la même chose pour l’apprentissage que le domaine des statistiques découle de travaux sur les probabilités. C'est très subjectif.
Rushyo

25

Le théorème de Pythagore est très fondamental. Aussi connu sous le nom de formule de distance.

a ^ 2 + b ^ 2 = c ^ 2aet bsont les arêtes d'un triangle rectangle et cest l'hypoténuse. Cela signifie que pour trouver la longueur d'un vecteur, procédez comme suit:

distance = sqrt (a ^ 2 + b ^ 2)

Une autre remarque intéressante est que, si vous ne faites que comparer les distances, vous n’avez pas à prendre la racine carrée (qui peut être relativement coûteuse). C'est pourquoi la plupart des frameworks ont une fonction "distance au carré" ou "longueur au carré" pour leurs vecteurs.


1
Je suis sûr que j'ai déjà lu cela ailleurs sur ce site :)
Ricket

Bien sûr, ce post a été inspiré par ce fil / commentaire.
Tetrad


2
Plus généralement, la longueur d'un vecteur est la racine carrée du produit scalaire avec lui-même. Donc, sqrt(V dot V)est sa longueur. Donc, la distance entre deux points est la suivante:sqrt((A-B) dot (A-B))
Greyfade

Aussi bien est la compréhension dans le contexte de l'identité de l'identité sin² (x) + cos² (x) = 1.

19
  • Vecteurs 3D et 4D, et ce que le composant W doit être défini sur
  • Systèmes de coordonnées gauche et droite, et lequel est votre jeu
  • Le produit scalaire et son utilité
  • Le produit croisé et son utilité
  • Les matrices, comment elles représentent l'orientation et la position et comment les combiner
  • Quaternions

Même si vous n'êtes pas le type graphique, vous utiliserez des vecteurs et des calculs vectoriels 80% du temps. Ils sont les oignons de notre amusant bolognaise.


4
Ce n'est pas une mauvaise liste, mais j'espérais une réponse plus descriptive. C'est-à-dire quelle est la formule du produit scalaire, ce que cela signifie et comment elle est utile.
Tetrad

3
@Tetrad wikipedia ne vous donne-t-il pas cela? en.wikipedia.org/wiki/Dot_product#Definition .
Jonathan Fischoff

1
Pas pour les jeux en particulier, non.
Tetrad

5
Cela fait. Il vous dit que le produit scalaire est le cosinus de l'angle. C'est tout ce que vous devez savoir (et que vous pouvez savoir), car l'application dépend toujours de l'utilisation que vous souhaitez en faire. Orienter l'IA? Vous avez besoin de l'angle, le point est donc votre ami. Rendre la lumière? Vous avez besoin de l'angle. Tout ce qu'on peut dire, c'est qu'il (produit scalaire dans ce cas) définit le cosinus de l'angle fois la longueur du vecteur a, fois la longueur du vecteur b. C'est la connaissance qui peut être donnée. Quelle partie de celui-ci utiliser et comment ne peut pas être racontée car les applications sont infinies.
Kaj


10

La prise ferme +, -, *et /. Sans eux, vous êtes complètement foutus.


12
Je pense que nous pouvons tous convenir que ce n'est pas ce que la question demandait. (aussi vous avez oublié%).
coderanger

2
Les autres réponses sont votées pour cela (calcul arithmétique de base) ....
RCIX

7
Pas seulement l'arithmétique de base, mais la compréhension du fonctionnement des opérations dans des environnements à deux complémentations, à virgule fixe et à virgule flottante IEEE. Sans une compréhension ferme de pourquoi 0,1 * 3! = 0,3, ou pourquoi -x pourrait ne pas être ce que vous attendez, vous êtes foutu.

1
@ user744 Je suis réellement foutu, quelle est cette sorcellerie?
Neon Warge

9

Oui, la programmation de jeux a tendance à être plutôt mathématique. Ce dont tu as besoin dépend de ce sur quoi tu travailles. L'arithmétique de base est un must, bien sûr, comme dans toute programmation. Au-delà de ça:

La géométrie est essentielle à tout travail graphique. Si vous souhaitez afficher des éléments à l'écran, vous devez comprendre les systèmes de coordonnées. Et si vous voulez les déplacer ailleurs que dans les directions cardinales, vous serez complètement perdus sans une compréhension solide des sinus, des cosinus et des vecteurs (trig de base). Et si vous devez travailler en 3D, les exigences en matière de géométrie et de trigonométrie deviennent beaucoup plus compliquées.

Si vous voulez modéliser une quelconque physique à distance réaliste, vous avez besoin de calcul pour cela. (C'est ce qui a poussé Newton à inventer le calcul, après tout.)

Tout type de calcul de probabilité nécessite la connaissance des statistiques et de la théorie des probabilités afin d’obtenir des résultats sains sans trop d’essais en essais et erreurs.

Il y en a probablement beaucoup plus, mais c'est ce qui me vient à l'esprit.


Je me souviens de l'époque où mon petit frère avait essayé de créer un jeu Bang Bang comme projet pour sa classe de lycée VB. Tout était réglé, sauf qu'il ne savait pas comment faire voler les boulets de canon dans un arc de cercle basé sur l'angle et la puissance, car il n'avait pas encore pris Trig 1. Après avoir expliqué les bases, cela a bien fonctionné.
Mason Wheeler

Pas de Trig nécessaire pour l'arc, il suffit d'utiliser s=u.t + a.t.t/2. Vous avez cependant besoin de trig pour obtenir la vitesse initiale (u).
Skizz

Pourquoi n'est-ce pas plus haut? La moitié des programmeurs avec qui j'ai travaillé ne peuvent pas utiliser de sinus et cosinus pour leur vie.
zaratustra

@ Skizz: Ouais. Vous avez besoin de trig pour transformer un angle et une puissance en un vecteur initial. Après cela, vous avez juste besoin d'une boucle d'animation et d'une constante gravitique.
Mason Wheeler

9

À tout le moins, vous aurez besoin.

  • Algèbre
  • Géométrie de base
  • Trigonométrie de base

Vous voudrez également au moins avoir une connaissance pratique des opérations vectorielles et savoir ce qu'est une matrice et à quoi elle peut être utilisée, bien que les détails ne soient pas strictement nécessaires.

Si vous souhaitez vous lancer dans la programmation graphique, vous aurez besoin de beaucoup plus de connaissances en mathématiques, mais la programmation de jeu en général ne doit pas nécessairement être aussi intensive en mathématiques.


9

Numérotation binaire et hexadécimale , et comment les convertir en / à partir de nombres décimaux.

Bien que vous n’ayez généralement pas besoin de travailler avec des nombres binaires bruts , ils sont fréquemment utilisés pour les variables Flag, qui nécessitent une logique booléenne et un transfert de bits.

Hex n'est pas tout à fait aussi important (à moins que vous ne souhaitiez traiter 0xDEADBEEF ), mais au minimum, vous voudriez reconnaître quand ils sont utilisés et pourquoi.


1
Si vous ne pouvez pas lire l'hex, vous ne pouvez pas programmer efficacement. La plupart des constantes au niveau du bit en C et C ++ vont être spécifiées en tant que valeurs hexadécimales.

Je pense que vous avez Booleanet binarymélangé. Pas sûr qu'ils soient absolument nécessaires pour la programmation de jeux.
Skizz

@Skizz, bon point - corrigé. (Et un autre point mineur, c'est un wiki - rien ne vous empêche de le changer. :)
Cyclops

Si vous ne pouvez pas lire hex, utilisez un outil pour le convertir pour vous.
Thomas Eding

6

Aucune mention des mathématiques fondamentales de la programmation informatique? La théorie des graphes, la théorie des nombres, la théorie des ensembles et les mathématiques concrètes sont généralement regroupées dans une classe douloureuse et mal enseignée appelée "mathématiques discrètes" à l'université.

Les "astuces sur les bits stupides" permettent d'économiser tout type de temps de programme (et elles sont généralement équivalentes à certaines astuces sur les cordes et à définir des astuces), les types de graphes et les parcours sont utilisés partout (même si vous ne choisissez que des conteneurs STL), et la complexité algorithmique est la clé de l'optimisation à mesure que les langues atteignent des niveaux plus élevés.


5

Je pense que la matrice de gains est un outil assez essentiel. Les jeux sont souvent plus amusants lorsqu'ils s'approchent d'un équilibre intéressant de fair-play à somme nulle, et les matrices de gains vous aident à quantifier cela dans des cas compliqués. Je suppose que cet article sur wikipedia est aussi bon que n'importe quel autre, et comprend le concept de base nécessaire: http://en.wikipedia.org/wiki/Normal-form_game


Cela me semble extrêmement peu pratique. Pensez-vous que Starcraft ou Warcraft 3 ont été équilibrés en utilisant une méthode comme celle-ci? Je ne pense pas, je pense que c’était un test itératif, un test de jeu et une correction constante.
Bobobobo

Euh, ils l'étaient presque certainement, les armées initiales de Warcraft étaient des répliques modifiées les unes des autres, probablement créées avec des matrices de gains conçues pour les rendre globalement équilibrées. Après cela, ils ont peut-être simplement bâti sur ce qu'ils ont appris pour ajuster les choses, mais ils ont probablement dû le faire à nouveau avec starcraft pour obtenir un niveau d'équilibre raisonnable maintenant que trois armées différentes étaient impliquées et à nouveau lorsque des unités de Starcraft II ont été ajoutées. Évidemment, vous ne vous arrêtez pas simplement au modèle, les tests de jeu montrent souvent des propriétés émergentes, mais une matrice de gains est la façon dont vous modélisez initialement la complexité.
Kzqai

[citation requise]?
bobobobo

1
Il était le suivant: amazon.com/Game-Architecture-Design-New-Edition/dp/0735713634/... Je souhaite que la version amazone a permis à la recherche à l' intérieur du livre, parce que ce pourrait être une bonne chose à faire référence en bits pour ce site. Bien que peut-être la recherche dans le livre amazonienne ne fonctionne pas de cette façon. Quoi qu'il en soit, c'est là où ils sont passés au-dessus des matrices de paiement, prenant l'exemple de warcraft, et l'avantage de la gestion de la complexité était si clair que j'ai été instantanément converti. Ce n'est pas garanti que Blizzard ait effectivement utilisé cette approche, mais ce sont des types intelligents qui ont probablement une solution mathématique ...
Kzqai

... du moins pour comprendre l’équilibre en un coup d’œil. De toute évidence, vous souhaitez également ajouter des tests. En fait, j'ai acheté le livre avec la force d'un petit dépliant contenant un contenu impressionnant lié au jeu, y compris une discussion sur la matrice de gains et les relations entre le papier et les ciseaux et toutes sortes d'excellentes choses. J'ai été déçu de constater que la version finale book est un tome et traite beaucoup de la programmation C ++ (ce qui n’est pas mon truc), ainsi que des problèmes de gestion de titres AAA. Tout dans la brochure réduite était super, cependant.
Kzqai

4

Comprendre le produit scalaire: Si deux vecteurs ont à peu près la même direction (thêta <90 degrés), alors le produit scalaire est positif ou négatif. Il peut être utilisé pour tester chaque fois que le joueur est en vue (en supposant que le FOV est à 90 degrés).

Et généralisez votre jeu 2D à des dimensions plus élevées. (utilisez des calculs vectoriels)

Si vous pouvez implémenter vous-même un moteur 3D, vous êtes prêt à partir.


4

Cela dépend de ce que vous faites .

Tous les programmeurs de jeux devraient connaître au moins l'algèbre du lycée. Cela signifie:

  • Un bon sens des chiffres
  • Confort avec les mathématiques de base (add, sub, mult, divide)
  • Trigonométrie (sin et cos)
  • Vecteurs, angle entre vecteurs, produit scalaire, produit transversal

Vos programmeurs graphiques doivent savoir:

  • Tout ce qui précède, et
  • Algèbre matricielle (pour les matrices de transformation)
  • Méthodes d'intersection polygone / rayon-polygone (voir un livre intitulé Détection de collision en temps réel

Vos programmeurs de physique doivent savoir:

  • Tout ce qui précède et
  • Équations différentielles
  • Méthodes numériques

3

Outre les sinus et les cosinus (que 50 à 75% des programmeurs que j'ai rencontrés ne savaient pas utiliser), découvrez la fonction magique arc-bronzage et comment l'utiliser pour obtenir l'angle d'un vecteur.


5
dans la plupart des cas, vous voulez, atan2car cela gère le traitement du quadrant lui-même.
CodesInChaos

0

Je suis surpris que personne n'ait mentionné les Quaternions . Je n'ai pas beaucoup d'expérience avec différents moteurs, mais au moins JME l'utilise partout et j'ai l'impression qu'ils constituent un concept assez important.


2
J'ai mentionné les quaternions.
Tenpn

Ahh, désolé, ça m'a manqué.
Raoul

3
Pour les 1% de programmeurs de jeux qui écrivent du code d'animation de bas niveau dans le moteur de rendu, les quaternions sont un outil utile. Pour les autres 99% des programmeurs de jeux, ils ne sont pas vraiment nécessaires.
Skizz

-1

Faire des jeux, c'est apporter de la "vraie" vie à la réalité virtuelle. Il vaut mieux en savoir plus sur le monde réel / l'univers que sur moins :) .. Les mathématiques ne sont qu'un outil. Et si vous établissez un plan, vous devez également prévoir du temps pour étudier.

ÉDITÉ: J'ai vu un malentendu :) .. Je pense que cet ensemble d’acquis en mathématiques que vous devez gouverner dépend de choses concrètes que vous voulez décrire. Personne ne sait tout. Et une meilleure façon de le faire est. Ne pas tout apprendre au début, mais apprendre un petit morceau, utiliser, apprendre, utiliser, etc. Ensuite, vous pouvez le faire pendant le développement, si vous avez un bon plan.


1
Combien y a-t-il de vraie vie à Tetris?
tenpn

Beaucoup de :). Tetris concerne la pensée logique sous la presure. Comme d'autres jeux de logique. Il s'agit de pratiquer. Plus vous pratiquez, plus vous pouvez gérer et continuer à vous amuser. Cela me semble la vraie vie
:)

3
vous n'avez pas de sens lorsque vous ne parvenez pas à traiter la question de manière juste.
Heath Hunnicutt

@ Heath Hunnicutt, vous avez raison.
Samedi

3
Je respecte vraiment cette réponse.
Heath Hunnicutt

-2

Réponse simple: BEAUCOUP!

Réponse détaillée:

Arithmétique, algèbre élémentaire et linéaire, dans la plupart des cas Trig, si vous créez un jeu en 3D, DEFINITELY Calculus, and Physics (La physique nécessite Calculus)!


3
Pouvez-vous clarifier un peu la liste? Voulez-vous dire "Trig si vous créez un jeu 3D" ou "Si vous réalisez un jeu 3D, DEFINITELY Calculus"?
Yoozer8
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.