Einführung in das Game-Engine-Layering

Layered-Architektur der Game-Engine (von oben nach unten)

Werkzeugschicht
In einer modernen Spiel-Engine sind das erste, was wir sehen, möglicherweise keine komplexen Codes, sondern verschiedene Editoren. Mit diesen Editoren können wir Levels, Charaktere, Animationen usw. erstellen und entwerfen. Spielinhalte, diese Reihe von Editoren bildet die Spitze Schicht des Motors - die Werkzeugschicht.
Fügen Sie hier eine Bildbeschreibung ein
Funktionsschicht

  • Der Prozess der Umwandlung einer dreidimensionalen virtuellen Welt in ein zweidimensionales Bild für Bild erfordert die Verwendung eines Rendering-Systems (Rendering);
  • Damit sich die stationären Modelle bewegen und lebensechte Bewegungen ausführen, um ein kontinuierliches Bild zu erzeugen, müssen wir das Animationssystem (Animation) verwenden.
  • Physikalische Kollisionen und die Wirkung verschiedener Kräfte machen die Bewegung von Objekten näher an der realen Welt. Wir müssen das physikalische System (Physik) nutzen;
  • Jede Spielwelt hat ihre eigenen Regeln, und es gibt auch NPCs, um die Spielbarkeit des Spiels zu bereichern, was den Einsatz von Skripten (Script), Zustandsmaschinen (FSM) und KI erfordert;

Der Betrieb eines Spiels ist untrennbar mit der Mensch-Computer-Interaktion verbunden, die eine Reihe von Funktionen umfasst. Die oben genannten Funktionen bilden zusammen die Funktionsschicht der Spiel-Engine.
Fügen Sie hier eine Bildbeschreibung ein
Das Resource Layer-
Spiel enthält nicht nur Quellcodezeilen, sondern auch Multimediadateien in verschiedenen Formaten, wie z. B. die PSD-Dateien von PhotoShop und die MAX-Dateien von 3DSMAX, die diese Reihe von Grafiken, Bildern, Audio-, Videodateien und anderen Daten laden und verwalten Aufgaben der Ressourcenschicht. Die Ressourcenschicht befindet sich unterhalb der Funktionsschicht und stellt der Funktionsschicht kontinuierlich Daten zur Verfügung. Es ist wie ein Maler, der oben malt, und die Ressourcenschicht stellt ihr unten kontinuierlich Farbe zur Verfügung.
Fügen Sie hier eine Bildbeschreibung ein
Kernschicht
Die wichtigste und wichtigste Schicht der Spiel-Engine ist die Kernschicht. Die Kernschicht ist dafür verantwortlich, auf häufige Aufrufe der oberen Schichten zu reagieren und verschiedene Grundfunktionen bereitzustellen, wie z. B. Speicherverwaltung, Containerzuweisung, Datenberechnung, Multithread-Erstellung usw.
Fügen Sie hier eine Bildbeschreibung ein
Plattformschicht
Die Plattformschicht ist die am häufigsten übersehene Schicht. Ein Spiel oder eine Engine kann auf verschiedenen Plattformen veröffentlicht werden und über unterschiedliche grafische Oberflächen verfügen; und verschiedene Benutzer können unterschiedliche Hardwaregeräte wie Tastatur, Maus und Controller verwenden. Die Anpassung an unterschiedliche Plattformen ist Aufgabe der Plattformschicht. Fügen Sie hier eine Bildbeschreibung ein
Drittanbieter-Bibliotheken
, Middleware und Drittanbieter-Bibliotheken werden in Form eines SDK (Software Development Kit) oder Dateiformats konvertiert.
Fügen Sie hier eine Bildbeschreibung ein
Warum Schichtarchitektur?

Fügen Sie hier eine Bildbeschreibung ein
Um die Spiel-Engine zu entkoppeln und die Komplexität zu reduzieren, erledigt jede Schicht ihre eigenen Aufgaben unabhängig. Die untere Schicht stellt der oberen Schicht grundlegende Dienste bereit, und die obere Schicht ruft die zugrunde liegenden Tools auf. Eine solche Schichtarchitektur macht die obere Schicht flexibel und die untere Schicht stabil, was Funktionsaktualisierungen und -entwicklungen begünstigt.

Ressourcenschicht

PSD-Dateien in Photohop, MAX-Dateien in 3DSMAX usw. enthalten im Allgemeinen die eigenen Informationen des Tools, eine große Datenmenge, die nichts mit der Engine zu tun hat, und das Datenformat ist relativ komplex. Die direkte Verwendung verringert die Effizienz erheblich. Um die Effizienz der Ressourcenplanung zu verbessern, muss die Engine beim Import verschiedene Ressourcen in Asset-Dateien konvertieren. Wenn wir beispielsweise Texturdateien in der Engine verwenden, importieren wir möglicherweise Dateien im JPG- und PNG-Format. Die Komprimierungsalgorithmen dieser beiden Dateien sind jedoch für die GPU nicht effizient. Ihre direkte Verwendung in der GPU verschwendet Leistung, was sie auch tun normalerweise in dds konvertiert. Das Format wird dann im Videospeicher gespeichert.
Fügen Sie hier eine Bildbeschreibung ein
Für jede Spielfigur, beispielsweise den kleinen Roboter im Bild oben, müssen Sie möglicherweise entsprechende Materialien, Texturen, Gitter, Animationen und andere Ressourcen binden, eine zusammengesetzte Asset-Datei definieren, um diese Ressourcen zuzuordnen, beispielsweise XML-Dateien, und GUID verwenden (Globally Unique Identifier)-Symbol) zur Identifikationsverwaltung.
Fügen Sie hier eine Bildbeschreibung ein
Während der tatsächlichen Ausführung muss das Spiel außerdem den Asset Manager (Runtime Asset Manager) verwenden, der Assets gemäß dem Asset-Lebenszyklus (Asset Life Cycle), dem Laden und Entladen von Assets in Echtzeit, der Ressourcenzuweisung und der Speicherbereinigung verwaltet (GC). , verzögertes Laden usw. sind enthalten.

