Quels sont les mathématiques, la physique, l'IA et les concepts généraux spécifiques qu'un programmeur doit connaître pour développer un moteur de jeu? [fermé]

9

Étant programmeur d'applications Web et centrées sur la base de données, j'ai des connaissances dans les structures de données telles que les listes, les arbres, les graphiques, etc. J'utilise honnêtement très peu de ces algorithmes de structure de données dans mon codage, sauf pour trier les choses dans des tableaux simples, comme je fonctionnait presque entièrement avec des cadres orientés client où toutes les fonctionnalités de base étaient intégrées. Je connais le C, PHP, Java, HTML, PL / SQL et MySQL. J'apprends actuellement Python.

Je veux commencer par le développement de jeux. J'ai vu d'autres questions concernant des suggestions, des conseils et des approches de développement de jeux pour les débutants. Je comprends ces points et suis clair avec les réponses. Quelques jours après la publication, j'ai lu l'article Write Games, Not Engines et j'ai réalisé que je devais implémenter un jeu avant de créer un moteur de jeu. Pourtant, j'ai des questions.

Mon objectif est de

  • Améliorer mes compétences de programmation de base, notamment en utilisant des algorithmes de structure de données, des concepts mathématiques et physiques.
  • Mettre en œuvre un bon moteur de jeu, pour me faire plaisir dans le codage de niveau de base
  • Pour ouvrir ma voie dans le domaine de la recherche sur l'IA.

Quels sont les mathématiques, la physique, l'IA et les concepts généraux spécifiques qu'un programmeur doit connaître pour développer un moteur de jeu?

droïdes
la source

Réponses:

11

Structures de données: C'est certainement une question valable. Cependant, alors que certaines structures de données sont utiles pour tout type de jeu (comme celles que vous avez déjà mentionnées, les listes, les arbres ...), il y en a d'autres qui sont très spécifiques. Par exemple, Octrees peut être très utile en programmation 3D, mais dans un environnement 2D pur, vous n'en aurez probablement pas besoin.

Algorithmes : la même règle d'or s'applique. Par exemple, dans un environnement 2D pur, la détection de collision fonctionne très très différemment qu'en 3D.

Domaines mathématiques importants: LE plus important pour un développeur de moteur est l'algèbre linéaire et les sujets d'algèbre plus avancés (quaternions). Assez simple vraiment, si vous êtes à l'aise avec l'algèbre linéaire (et je veux dire au-delà de la simple multiplication matricielle), vous partez du bon pied.

Next ist Geometry, qui se connecte bien à l'algèbre linéaire dans Engine Dev de toute façon, et n'a probablement pas besoin d'une mention de toute façon.

De plus, cela ne fait jamais de mal d'avoir une solide compréhension du calcul de base. Cela est pratique lorsque vous traitez avec le moteur physique ou des sujets d'ombrage plus avancés.

D'autres sujets d'intérêt devraient être: la combinatoire, les statistiques

Physique: Ce n'est pas obligatoire, SI vous avez l'intention de faire des jeux simples. Cela ne fait pas de mal, mais vous vous débrouillerez bien avec la physique du secondaire dans ce cas.

Si vous songez à écrire un moteur physique ou à implémenter une architecture existante, alors oui, c'est obligatoire. Mais n'ayez crainte, il existe de nombreux livres de physique écrits spécifiquement pour Game-Devs. Gardez à l'esprit, lisez ces avant de commencer à coder un jeu avec la physique. Si votre jeu doit avoir de la physique, ces moteurs s'inscriront profondément dans votre architecture de base.

AI: Pour être tout à fait honnête, si l'IA est votre principal intérêt, je ne prendrais pas la peine d'écrire un moteur entier. L'IA est beaucoup plus amusante à faire lorsque vous avez une architecture existante avec laquelle jouer. L'écriture d'un moteur sera pénible et prendra un certain temps jusqu'à ce que vous soyez en mesure d'implémenter des algorithmes d'IA amusants.

Quel type de jeu souhaitez-vous développer? Peut-être puis-je développer davantage ces points avec ces informations.

