Wie werden Spiele für verschiedene Plattformen erstellt?

9

Wie werden Spiele für verschiedene Plattformen erstellt?

Call of Duty: Modern Warfare 3 ist beispielsweise für PS3, Xbox 360, Wii und PC verfügbar.

Sind sie ohne gemeinsamen Code komplett neu programmiert? Gibt es einen Zwischencode?

Adriano Silva
quelle
3
Normalerweise wird alles in C ++ erledigt und plattformspezifische Dinge werden in einige Klassen verbannt.
Asche999

Antworten:

11

Die meisten Game-Engines auf Produktionsebene verfügen über eine sogenannte Hardware-Abstraktionsschicht. Dies ist eine generische API, mit der die Spiel-Engine mit Hardware kommunizieren kann, ohne wissen zu müssen, um welche Hardware es sich handelt. Sie rufen einfach SoundManager.PlaySFX (SFX_ID) oder ähnliches auf. Darunter im Soundmanager wird es jedoch wissen, auf welcher Hardware es tatsächlich arbeitet, und die entsprechenden Anrufe tätigen, um den Soundeffekt abzuspielen.

Auf diese Weise kann die Engine unter Verwendung dieser Abstraktionsebene entwickelt werden, sodass sie auf jedem System ausgeführt werden kann, sofern für diese Hardware eine API bereitgestellt wird, die der Abstraktion entspricht. BEARBEITEN: Wie von Johnathan festgestellt, ist eine API für jede Plattform erforderlich, auf der Sie ausgeführt werden möchten. Und zu Trevors Punkt: Wenn Sie von einem System mit hohem Speicher zu einem Speicher mit niedrigem Speicher wechseln (das Schlimmste für mich war PS3 zu PSP), müssen Sie möglicherweise die verschiedenen Hardwareeinschränkungen in Angriff nehmen. Zum Glück musste ich aufgrund einer Plattform nicht ein ganzes System neu schreiben, sondern Objekte durchgehen und optimieren, um weniger Platz zu beanspruchen.

Die andere Seite der Dinge liegt im Kunstbereich, wo die Auflösungen von Texturen oder Modellen und dergleichen unterschiedlich sind. Die Assets des Spiels können auf ein bestimmtes Ziel ausgerichtet werden, sodass ein PC seine WAV-Dateien für seine Soundeffekte erhält, während sie in die spezifischen Formate umgewandelt werden, die von der PS3 und dergleichen unterstützt werden.

Hoffe das hilft.

James
quelle
1
Ich werde hinzufügen, dass in den meisten Fällen PC / PS3 / Xbox360 eine gemeinsame Codebasis verwenden, während Wii / PS2 / PSP eine andere Codebasis verwenden. Gameboy hat eine separate Codebasis, und iPhone / Android teilen normalerweise eine Codebasis. Dies ist hauptsächlich auf die breite Rechenleistung, den verfügbaren Speicher und die Grafikfähigkeiten der verschiedenen Plattformen zurückzuführen. Ich musste einmal ein Spiel von Xbox 360 auf PS2 portieren. Nur sehr wenig des ursprünglichen Codes überlebte den Prozess, nur weil davon ausgegangen wurde, dass sehr viel RAM zur Verfügung stand. Ich musste es umschreiben, um weniger Speicher zu verbrauchen.
Trevor Powell
+1, Sie haben nicht ausdrücklich erwähnt, dass die HAL zwischen den Plattformen unterschiedlich ist (der Grund, warum Psykocyber auch geantwortet hat) - fügen Sie vielleicht hinzu, dass Sie für jede Plattform eine HAL benötigen? Auch die Verwendung von ANSI C / ++ ist wahrscheinlich eine Voraussetzung, da Sie es übergreifend kompilieren müssen.
Jonathan Dickinson
Trevor: Gameboy? Verdammt, ich muss in die Vergangenheit gereist sein, besser zurück zu meiner Zeitmaschine ...
3

Die anderen Antworten beschreiben die Dinge im Idealfall. Der meiste Code ist für Spiele üblich, und für hardware- / plattformabhängige Teile wird eine saubere Abstraktionsschicht verwendet.

Viele Spiele haben jedoch Ports, die von einem ausgelagerten Unternehmen erstellt wurden, und der Code unterscheidet sich erheblich. Dies gilt insbesondere für die Konsolen, aber auch für Ports zu OSX oder Linux von Windows.

Auf Konsolen ist die Hardware so unterschiedlich, dass häufig ganze Teile des Core-Renderings (und selten auch andere Systeme) vollständig neu geschrieben werden müssen. Auf dem PC können Sie Abstracts über D3D und OpenGL erstellen, da sich die Betriebssystem-APIs unterscheiden, die gesamte PC-Hardware jedoch ungefähr gleich ist.

