C++ ou C# pour les jeux vidéos ?

Publié le par Jérémy JANISZEWSKI

Je suis tombé, il y'a peu, sur un article où l'on débattait de savoir s'il était possible de développer des jeux vidéos en C# et si oui, s'il valait mieux utiliser le C# ou le C++.

C'était une question intéressante, mais hélas très peu objective. En effet, la plupart des sociétés actuelles (Ubisoft, Electronics Arts, Activision, Epic Games, DICE etc ...) utilisent depuis leurs début toujours le même moteur de jeu. Ce n'est pas parce que le nom du moteur change ou que le numéro de version change que le moteur a été repris de 0. Ce qui arrive souvent, c'est qu'il y'a une restructuration du moteur pour tenir compte de l'avancée materielle (carte graphique, processeur). Cette restructuration pourrait être considéré comme étant des rustines qui existent pour palier au manque du moteur et ainsi être à jour au niveau technologique. 

Etant donné que ces entreprises ont dépensées des fortunes sur leurs moteurs, on ne peut pas leur demandé de réécrire tout ça en C#. Une idée serait de garder intégralement leur code source en C++ et de le convertir en C++.NET, pour ensuite l'utiliser en C#.

Si aujourd'hui je venais à créer ma société, pour diminuer les coûts de développement, je choisirais par défaut C#, car c'est le langage avec lequel je me sens le plus à l'aise et celui avec lequel le temps de développement d'un logiciel est le plus rapide (pas le plus rapide au niveau performance, encore que ...)

Cela faisant, j'aurais à disposition divers frameworks pour mes jeux :

  • SlimDX
  • SharpDX
  • XNA

SlimDX est un framework qui permet l'utilisation de DirectX pour C#.

AVANTAGES

  • Permet l'utilisation de DirectX9, 10 et 11.
  • Seulement 2x plus lent que le C++.

INCONVENIENTS

  • Ne fonctionne que sous WINDOWS
  • Pas assez abstraite
  • Complexe d'utilisation car pas assez abstraite

SharpDX équivaut à SlimDX à ceci près qu'il n'y a quasiment pas d'interop avec le C++. Tout a été réécrit en partant de 0.

AVANTAGES

  • Permet l'utilisation de DirectX9, 10 et 11.
  • Seulement 1.5x plus lent que le C++.
  • Peu d'interop avec les classes DirectX existantes en C++, ce qui permet des performances plus élevés.

INCONVENIENTS

  • Ne fonctionne que sous WINDOWS
  • Pas assez abstraite
  • Complexe d'utilisation car pas assez abstraite
  • Dû à cette mauvais abstraction, il faut connaitre comment créer un jeu vidéo en C++.

XNA est un framework développé par Microsoft. C'est à la fois le framework le plus intéressant à utiliser mais aussi le plus mauvais dû aux choix de conceptions.

AVANTAGES

  • Permet de créer des jeux sous PC WINDOWS, XBOX360 et WINDOWS PHONE
  • Simple d'utilisation
  • Très abstrait (considérons que la plupart du temps, on ne remplit qu'une méthode Update et Draw et boom ça fonctionne)
  • Documentation fournie

INCONVENIENTS

  • Beaucoup trop d'interop avec l'existant C++. Résultat : framework beaucoup plus lent que les deux autres du dessus.
  • Dû au fait que nous pouvons nous en servir sous XBOX360 et WINDOWS PHONE, ne fonctionne que sous DirectX9 et DirectX10 (dans une certaine mesure)

Un benchmark a été fait ici. Le benchmark avec XNA ne doit pas être pris en compte car réalisé avec DX9 alors que les autres ont été réalisés avec DX11.

Il faut savoir que DX11 a été revu en très grande partie, ce qu'il fait qu'il y'a énormément de différences d'implémentation entre DX9 et DX11. Et ces différences concernent essentiellement les performances entre les deux frameworks.

Ce qu'il faudrait, c'est essayé de développer une abstraction pour SharpDX de telle manière à ce que cela ressemble à XNA, ainsi, SharpDX ne serait plus aussi complexe à utiliser et nous pourrions créer des jeux aussi facilement qu'avec XNA.

A moins que les équipes de Microsoft en charge de XNA (qui connaissent SharpDX) ne décident pour la version 5 ou 6 de XNA, de modifier les interop pour gagner en performance)

Il convient donc de noter que les jeux vidéos qualifiés de AAA peuvent être aisément écrit en C# grâce à SlimDX ou SharpDX, les autres types de jeux pouvant être codés en C# grâce à XNA.

En effet, aujourd'hui les jeux vidéos utilisent de plus en plus la carte graphique pour le traitement graphique et laissant au processeur le soin de manipuler le reste. Il n'y a donc pas de soucis à avoir à ce niveau là en utilisant le C#.

Clive Bleszinski avait d'ailleurs écrit un article sur le fait que dans une période de 5 à 10 ans, les jeux vidéos seraient de tels gouffres financiers qu'il faudrait trouver une échappatoire. Pour cela il avait créer un tableau montrant les plus et les moins des langages dits managés (.NET / Java).

Et grâce à divers démonstrations, il en avait conclu que le C# était le langage le plus à même de remplacer le C++ pour la création de jeux vidéos.

A l'heure actuelle, certaines grosses productions ont dûs utiliser le C# en guise de langage de développement (avec plus ou moins de succès) car leurs éditeurs voulaient que le jeu soit fini fissa car ces mêmes éditeurs ne voulaient plus en entendre parler :

  • STAR WARS : Le Pouvoir de la Force
  • Spiderman : Le règne des ombres
  • Zipper Interactive
  • LizardTech

Publié dans Général

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article
P
Cet article est très réussi. Comme moi aussi, j’ai choisi le C# pour les jeux vidéos. Mais sans l’aide des vidéos sur http://www.alphorm.com/tutoriel/formation-en-ligne-programmer-en-csharp-avec-visual-studio-2015, je n’aurai pas pu maîtriser ce genre de langage. Merci pour ce partage.
Répondre