Comment les jeux sont-ils créés pour différentes plateformes?
Par exemple, Call of Duty: Modern Warfare 3 est disponible sur PS3, Xbox 360, Wii et PC.
Sont-ils complètement reprogrammés sans code commun? Existe-t-il un code intermédiaire?
xbox360
cross-platform
playstation3
wii
Adriano Silva
la source
la source
Réponses:
La plupart des moteurs de jeu de niveau de production ont ce qu'on appelle une couche d'abstraction matérielle. Il s'agit d'une API générique que le moteur de jeu peut utiliser pour parler avec du matériel sans avoir à savoir de quel matériel il s'agit. Ils appellent simplement SoundManager.PlaySFX (SFX_ID) ou similaire. En dessous, dans le gestionnaire de sons, il saura cependant sur quel matériel il travaille et fera les appels appropriés pour que l'effet sonore soit joué.
Cela permet au moteur d'être développé en utilisant cette couche d'abstraction afin qu'il puisse fonctionner sur n'importe quel système à condition qu'une API soit fournie pour ce matériel qui correspond à l'abstraction. EDIT: Comme l'a noté Johnathan, une API pour chaque plate-forme sur laquelle vous souhaitez fonctionner est requise. Et au point de Trevor, lorsque vous passez d'un système à haute mémoire à une mémoire faible (le pire pour moi était la PS3 à la PSP), vous devrez peut-être faire face aux différentes limitations matérielles. Heureusement pour moi, je n'ai pas eu à réécrire un système entier à cause d'une plate-forme, mais j'ai dû parcourir et optimiser des objets pour prendre moins d'empreinte.
L'autre côté des choses est dans le domaine de l'art où les résolutions de textures ou de modèles et autres sont différentes. Les atouts du jeu peuvent être construits vers une cible spécifique afin qu'un PC obtienne ses fichiers wav pour ses effets sonores alors qu'ils sont transformés dans les formats spécifiques pris en charge par la PS3 et autres.
J'espère que cela t'aides.
la source
Les autres réponses expliquent les choses dans les cas idéaux. La plupart du code est commun aux jeux, et une couche d'abstraction propre est utilisée pour les parties dépendantes du matériel / de la plate-forme.
Cependant, de nombreux jeux ont des ports réalisés par une entreprise externalisée et le code diverge considérablement. Cela est particulièrement vrai avec les consoles, mais aussi commun aux ports OSX ou Linux à partir de Windows.
Sur les consoles, le matériel est suffisamment différent pour que souvent des morceaux entiers du rendu principal (et rarement aussi d'autres systèmes) doivent être complètement réécrits. Sur le PC, vous pouvez faire un résumé sur D3D et OpenGL, car les API du système d'exploitation diffèrent, mais tout le matériel du PC est à peu près le même.
Sur l'espace de la console, vous pourriez constater que votre moteur de rendu magnifique super efficace est carrément impossible à porter directement sur une autre console, car les capacités du GPU sont si différentes et vous avez littéralement besoin d'extraire chaque dernier pourcentage de performances pour obtenir 7 ans vieux matériel pour exécuter votre jeu moderne. Vous pouvez facilement trouver des cas où les passes d'éclairage qui fonctionnent le mieux sur la XBox sont horriblement lentes sur la PS3, et où la meilleure approche sur les chiens PS3 sur la XBox. Les autres différences de matériel et de plate-forme (par exemple, les SPU sur la PS3 par rapport au processeur à trois cœurs de la XBox) rendent très difficile de s'appuyer sur une simple couche d'abstraction matérielle mince comme seul chemin de code dépendant de la plate-forme.
Étant donné que chaque plate-forme nécessite également une grande expertise pour l'utiliser correctement, de nombreux jeux nécessitent une société de portage externalisée spécialisée pour apporter le jeu à des plates-formes supplémentaires. Dans l'espace PC, vous pouvez parfois trouver des développeurs solo qui font les ports (comme Ryan "icculus" Gordon qui fait de nombreux ports de jeu Linux; travail simple généralement, en changeant D3D en GL et Win32 en POSIX / SDL), tandis que dans l'espace console il y a des entreprises avec toutes les équipes pour faire un travail de portage assez massif vers des jeux plus grands.
Les ports de certaines plates-formes nécessitent des réécritures presque complètes ou une refonte des actifs. Les ports Wii de Call of Duty, par exemple, étaient effectués par une entreprise externalisée, et tout - y compris les actifs artistiques - devait être refait pour s'adapter aux contraintes du matériel très limité de la Wii. La Wii n'a même pas de shaders, par exemple, il était donc tout simplement impossible de réutiliser le même moteur et les mêmes effets / matériaux, et la mémoire et le processeur / GPU limités nécessitaient des textures plus petites et moins de modèles de détails, ainsi que des limitations de gameplay, etc. De même, les ports vers les plates-formes mobiles sont généralement entièrement réécrits, généralement par un tiers.
Les moteurs plus récents facilitent le portage entre les plates-formes, mais les grands jeux doivent généralement mettre à jour des portions importantes de leur code et refaire de nombreux actifs pour passer de plates-formes et consoles PC plus performantes à des plates-formes plus restreintes.
la source
James reponse ne concerne que le PC et non l'implémentation sur les plateformes spécifiques.
Alors que tous les moteurs résument la plate-forme pour la grande majorité du code du jeu, certaines parties doivent être écrites par plate-forme. Cela inclut toutes les E / S, y compris le réseau, le rendu, l'audio, l'entrée de l'appareil et je pense que la sortie vidéo.
Comparez le code de rendu de Say Unreal sur Xbox et PS3. La Xbox utilise la version Xbox DirectX, tandis que la PS3 utilise libgcm (la bibliothèque OpenGl est trop lente). Pour simplifier un peu, sur toutes les plates-formes, les programmeurs de gameplay ne voient qu'un "AudioSystem.PlaySound ( SoundName ici ), tandis que pour chaque plate-forme, ils fonctionnent en interne appellent l'API des plates-formes pour la sortie audio.
Voir aussi le commentaire de Tatrad pour plus de programmation.
la source