Welche spezifischen Konzepte für Mathematik, Physik, KI und allgemeine Kenntnisse sollte ein Programmierer kennen, um eine Spiel-Engine zu entwickeln? [geschlossen]

9

Als Programmierer von Web- und DB-zentrierten Anwendungen habe ich Kenntnisse in Datenstrukturen wie Listen, Bäumen, Diagrammen usw. Ich verwende ehrlich gesagt nur sehr wenige dieser Datenstrukturalgorithmen in meiner Codierung, außer zum Sortieren von Dingen in einfachen Arrays, wie ich arbeitete fast ausschließlich mit kundenorientierten Frameworks, in denen alle Kernfunktionen integriert waren. Ich kenne C, PHP, Java, HTML, PL / SQL und MySQL. Ich lerne gerade Python.

Ich möchte mit der Spieleentwicklung beginnen. Ich habe andere Fragen zu Vorschlägen, Tipps und Ansätzen für die Spieleentwicklung für Anfänger gesehen. Ich verstehe diesen Punkt und bin mit den Antworten klar. Einige Tage nach dem Posten las ich den Artikel " Spiele schreiben, keine Engines" und erkannte, dass ich ein Spiel implementieren sollte, bevor ich eine Spiel-Engine erstelle. Trotzdem habe ich Fragen.

Mein Ziel ist es

  • Verbessere meine Programmierkenntnisse auf Kernniveau, einschließlich der Verwendung von Datenstrukturalgorithmen, mathematischen und physikalischen Konzepten.
  • Implementieren Sie eine gute Spiel-Engine, um mich der Codierung auf Kernebene zu widmen.
  • Um meinen Weg in das KI-Forschungsfeld zu ebnen.

Welche spezifischen Konzepte für Mathematik, Physik, KI und allgemeine Kenntnisse sollte ein Programmierer kennen, um eine Spiel-Engine zu entwickeln?

Droidsites
quelle

Antworten:

11

Datenstrukturen: Dies ist sicherlich eine berechtigte Frage. Während einige Datenstrukturen für jede Art von Spiel nützlich sind (wie die bereits erwähnten, Listen, Bäume ...), gibt es andere, die sehr spezifisch sind. Zum Beispiel können Octrees in der 3D-Programmierung sehr nützlich sein, aber in einer reinen 2D-Umgebung werden Sie diese wahrscheinlich nicht benötigen.

Algorithmen : Es gilt die gleiche Faustregel. In einer reinen 2D-Umgebung funktioniert die Kollisionserkennung beispielsweise ganz anders als in 3D.

Wichtige mathematische Bereiche: THE wichtigste Bereich für einen Motor Dev zu kennen ist Lineare Algebra und erweiterte Algebra Themen (Quaternionen). Ganz einfach, wenn Sie mit linearer Algebra vertraut sind (und ich meine über die einfache Matrixmultiplikation hinaus), haben Sie einen guten Start.

Als nächstes kommt die Geometrie, die sich in Engine Dev sowieso gut mit der linearen Algebra verbindet und wahrscheinlich sowieso keine Erwähnung benötigt.

Außerdem schadet es nie, ein solides Verständnis der Grundrechnung zu haben. Dies ist praktisch, wenn Sie sich mit der Physics Engine oder fortgeschritteneren Shading-Themen befassen.

Weitere interessante Themen sollten sein: Kombinatorik, Statistik

Physik: Es ist nicht obligatorisch, WENN Sie einfache Spiele machen wollen. Tut nicht weh, aber in diesem Fall kommen Sie mit der Physik der High School gut zurecht.

Wenn Sie daran denken, eine Physik-Engine zu schreiben oder eine vorhandene Architektur zu implementieren, ist dies obligatorisch. Aber keine Angst, es gibt viele Physikbücher, die speziell für Game-Devs geschrieben wurden. Denken Sie daran, lesen Sie diese, bevor Sie ein Spiel mit Physik programmieren. Wenn Ihr Spiel Physik haben sollte, werden diese Engines tief in Ihre Kernarchitektur eingebunden.

AI: Um ganz ehrlich zu sein, wenn AI Ihr Hauptinteresse ist, würde ich mich nicht darum kümmern, eine ganze Engine zu schreiben. KI macht viel mehr Spaß, wenn Sie eine vorhandene Architektur zum Spielen haben. Das Schreiben einer Engine wird schmerzhaft sein und eine ganze Weile dauern, bis Sie in der Lage sind, unterhaltsame KI-Algorithmen zu implementieren.

Welche Art von Spiel möchten Sie entwickeln? Vielleicht kann ich mit diesen Informationen mehr auf diese Punkte eingehen.

