Wie kann man eine eigene 3d GameEngine programmiere n?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Wie bei jedem Softwareprojekt macht es Sinn, mit einer Analyse- und Planungsphase zu beginnen.

Gerade in deinem Fall sehe ich ausgerichtet am letztendlichen Ziel zwei verschiedene Wege, die sich im letztendlichen Aufwand und den jeweiligen Schwerpunkten deutlich unterscheiden:

  1. Dein eigentliches Ziel ist es, ein 3D-Spiel zu entwickeln. Dementsprechend wäre es sinnvoll, dich gänzlich auf dessen Anforderungen auszurichten. Das heißt, im Grunde entwickelst du dein 3D-Spiel, die Engine ist das notwendige Baugerüst drumherum.
  2. Du möchtest eine Anwendung bauen, die wie Unity eine allgemeine Toolpalette zur Entwicklung von Spielen anbietet. Wenn die Funktionalitäten ebenso über grafische Oberflächenkomponenten steuerbar sein sollen, wäre das auch einer der großen Schwerpunkte bei diesem Projekt.

In jedem Fall wirst du dich zuerst mit Kernfunktionalitäten eines Spiels beschäftigen müssen:

  • Daten-/Ressourcenmanagement (d.h. Speichern und Laden von Daten)
  • Eingabeverarbeitung
  • Grafikrendering
  • optional: Physiksimulation (Kollisionsberechnung, u.ä.)
  • optional: Audioein-/ausgabe
  • optional: Triggern von Ausgaben (Bsp.: Vibration)

Was noch an Funktionalität hinzukommen könnte, obliegt natürlich dir.

Bei ersterem (Datenmanagement) macht es oft Sinn, unterschiedliche Serialisierungsformate zu implementieren. Während der Entwicklungszeit ist es zum Beispiel hilfreich, Daten noch leicht lesen und manipulieren zu können, während nach einer Publikation wiederum ein schneller Lese- oder Schreibvorgang wünschenswert ist. Mach dir Gedanken darüber, was für Daten du verwalten musst und wie du sie jeweils abspeichern möchtest.

Bezüglich der Handhabung von Grafik- und Audio müsstest du dich mindestens mit einer jeweils passenden API (z.B. DirectX, Metal, OpenGL, OpenAL, Vulkan) bzw. einem entsprechenden Binding/Wrapper auseinandersetzen und eigene Abstraktionen daraus ziehen. Da ich das als ziemlich aufwendig und nicht gerade einfach bezeichnen würde, wäre meine Empfehlung, an der Stelle stattdessen auf einer Bibliothek (z.B. Allegro, bgfx, GLFW, LWJGL, SDL) oder einem Framework (z.B. MonoGame, Qt) aufzubauen, die zum einen eine einfachere Schnittstelle zur Verfügung stellt und zum anderen eigene Funktionalitäten bereits beisteuert.

Auch für die Implementation physikalischer Simulationen würde ich eine vorhandene Bibliothek/Physik-Engine integrieren (z.B. Brax, bullet3, JoltPhysics, Open Dynamics Engine, Torque3D).

Je nachdem, auf wie viel Eigenimplementation du für Grafik-, Audio- und Physics-Engine bestehst, wirst du mehr oder weniger erweiterte Kenntnisse in Mathematik, Physik und Computergrafik einbringen müssen. Des Weiteren sind C/C++-Kenntnisse empfehlenswert, da die meisten Lernressourcen eine von beiden Sprachen für ihre Beispielcodes verwenden.

Ein paar nützliche Quellen kann ich folgend auch noch auflisten:

  • Schau nach Literatur von Eric Lengyel, er hat mehrere Bücher rund um das Thema Game Engine Development und dazu notwendiger Mathematik geschrieben (z.B. Mathematics for 3D Game Programming & Computer Graphics)
  • Real-Time Rendering von Eric Haines
  • Open Book: Computer Graphics from Scratch
  • Open Books: GPU Gems
  • Open Book: Physically Based Rendering

Bezüglich OpenGL & Co. (neben der jeweilig offiziellen Dokumentation):

Für die Architektur der Engine solltest du dir etwas möglichst flexibles und modulares einfallen lassen, worüber die jeweiligen Aufgaben gut verteilt werden können. Entweder du überlegst dir ein eigenes komponentenbasiertes Modell (mit einer Art zentralem Reactor) oder du orientierst dich direkt wie andere Vertreter (z.B. O3DE oder Unity) an dem ECS. Lies hinsichtlich Letzterem auch hier:

Es gibt aber natürlich noch etliche weitere Quellen, die sich mit der Architektur einer Game Engine befassen.

  • Game Engine Architecture von Jason Gregory
  • Game Programming Patterns von R. Nystrom
  • Jarlowrey: Videogame Architecture
  • Inspiration: C4 Engine; auf GitHub findest du zudem einige Open Source-Projekte (wie Acid, igneous, shiva, usw.), bei denen es sich sicherlich lohnt, sie sich einmal näher anzuschauen