Funktionsschicht

Fügen Sie hier eine Bildbeschreibung ein
Durch die Verwendung der Funktionsschicht bewegt sich die virtuelle Welt im Spiel jedes Mal vorwärts, wenn ein Tick passiert. Innerhalb eines Ticks werden die Funktionen tickLogic() bzw. tickRender() ausgeführt. Die logische Funktion tickLogic() wird im Allgemeinen zuerst ausgeführt und wird hauptsächlich zur Simulation der Spielwelt verwendet, einschließlich Eingabe- und Ausgabeverarbeitung, Positionstransformation der Kameraperspektive, Kollisionserkennung, usw. Operation: Der tickRender(), der zum Zeichnen der Welt verwendet wird, wird basierend auf der von tickLogic() berechneten Position jedes Assets gerendert.
Fügen Sie hier eine Bildbeschreibung ein
Die Funktionsschicht ist insbesondere bei der Netzwerkprogrammierung sehr komplex und groß, sodass in der Regel Multithread-Computing erforderlich ist. Das derzeitige gängige Multithreading besteht darin, Aufgaben, die parallel berechnet werden können, aufzuteilen und zur Berechnung in mehrere Threads zu unterteilen. Wenn es jedoch Aufgaben gibt, die nicht für paralleles Rechnen geeignet sind, werden dessen Mängel aufgedeckt. Zukünftig wird die Engine jede Aufgabe in sehr kleine ausführbare Einheiten aufteilen und jede atomare Aufgabe mehreren Threads zur Ausführung zuweisen, wodurch die Ressourcen effizienter genutzt werden.
Fügen Sie hier eine Bildbeschreibung ein

Kernschicht

Die Kernschicht stellt eine Grundlage für die gesamte Logik in der oberen Schicht dar. Sie stellt mathematische Bibliotheken (z. B. Matrixoperationen), Datenstrukturen und Container (z. B. Binärbäume), Speicherverwaltung und andere Tools bereit. Da in der Engine alles auf Effizienz ausgerichtet ist, können Sie bei der Durchführung mathematischer Operationen Näherungsoperationen oder SIMD (Single Instruction Multiple Data Streams, synchrone Ausführung derselben Anweisung zur gleichen Zeit) verwenden, um die Recheneffizienz zu verbessern; wie bei Daten Strukturen und Container. Die mit Programmiersprachen gelieferten Datenstrukturen können einige Probleme verursachen. Beispielsweise erhöht sich der von Vector in C++ geöffnete Speicherplatz beim Hinzufügen von Objekten exponentiell. Nach dem Hinzufügen einer großen Anzahl von Objekten ist dies nicht mehr möglich um den Speicherplatz zu nutzen. Es ist bekannt, dass Speicherlücken auftreten können, und die Datenstruktur in der Engine ist für die Speicherverwaltung bequemer und verbessert die Zugriffseffizienz. Die Speicherverwaltung der Engine ist der des Betriebssystems sehr ähnlich. Die Das Kernprinzip lässt sich wie folgt zusammenfassen: Daten so weit wie möglich zusammen speichern und leicht darauf zugreifen. Zugriff nacheinander, Verarbeitung in Stapeln
Fügen Sie hier eine Bildbeschreibung ein

Plattformschicht

Die Plattformebene ermöglicht die Kompatibilität des Spiels mit verschiedenen Plattformen wie Xbox, Mac und Windows sowie mit verschiedenen Geräten wie Controllern, Tastaturen und Mäusen. Die Plattformschicht verwendet Render Hardware Interface (RHI), um die Unterschiede zwischen verschiedenen Grafik-APIs (wie DirectX11, DirectX12, OpenGL) zu beseitigen, sodass sich die obere Schicht nicht um die Probleme kümmern muss, die durch die Verwendung verschiedener APIs verursacht werden können.
Fügen Sie hier eine Bildbeschreibung ein

Werkzeugebene

Fügen Sie hier eine Bildbeschreibung ein
Die Tool-Schicht wird im Allgemeinen in Form eines Editors (Blueprint-Editor, Material-Editor usw.) dargestellt und kann mit verschiedenen Programmiersprachen (C++, C#, Html5 usw.) entwickelt werden. Entwicklungseffizienz steht im Vordergrund. Es braucht um verschiedenen Benutzern die Erstellung von Spielinhalten zu ermöglichen. . Da viele digitale Spiele-Assets in verschiedenen DCCs (Blender, MAYA usw.) erstellt werden, enthält die Tool-Ebene im Allgemeinen Import- und Export-Tools zum Importieren und Exportieren von Spielressourcen.

Ich denke du magst

Origin blog.csdn.net/gghhb12/article/details/136437631
Empfohlen
Rangfolge