Michael Kissner
la source
Merci pour votre réponse élaborée. En réponse à votre question ... eh bien en ce moment je n'ai aucune idée dans ma tête, mais je veux développer un moteur de jeu 3D. Mais pensez mieux pour commencer avec un jeu en 2D et apprenez à connaître l'environnement. Avant tout cela, je devrais jouer à quelques jeux pour connaître l'apparence des jeux (car je n'ai jamais joué à des jeux vidéo :-)). Pour qu'il soit facile pour moi de comprendre la terminologie des livres et d'autres choses. J'ai trouvé les informations ci-dessous très utiles,
droidsites
désolé manqué le lien dans mon commentaire précédent: gamedev.stackexchange.com/questions/8502/…
droidsites
Dans le passé, j'aurais recommandé de commencer par les jeux 2D si vous souhaitez développer des jeux 3D. Cependant, avec le soulèvement des architectures comme XNA, je pense qu'il est plus amusant de plonger directement en 3D. Avez-vous déjà jeté un œil à C # / XNA? Cela ne devrait pas être un problème compte tenu de votre expérience en programmation
Michael Kissner
Non, je ne l'avais pas vérifié. Ouais ... ce n'est pas un problème d'opter pour C #. Mais je suis très intéressé par le genre de choses en python :-)
droidsites
Si vous êtes intéressé par Python et que vous êtes plus intéressé par la création d'un jeu plutôt que par la construction de la technologie pour créer un jeu, vous pouvez consulter Panda3D, ou le Blender Game Engine.
Sean Middleditch
1

Bien qu'il puisse être valide de demander quelles structures de données sont les plus utilisées dans le développement de jeux, il est beaucoup plus valable de demander quelles structures de données sont utilisées pour des problèmes spécifiques. Je peux facilement affirmer que les tables de hachage sont super communes dans les jeux, mais cela ne vous dirait rien d'utile en termes de quand et où utiliser (et de ne pas utiliser!) Une table de hachage dans votre propre code. :)

En termes de mathématiques, vous devez avoir une très bonne compréhension de l'algèbre linéaire (vecteurs, matrices, résolution de systèmes linéaires, etc.), une très bonne compréhension de la trigonométrie et au moins une compréhension de base du calcul (dérivées simples et intégration) . Tout cours d'introduction à l'algèbre linéaire de niveau collégial devrait vous mettre sur la bonne voie, sinon vous enseigner tout ce que vous devez savoir pour commencer à travailler avec les principes graphiques 3D communs. Je joins également un livre ci-dessous que vous trouverez peut-être très utile.

Pour la physique, vous allez faire un tour. La physique peut être divisée en deux catégories différentes: détection des collisions et réponse aux collisions. Vous devez absolument connaître les maths derrière la détection de collision, car ces maths sont plus ou moins identiques à ce que vous devez faire des graphiques (en particulier pour construire les arbres et les cartes dont vous avez besoin pour l'occlusion), et vous allez utiliser ces trucs pour beaucoup de votre logique de jeu aussi.

La réponse aux collisions peut varier de «simple» à des niveaux ridicules de complexité, et même les éléments simples peuvent être non intuitifs au début. Je recommande fortement, fortement de laisser ce genre de choses à une bibliothèque existante comme Bullet, Havok, PhysX, etc. (ou Box2D si vous travaillez sur un gameplay 2D) jusqu'à ce que et à moins que vous ne soyez à l'aise avec vos mathématiques et algorithmes existants connaissances et décidez que vous voulez apprendre comment fonctionnent les moteurs physiques. Je vous recommanderais alors de créer un moteur de physique 2D très simple comme première tentative. Les moteurs physiques 3D sont des bêtes incroyablement complexes, et sont (sans doute) de loin la partie la plus compliquée et la plus difficile de la programmation de jeux, c'est pourquoi les moteurs physiques sont la technologie tierce la plus utilisée sous licence dans les jeux. Vous ne voyez tout simplement pas beaucoup de jeux qui ne sont pas t utiliser Havok ou PhysX dans le monde professionnel, malgré le nombre de jeux dotés de moteurs graphiques maison et d'un code moteur de base. Même les entreprises qui ne font que construire des moteurs de jeux proposent généralement un moteur physique, par exemple Unreal utilise simplement PhysX plutôt que d'inclure son propre moteur physique.

Je recommanderais les livres suivants pour vous lancer. Le premier est un livre de niveau d'introduction sur les mathématiques de base que vous devez connaître en tant que programmeur de jeux 3D:

http://www.amazon.com/Mathematics-Programming-Computer-Graphics-Third/dp/1435458869

Le second est un livre détecté pour les algorithmes de détection de collision (pas la réponse à la collision!) Qui vous aidera à la fois avec votre codage graphique et votre codage physique:

http://www.amazon.com/Real-Time-Collision-Detection-Interactive-Technology/dp/1558607323

Sean Middleditch
la source