Wie programmiert man einen virtuellen 3D-Raum ohne Game Engine?
Heutzutage haben kleinere Entwickler den Vorteil, dass es Game Engines gibt, die einen den großteil der eigentlichen Arbeit abnehmen und bereits beim starten eines neuen Projektes einen leeren und fertigen 3D Raum anzeigen, wo Sie nur noch ihre mit Blender z.b. modelierten Objekte reinplatzieren müssen und simple Script Dateien programmieren müssen um die reinplatzierten Objekte aufgaben zu geben. Wie das bewegen auf Koordinaten sobald der Spieler W,A,S,D benutzt. Dann braucht man das "Spiel" nur noch exportieren und man hat eine ausführbare .exe datei die einen 3D Raum beinhaltet mit einem objekt das man steuern kann.
Aber das was mich interessiert ist, wie genau macht man den eigentlich den leeren Raum den es bereits schon immer als Vorlage gibt bei Game Engiens wie Unity oder Unreal ENgine? Allein Blender um überhaupt die 3D Modelle zu machen ist ja schon selber ein vorgefertigter 3D Raum der als Werkzeug dient um Objekte zu modellieren!
Also wie programmiert man eigentlich überhaupt denn 3D Raum den man überhaupt zuerst braucht um darauf dann ein spiel bauen zu können?
Um das ganze zu verbildlichen:
Das hier ist ein 3D Raum worin man sich frei umschauen kann und das jeder hat der ein neuen und Leeren Projekt startet in einer Engine wie Unity:
Aber wie macht man denn überhaupt den vorgefertigten 3D Raum / die eigentliche Scenen-Ansicht die man im Editor bereits von Unity hat?
Benutzt man dafür ein Visual Studio-Forms Projekt um überhaupt einen 3D Raum aus dem Nichts zu erschaffen oder wie macht man den eigentlichen leeren 3D Raum überhaupt indem dann später erst alles stattfinden kann?
4 Antworten
Ich würde dir dazu die folgenden 4 Videos von OneLoneCoder empfehlen. Dort programmiert er eine 3D-Engine von Grund auf und erklärt dabei noch wie es funktioniert:
Leider alles nur C++...
Davon gibts keine C# version, oder?
Das erste Betriebssystem war GM-NAA I/O. Ich nehme an es wurde mit Lochkarten in Maschinensprache „geschrieben“. So wie sie alles andere damals auch.
https://de.m.wikipedia.org/wiki/Lochkarte
Und nope, kenne für die Videos keine C# Version, sorry.
Guck dir mal die Videos von NetLamp an. Allerdings werde ich dazu auch ein Tutorial machen
Dein Kommentar war nicht unter meinem Gestanden.
Beziehst du dich auf meine Frage ob es das auch in C# gibt?
Natürlich Beziehe ich mich in dieser Weise auf die Frage in dem ich deinen Kommentar beantworte
Heutzutage haben kleinere Entwickler den Vorteil, dass es Game Engines gibt, die einen den großteil der eigentlichen Arbeit abnehmen und bereits beim starten eines...
- Größere Entwickler bedienen sich auch an "Game Engines". Als Beispiel kann ich auf Fortnite/Epic-Games verweisen. Sie bedienen sich auch an einem "remake" der Unity-Engine.
- Der großteil der eigentlichen Arbeit wird nicht abgenommen. Es wird eher der Großteil der lästigen Arbeit abgenommen.
Alles hat doch seinen anfang und bevor es überhaupt engines gibt muss man doch zuerst einen 3D Raum erschaffen der überhaupt als Editor ansicht dient?
Wie genau geht das weil das thema ist bereits so veraltet das man nichts darauf zutreffendes finden wird.
Man findet anleitungen wie man mit Unity arbeitet und der 3D Ansicht aber es gibt keine Anleitungen wie man eine eigene 3D Ansicht macht ohne eine engine weil auch die engine muss ja mal so angefangen haben um überhaupt die Scenenansicht zu ermöglichen.
Mhh. Das ist natürlich schwierig. Die Engine-Entwickler sind natürlich schwer zu finden, da sie rar sind aber prinzipiell kann jeder eine eigene Engine machen.
Vorausgesetzt, man kennt sich mit Mathe rel. gut aus.
- Wir nehmen mal eine Fläche. Genauer: ein Dreieck von Punkt A bis Punkt B und es soll rechtwinklig sein.
- Es soll mit einer Kathete zu dir zeigen
- Du bildest dann ein Dreieck auf dein Bildschirm ab.
- Der Winkel(der rechwinklig eig. ist) soll ungefähr sich logistisch (Mit einer Schranke bei 90Grad und der Anderen Schranke bei 180Grad) zu der X-Koordinaten-Differenz zwischen dir und dem Dreieck.
- Dann ziehst du 2 Linien(lineare Funktionen) Durch deinen Bildschirm (horizontal und eine "oben" eine "unten")
- zu guter Letzt bildest du eine lineare Funktion namens "g".
g verschiebst du nach links oder recht, je nachdem wie du das Dreieck verschiebst. Die Steigung von g variierst du auch von kongruierend 0 zu kongruierend zu ∞ zu kongruierend 0 (Verhältnis von Verschiebung zu Steigung entspricht der Gaußschen Glocke) . Die Punkte in denen g die Anderen "Achsen" schneidet verbindest du und mithilfe des Winkels kannst du einen Dreieck abbilden, dass du verschoben anschaust.
Das alles macht eine Engine und natürlich nicht nur mit Dreiecken. Du musst bedenken, dass es mit Verformten Objekten auch getan wird (Charaktere usw), bei denen das aber ziemlich schwierig wird.
Anmerkung: Es ist zu beachten, dass es auch ein FOV gibt und dass man das Dreieck auch neigen kann usw. Hinzu kommt noch,dass man es optimieren soll, damit es keine Probleme mit der Leistung macht.
Das liegt daran, dass die, die wissen, wie man so etwas macht, keine Anleitungen benötigen. Generell benötigt man Anleitungen überhaupt nicht, auch wenn heutzutage jeder meint, alles mittels ein paar kleiner Tutorials lernen zu können.
Der Editor ist eine Kleinigkeit im Vergleich zur eigentlichen Engine (3D-Raum, Physik...) und nichts anderes als eine Anhäufung von 2D-GUI-Elementen - wie man die erstellt... ein Rechteck hier, ein schattierter Rahmen da und ein MouseEvent dort und schon hat man einen interaktiven Knopf. Das lernt man durch das Betrachten der API der Sprache und vielem, vielem Nachdenken und Erkennen logischer Zusammenhänge.
Wie erstellt man eine Grafik- oder Physik-Engine? Durch mathematisches Wissen, das überall verfügbar ist. Eignet man sich dies an, so knüpft man Verbindungen mit dem Wissen über Software-Entwicklung und entwickelt...
Ja da hast du recht. Eine Engine erfordert unnormal viel mathematische Kenntnisse. Nicht selten habe die Entwickler einen Doppel-Abschluss o.ä.
Das ist natürlich nicht so einfach zu beantworten. Die indirekte Antwort ist: es ist sehr kompliziert, deswegen gibt es ja Game Engines. Da steckt viel Mathematik drin. Im Studium haben wir mal ein 3D-Modell "from the scratch" dargestellt und das war natürlich extrem langsam ohne jegliche Optimierungen und Ausnutzung der GPU.
Außerdem würde ich nicht sagen, dass es leicht ist, ein etwas umfangreicheres 3D-Spiel zu programmieren, wenn man eine Game Engine verwendet. Die Game Engine macht es erst möglich, sowas profitabel zu machen, ansonsten bräuchte man ein riesiges Team oder 10 Jahre für ein Spiel statt 1-3 Jahren, was sich sicher nicht rechnet. Es bringt nichts, das Rad neu zu erfinden. Es ist so, auch mit einer Game Engine, schon genug Arbeit.
Ich habe es geschaft in 2 Wochen alleine Fortnite mit einer besseren Grafik nach zu programmieren (Unity)
Wir nehmen all die Sachen als selbstverständlich, ohne uns zu fragen wieso und wie überhaupt das enstehen kann?
Ein einfaches beispiel ist z.b. wie hat jemand ein Betriebsystem programmieren können wenn es noch kein Betriebsystem gibt um überhaupt einen Text Editor verwenden zu können?
Sowas wird einem nie gesagt und finden kann man das nicht richtig weil das Thema viel zu spezifisch ist.
Also wie macht man eigentlich einen leeren 3D Raum um überhaupt das umschauen zu ermöglichen in einem Scenenfenster wie im ersten Bild?
Hiermit könnte man z.B. anfangen: https://klickverbot.at/science/3d-mathematics/3d-mathematics.pdf
Wenn du "Mathematik" an deine Suchbegriffe anhängst, findest du sicher mehr dazu.
Wenn du wirklich alles von Hand machen willst musst du dir den Bildschirm wie ein 3D Koordinatensystem aus Mathe vorstellen. Die markanten Punkte musst du dann zeichnen und verbinden. Für die Rotation etc. werden dann mathematische Berechnungen nötig sein :)
Wenn du schon so zielgenaue Antworten liferst, kannst du auch was verlinken, wie eigentlich das erste Betriebssystem programmiert wurde, ohne einen vorhandenen Text Editor ?