Michael Kissner
quelle
Vielen Dank für Ihre ausführliche Antwort. Als Antwort auf Ihre Frage ... Nun, im Moment habe ich keine Ahnung in meinem Gehirn, möchte aber eine 3D-Spiel-Engine entwickeln. Aber denken Sie besser daran, mit einem 2D-Spiel zu beginnen und die Umgebung kennenzulernen. Vor all dem sollte ich einige Spiele spielen, um zu wissen, wie die Spiele aussehen und sich anfühlen (da ich noch nie Videospiele gespielt habe :-)). Damit es mir leicht fällt, die Terminologie der Bücher und andere Dinge zu verstehen. Ich fand das unten sehr hilfreich,
Droidsites
leider verpasst den Link in meinem vorherigen Kommentar: gamedev.stackexchange.com/questions/8502/...
droidsites
In der Vergangenheit hätte ich empfohlen, zuerst mit 2D-Spielen zu beginnen, wenn Sie 3D-Spiele entwickeln möchten. Mit dem Aufstand von Architekturen wie XNA macht es meiner Meinung nach mehr Spaß, direkt in 3D einzutauchen. Haben Sie sich C # / XNA bereits angesehen? Sollte angesichts Ihres Programmierhintergrunds kein Problem sein
Michael Kissner
Nein, ich hatte es nicht überprüft. Ja ... es ist kein Problem, sich für C # zu entscheiden. Aber ich interessiere mich sehr für Python :-)
Droidsites
Wenn Sie sich für Python interessieren und mehr daran interessiert sind, ein Spiel zu erstellen, als die Technologie zum Erstellen eines Spiels zu entwickeln, sollten Sie sich Panda3D oder die Blender Game Engine ansehen.
Sean Middleditch
1

Während es gültig sein kann zu fragen, welche Datenstrukturen in der Spieleentwicklung am häufigsten verwendet werden, ist es viel gültiger zu fragen, welche Datenstrukturen für bestimmte Probleme verwendet werden. Ich kann leicht sagen, dass Hash-Tabellen in Spielen sehr häufig sind, aber das würde Ihnen nichts Nützliches darüber sagen, wann und wo Sie eine Hash-Tabelle in Ihrem eigenen Code verwenden (und nicht verwenden!). :) :)

In Bezug auf Mathematik benötigen Sie ein sehr gutes Verständnis der linearen Algebra (Vektoren, Matrizen, Lösen linearer Systeme usw.), ein sehr starkes Verständnis der Trigonometrie und zumindest ein grundlegendes Verständnis der Analysis (einfache Ableitungen und Integration). . Jeder lineare Algebra-Einführungskurs auf College-Ebene sollte Sie auf den richtigen Weg bringen, wenn Sie nicht alles lernen, was Sie wissen müssen, um mit gängigen 3D-Grafikprinzipien zu arbeiten. Ich verlinke auch ein Buch, das Sie vielleicht sehr hilfreich finden.

Für die Physik sind Sie bereit für eine Fahrt. Die Physik kann in zwei verschiedene Kategorien unterteilt werden: Kollisionserkennung und Kollisionsreaktion. Sie müssen unbedingt die Mathematik hinter der Kollisionserkennung kennen, da diese Mathematik mehr oder weniger identisch ist mit dem, was Sie für die Erstellung von Grafiken benötigen (insbesondere zum Erstellen der Bäume und Karten, die Sie für die Okklusion benötigen), und Sie werden dieses Material für eine verwenden viel von Ihrer Spielelogik auch.

Die Kollisionsreaktion kann von "einfach" bis zu lächerlich kompliziert variieren, und selbst die einfachen Dinge können zunächst nicht intuitiv sein. Ich würde Ihnen wärmstens empfehlen, dieses Zeug einer vorhandenen Bibliothek wie Bullet, Havok, PhysX usw. (oder Box2D, wenn Sie am 2D-Gameplay arbeiten) zu überlassen, bis Sie mit Ihrer vorhandenen Mathematik und Ihrem vorhandenen Algorithmus vertraut sind Wissen und entscheiden, dass Sie lernen möchten, wie Physik-Engines funktionieren. Ich würde Ihnen dann empfehlen, als ersten Versuch eine sehr einfache 2D-Physik-Engine zu erstellen. 3D-Physik-Engines sind wahnsinnig komplexe Biester und (wohl) der mit Abstand komplizierteste und schwierigste Teil der Spielprogrammierung, weshalb Physik-Engines die am häufigsten lizenzierte Technologie von Drittanbietern sind, die in Spielen verwendet wird. Man sieht einfach nicht sehr viele Spiele, die es nicht gibt Verwenden Sie Havok oder PhysX in der Berufswelt nicht, obwohl in vielen Spielen selbst entwickelte Grafik-Engines und Core-Engine-Code von Grund auf neu sind. Selbst Unternehmen, die nur Game-Engines erstellen, lizenzieren normalerweise eine Physik-Engine, z. B. verwendet Unreal nur PhysX, anstatt eine eigene Physik-Engine einzuschließen.

Ich würde die folgenden Bücher empfehlen, um Ihnen den Einstieg zu erleichtern. Das erste ist ein Einführungsbuch über die Grundlagen der Mathematik, die Sie als 3D-Spielprogrammierer kennen müssen:

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

Das zweite ist ein Buch, das anhand von Kollisionserkennungsalgorithmen (keine Kollisionsreaktion!) Erkannt wurde und sowohl bei Ihrer Grafikcodierung als auch bei Ihrer Physikcodierung hilfreich ist:

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

Sean Middleditch
quelle