Auf dem Konsolenbereich können Sie möglicherweise feststellen, dass Ihre supereffiziente, wunderschöne Rendering-Engine nicht direkt auf eine andere Konsole portiert werden kann, da die GPU-Funktionen so unterschiedlich sind und Sie buchstäblich jeden letzten Prozentsatz der Leistung herausholen müssen, um 7 Jahre zu erhalten alte Hardware für Ihr modernes Spiel. Sie können leicht Fälle finden, in denen die Beleuchtungspässe, die auf der XBox am besten funktionieren, auf der PS3 fürchterlich langsam sind und bei denen die PS3-Hunde auf der XBox am besten funktionieren. Die anderen Hardware- und Plattformunterschiede (z. B. die SPUs auf der PS3 gegenüber der Tri-Core-CPU der XBox) machen es sehr schwierig, sich auf eine einfache dünne Hardware-Abstraktionsschicht als einzigen plattformabhängigen Codepfad zu verlassen.

Da jede Plattform auch ein umfangreiches Fachwissen erfordert, um sie ordnungsgemäß zu nutzen, erfordern viele Spiele eine spezialisierte ausgelagerte Portierungsfirma, um das Spiel auf zusätzliche Plattformen zu bringen. Im PC-Bereich finden Sie manchmal Solo-Entwickler, die die Ports ausführen (wie Ryan "icculus" Gordon, der viele Linux-Game-Ports ausführt; normalerweise einfache Arbeit, indem Sie D3D in GL und Win32 in POSIX / SDL ändern), während Sie sich im Konsolenbereich befinden Es gibt Unternehmen mit allen Teams, die ziemlich umfangreiche Portierungsarbeiten für größere Spiele durchführen.

Ports zu einigen Plattformen erfordern fast vollständige Umschreibungen oder Asset-Redesigns. Die Wii-Ports von Call of Duty wurden beispielsweise von einem ausgelagerten Unternehmen ausgeführt, und alles - einschließlich der Kunstgegenstände - musste überarbeitet werden, um den Einschränkungen der sehr begrenzten Hardware der Wii gerecht zu werden. Die Wii hat zum Beispiel nicht einmal Shader, so dass es absolut unmöglich war, dieselbe Engine und dieselben Effekte / Materialien einfach wiederzuverwenden, und der begrenzte Speicher und die CPU / GPU erforderten kleinere Texturen und weniger Detailmodelle sowie Spielbeschränkungen und so weiter. Ports zu mobilen Plattformen werden in der Regel ebenfalls vollständig neu geschrieben, normalerweise von Dritten.

Neuere Engines erleichtern das Portieren zwischen Plattformen, aber größere Spiele müssen in der Regel noch beträchtliche Teile ihres Codes aktualisieren und viele Assets wiederholen, um von leistungsfähigeren PC-Plattformen und -Konsolen zu eingeschränkteren Plattformen zu wechseln.

Sean Middleditch
quelle
2

James Antwort bezieht sich nur auf den PC und nicht auf die Implementierung auf den spezifischen Plattformen.
Während alle Engines die Plattform für den größten Teil des Spielcodes abstrahieren, müssen einige Teile pro Plattform geschrieben werden. Dies umfasst alle E / A einschließlich Netzwerk, Rendering, Audio, Geräteeingabe und meiner Meinung nach Videoausgabe.
Vergleichen Sie den Rendering-Code für beispielsweise Unreal auf der Xbox und PS3. Die Xbox verwendet die Xbox DirectX-Version, während die PS3 libgcm verwendet (die OpenGl-Bibliothek ist zu langsam). Um es ein wenig zu vereinfachen, sehen die Gameplay-Programmierer auf allen Plattformen nur ein "AudioSystem.PlaySound ( SoundName hier )", während für jede Plattform, die sie intern funktionieren, die Plattform-API für die Tonausgabe
aufgerufen wird . Weitere Informationen finden Sie in Tatrads Kommentar.

Peter Ølsted
quelle
1
Dies ist genau das, was James gesagt hat. Er hat es nur versäumt zu erwähnen, dass die HAL für jede Plattform unterschiedlich ist.
Jonathan Dickinson
Ich habe tatsächlich erwähnt, dass es auf jedem System ausgeführt werden kann, für das eine HAL-API bereitgestellt wird, aber ich habe es klarer gemacht, da dies eindeutig Verwirrung stiftete. Außerdem portieren Sie den Code auf dem PC nicht auf einen anderen PC, es sei denn, Sie verwenden ein Betriebssystem wie ein Mac- oder Unix-System. In Windows-Umgebungen, in denen die meisten Spiele ausgeführt werden, sind es die Hardwaretreiber, die dies bereits für Sie erledigen. Sie erstellen über die Treiberaufrufe einen DirectX- oder OpenGL-Datenpuffer, und die Hardware weiß, was von dort aus zu tun ist.
James