Und zudem ein paar Quellen mit breiteren Themenrundumschlägen:

  • 3D Game Engine Programming (Tutorialserie zu unterschiedlichen Themen wie: AI, Physics, Serialisierung, etc.)
  • Game Coding Complete von M. McShaffry, D. Graham
  • Prinzipiell sind Bücher aus der Game Programming Gems-Reihe empfehlenswert
  • Learn Game Engine Programming (eine Quellenaufzählung von Radek Jurga)

Solltest du dich für das Ziel entschieden haben, eine Engine mit grafischen Oberflächenkomponenten zu entwickeln, würde ich dir raten, ein GUI-Toolkit zu nutzen. Anbieten würden sich beispielsweise:

  • Dear ImGui (C++)
  • JavaFX (Java)
  • JUCE (C++)
  • MAUI (.NET/C#)
  • NoesisGUI (C++/C#)
  • Qt (C++/QML)
  • WPF (.NET/C#)
  • wxWidgets (C++)

Achte auch hier auf einen modularen Aufbau. Die einzelnen Anwendungsschichten sollten via MVC/MVVM oder einem ähnlichen Muster getrennt werden.

Frontend und Backend kannst du technologisch durchaus trennen (d.h. Engine-Funktionalitäten z.B. mit C++ programmieren und die GUI mit Java). Doch um es auch hier möglichst einfach zu halten, würde ich dir empfehlen, für beide Seiten eine einheitliche Technologie zu wählen. Es sei denn, du wählst ein Toolkit, welches eine Separation zwischen zwei vorgegebenen Technologien von sich aus schon gut unterstützt (Bsp.: C# und XAML in WPF).

Da du das fragen musst, gehe ich davon aus, dass du eher Anfänger in dem Bereich bist. Alles gut, ist ja nicht schlimm, aber das wäre dann vermutlich eine Nummer zu hoch. Aber ja, grundsätzlich ist es möglich und wird oft gemacht. Dafür musst du direkt mit der Grafikkarte arbeiten und verstehen, wie die Programmiersprache, die du benutzt, funktioniert. Das ganze ist ein enorm komplexes Vorhaben und zu groß, um dir hier eine Anleitung zu geben. Grundsätzlich ist es aber möglich. Empfehlen würde ich eher existierende engines, wie Unity und co. Die sind bereits optimiert und voll umfänglich

Für eine 3d engine brauchst du sehr gute Mathe Kenntnisse, wieso immer logisches denken und a deep understanding of your Programmiersprache. (Keine Ahnung was es auf deutsch heißt). Einen simplen drehenden 3d Würfel könntest du mit sehr viel Code kopieren eventuell schaffen, aber mehr auch nicht.

Du brauchst also noch mehr Erfahrung, warum benutzt du eigentlich nicht einfach eine schon programmierte engine oder library? (ThreeJS, Godot, etc.)

Woher ich das weiß:Hobby – Programmiere seit 5 Jahren. Meiste Zeit nur mit javascript
KarlOttoFred 
Fragesteller
 26.01.2024, 17:44

Weiß nicht, ich find ne eigene viel cooler. Und mir ist langweilig.

1
WeissBrot965  26.01.2024, 17:54
@KarlOttoFred

Hi Ja, wollte ich auch schon mal machen und es macht wirklich Spaß. In welchem Lernjahr bist du? Vielleicht reichen deine Mathe-Kenntnisse und du könntest eigene Formen zeichnen.

0

Eine 3D GameEngine zu programmieren ist für eine Einzelperson ein Ding der Unmöglichkeit. Ich habe 10 Jahre in der Computerspiele Entwicklung gearbeitet. Ein Game Loop ist ein unfassbar aufwendiges Prozedere. Das machen nicht Mal richtig große Unternehmen. Wenn du Dich mit 3D Spieleentwicklung auseinandersetzen willst, schaue Dir Mal Unity oder Unreal an.

Woher ich das weiß:eigene Erfahrung
FaTech  26.01.2024, 15:48

Ist es alleine machbar? Ja. Haben schon viele einzelne Entwickler aus Langeweile 3D spiele ohne engine entwickelt? Ja. Haben viele große Unternehmen eine eigene engine, ja. ...

Es ist sehr komplex und alles andere als leicht. Aber es ist nicht unmöglich und mit genug Zeit und wissen auch für den einzelnen umsetzbar

1
WeissBrot965  26.01.2024, 16:20
@FaTech

Glaubst du der hat wirklich 10 Jahre in der Spieleentwicklungbranche gearbeitet 💀. Ich mein: “Ein Game Loop ist ein unfassbar aufwendiges Prozedere” ich kann nicht mehr 😂

0
SimonH85  26.01.2024, 16:47
@FaTech

Bei der Frage ging es nicht um die Entwicklung eines 3D Spiels, sondern der Entwicklung einer eigenen 3D Engine. Bitte zeigen Sie mir die One-Man-Show die eine eigene 3D Game Engine zur Entwicklung eines 3D Spiels entwickelt.

0
FaTech  26.01.2024, 17:48
@SimonH85

3D Spiel Entwickeln ist nicht dasselbe wie eine 3D Engine ... Ok und wie wird dann die Grafik 3D angezeigt, wenn man das dahinter nicht auch entwickelt hat? Von nichts kommt nichts. 3D Engine ist ein breit gefächerter Begriff. Schau mal im Internet. Selbst Scratch Script Kiddies haben Dinge ohne 3D Engine gebaut und damit ihre eigene erschaffen. In Scratch!

0
SimonH85  26.01.2024, 17:59
@FaTech

Die Game Engine ist notwendig für die Entwicklung des Spiels. Eine nachhaltige und wirtschaftlich sinnvoll einsetzbare Game Engine ist eine Mammutaufgabe, die kein Studio welches liefern muss, auch nur im Ansatz in Erwägung ziehen würde. Außer es macht die simpelsten Spiele die kein Mensch braucht und diese immer und immer wiederholt. Eine erwachsene Game Engine ist eine Aufgabe die Entwicklern alles abverlangt. Aber wenn Ihr Maßstab irgendwelche Script Kiddies sind. Dann klar. Jeder Dödel kann eine Game Engine entwickeln. Geschenkt. In Scratch!

0
FaTech  26.01.2024, 18:11
@SimonH85

Man merkt, dass du keine Ahnung hast. Man kann ein Spiel nur in einer Game Engine entwickeln. Allein der erste Satz bringt mich zum Lachen

0
WeissBrot965  26.01.2024, 16:19

Also dafür, dass du 10 Jahre in der Coputerspieleentwicklung gearbeitet hast, besitzt du ja null Ahnung.

0
SimonH85  26.01.2024, 16:49
@WeissBrot965

Sie sind nicht mal in der Lage eine Frage zu lesen geschweige denn die Entwicklung eines 3D Spiels von der Entwicklung einer eigenen 3D Game Engine zu unterscheiden. Welch’ geniale Demonstration Ihres absoluten Nichtwissens!

0
WeissBrot965  26.01.2024, 17:37
@SimonH85

Ne, wollte den Fragesteller nur fragen, wozu er sie selber programmieren will, statt einfach eine zu benutzen. Hab ich sogar dazu geschrieben, wo ist da das Problem.

Außerdem, schick mal dein Github. Möchte deine 10 Jahre Berufserfahrung gerne sehen 😂

0
SimonH85  26.01.2024, 17:41
@WeissBrot965

Jetzt wird mir alles klar! “Schüler, manchmal nüchtern” Sie scheinen gerade einen sitzen zu haben. Drücken Sie Mal schön weiter die Schulbank, so dass Sie eventuell irgendwann Mal produktiv werden.

0
WeissBrot965  26.01.2024, 17:51
@SimonH85

Hallo, warum gehst du an meiner Frage vorbei? Ich will dein github. Ich möchte nämlich Ergebnisse aus deiner 10 Jahre langen Erfahrung sehen, ein großes Maul haben kann jeder.

0
SimonH85  26.01.2024, 18:02
@WeissBrot965

Ich habe kein Interesse mich mit Ihnen kleinen Schüler auseinanderzusetzen. Sie sind so voll von sich, dass Sie nicht in der Lage sind normal zu kommunizieren. Ich habe keine Zeit für Kleinkinder wie Sie. Ich habe mit keiner Silbe erwähnt, dass ich selber Programmierer bin. Ich habe als Produzent 10 Jahre in der Spieleindustrie gearbeitet. Dementsprechend weiß ich was es bedeutet. Wir mussten in einer der höchst wettbewerbsträchtigsten Industrien liefern und überleben. Ich weiß, dass verstehen Sie nicht. Zu jung. Zu planlos. Schönes Restleben!

0
WeissBrot965  26.01.2024, 18:17
@SimonH85

Seit 5 einhalb Jahren Hobbyentwickler im Front- und Backend. Genug Pläne für die Zukunft. In 1,5 Jahren Abi.

Ich bin also doch nicht so planlos wie du denkst :D. Nur weil du ein 50-jähriger Oxe bist heißt es nicht gleich, dass du hier mehr Recht hast.

Außerdem, wie willst du wissen, wie schwer es ist eine 3d rendering engine zu entwickeln, wenn Sie selbst nicht einmal programmieren.

Erklären Sir mir bitte die Logik dahinter und red mit Worten. Ohne unnötiges Großmaulgeschwafel das keinen interessiert.

Warum haben sie eigentlich angefangen mit mir zu schreiben, wenn ich ja nur so ein kleiner dummer planloser Schüler sei 😂.

0