IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement 2D, 3D et Jeux Discussion :

CppCon 2014 – Le C++ dans les jeux triple A


Sujet :

Développement 2D, 3D et Jeux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 865
    Points : 219 073
    Points
    219 073
    Billets dans le blog
    121
    Par défaut CppCon 2014 – Le C++ dans les jeux triple A
    Nicolas Fleury, architecte logiciel à Ubisoft Montréal nous montre l'utilisation du C++ faites dans les jeux vidéos AAA.
    Dans cette vidéo, vous comprendrez mieux les contraintes en termes de programmation d'un programme de jeu vidéo. En effet, malgré la multitudes de fonctionnalités dont dispose le C++, certaines sont à éviter.

    Bonne vidéo.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  2. #2
    Membre expert

    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2006
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 1 031
    Points : 3 092
    Points
    3 092
    Par défaut
    Superbe article.

    Pour résoudre cela, les développeurs pourraient trier les objets par type, mais le problème ne serait que diminué et non supprimé. Le mieux est donc de se passer du mécanisme des fonctions virtuelles.
    Il peut être sympa d'expliquer comment s'en passer : avec des pointeurs de fonctions par exemple, attention c'est vraiment une optimisation à ne faire qu'en cas de nécessité : c'est extra chiant à débuguer après...
    Suivez le développement de Chibis Bomba
    twitter : https://twitter.com/MoD_DiB
    DevBlog : http://moddib.blogspot.fr/

  3. #3
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 217
    Points : 10 152
    Points
    10 152
    Par défaut
    Après ce genre article est plus a titre informative pour ma part , mais un peu inutile pour le programmeur amateur/indépendant vu que cela n'est pas pareil en terme de projet et de code , je ferais un amalgame entre faire sa propre maison et faire un building de plus de 100 mètres de haut y a certes des points commun , mais certaine technique serait particulière au building (et inutile pour une simple maison).

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Intéressant. Mais au final, s'ils n'utilisent ni fonctions virtuelles, ni exceptions, ni RTTI... peut-on encore dire que c'est du C++? Finalement c'est quasiment du C.

    Sinon j'ai trouvé intéressant de voir qu'ils utilisent assez massivement C#, mais j'aurais aimé avoir un peu plus de détails sur les cas d'utilisation.

  5. #5
    Membre chevronné

    Homme Profil pro
    Appui fonctionnel senior
    Inscrit en
    Juin 2007
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Appui fonctionnel senior
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 461
    Points : 2 211
    Points
    2 211
    Par défaut
    Vidéo très intéressante !

    Citation Envoyé par tomlev Voir le message
    Sinon j'ai trouvé intéressant de voir qu'ils utilisent assez massivement C#, mais j'aurais aimé avoir un peu plus de détails sur les cas d'utilisation.
    D'après ce qu'il dit, ils s'en servent essentiellement pour toutes les aspects où les performances ne sont pas la problématique principale. Par exemple, les éditeurs, le code réseau, les "launcher"/"updater", etc.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Article intéressant mais inutile pour un développeur indie comme moi.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 633
    Points : 10 563
    Points
    10 563
    Par défaut
    Donc en gros tout est fait à la main : compilation, linkage, débogage, gestion mémoire, ce qui implique très très peu de STL et rien d'autre.

    Et même la gestion mémoire j'ai cru comprendre que les développeurs ont un énorme tableau global (qui peut être mis en cache ou en mémoire) qu'ils utilisent comme tas


    Citation Envoyé par MoDDiB Voir le message
    Il peut être sympa d'expliquer comment s'en passer :
    Mon anglais est très moyen mais j'ai cru comprendre 2 choses:

    1) Lors de la compilation/ linkage, le processus remplit des tableaux dans les classes avec les pointeurs des méthodes (+ des informations comme où se trouve cette méthode (fichier, ligne)).

    D'ailleurs, il me semble que c'est plus ou moins illégal en C++ de prendre en direct l'adresse d'une méthode.

    2) Un peu ce qu'il dit souvent; par du global. Là c'est flou . Mais on peut penser qu'il y a une tripotée de fonctions/ procédures globales, et qu'ensuite elles sont appelées dans des méthodes inline.
    Ou alors, comme son exemple template, ils font une "grosse" classe mère (peut-être singleton) qu'il utilise via des petites classes filles avec des méthodes inline.

    D'ailleurs, il ne parle jamais de namespace. Vu comme c'est chiant c'est peut-être pour cela

  8. #8
    Invité
    Invité(e)
    Par défaut
    Ouf, ça craint, ils parlent de singleton et puis de contexte multi-thread, juste déjà cela ça m'a fait fuir.
    Ce sont pour des raisons de performances qu'ils utilisent des techniques aussi dangereuses ?
    Car le singleton n'est pas thread safe.
    Et une classe mère singleton instanciée avec des classes fille template, cela me semble vraiment salle comme implémentation.

    Pour l'uploader et la plateforme de téléchargement ainsi que l'éditeur je trouve ça bien d'utiliser du c# par contre.
    Reste à savoir si ce langage est assez bien sécurisé, si oui, je pense que je vais utiliser ça aussi.

    Le nombre d'employé et de développeur me semble énorme et le nombre de ligne de code également, sincèrement en tant qu'indé moi je me casse pas le cul je fais la même chose mais avec beaucoup moins de lignes de codes, et le tout, tout seul. (Ou au mieux à deux mais c'est rare)

    Mais bon en même temps je ne m'amuse pas à faire toutes les optimisations qu'ils font!

    Je n'ai pas compter le nombre de ligne de code de mon moteur mais si il fait 10 000 lignes de code, c'est déjà bien.

    De plus ils utilisent deux moteurs différents pour leur deux jeux ?

    PS : les exceptions je trouve ça bête de ne pas les utiliser, surtout depuis qu'il y a les pointeurs intelligent, surtout que elles ne se lancent pas pendant la boucle de jeux en général mais plutôt lors du chargement de ressources ou de la sérialisation, je ne vois pas du tout en quoi ça pourrai gêné les performances.

    Pour le système de RTTI autant utiliser typeid plutôt que de le réinventé. :/
    Je ne vois pas en quoi ne pas l'utilisé augmenterai la sécurité.

    Bref encore des arguments et un débats qui me semble, être du grand n'importe quoi.

    Ce n'est pas du c++14, ça ressemble plutôt à du c en effet.

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 633
    Points : 10 563
    Points
    10 563
    Par défaut
    Citation Envoyé par Lolilolight Voir le message
    Car le singleton n'est pas thread safe.
    Il peut être encapsulé pour être "thread-safe"


    Citation Envoyé par Lolilolight Voir le message
    Et une classe mère singleton instanciée avec des classes fille template, cela me semble vraiment salle comme implémentation.
    Oui mais il n'y a pas de pointeurs, ni de new/ delete


    Citation Envoyé par Lolilolight Voir le message
    Je n'ai pas compter le nombre de ligne de code de mon moteur mais si il fait 10 000 lignes de code, c'est déjà bien.
    Il y a de grandes chances que leur moteur soit à base de pools threadés de tâches et patron de conception Observer avec une tripoté de managers (mémoire, réseau, hardware, ...)


    Citation Envoyé par Lolilolight Voir le message
    PS : les exceptions je trouve ça bête de ne pas les utiliser, surtout depuis qu'il y a les pointeurs intelligent,
    Pointeurs intelligents dit pointeurs


    Citation Envoyé par Lolilolight Voir le message
    Pour le système de RTTI autant utiliser typeid plutôt que de le réinventé. :/
    Je ne vois pas en quoi ne pas l'utilisé augmenterai la sécurité.
    Peut-être qu'avec la RTTI il faut faire des reinterpret_cast.

    C'est plus "simple" de faire ton propre système et qu'il soit utile pendant l'exécution mais aussi pendant le débogage et à l'optimisation mémoire.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Il peut être encapsulé pour être "thread-safe"
    Oui je me disais ça et je faisais ça avant pour mon système de gestion des ressources, cependant, je suis passé à un système de contexte. (D'ailleurs on m'a conseillé de le faire par propreté du code et par respect pour la programmation orientée objet.)

    Je trouve ça beaucoup plus propre de tout initialiser les entités au chargement et de tout détruire à la fin du programme, lorsque le contexte est détruit, plutôt que d'utiliser un singleton.

    Je ne crée rien et je ne détruit rien au cours du jeux, (à part des particules mais je ne le fais pas avec des new et des delete), je ne fais que de changer des pointeurs...

    Je tourne à du 30 FPS avec un vieux PC de plus de 5 ans et une veille carte graphique avec en plus une vieux driver qui ne supporte même pas l'opengl moderne.

    Oui mais pas il n'y a pas de pointeurs, ni de new/ delete.
    Oui enfin, je ne vois pas en quoi ça augmente les performances surtout si les news et les delete ne sont pas fait dans la boucle de jeux.

    Il y a de grandes chances que leur moteur soit à base de pools threadés de tâches et patron de conception Observer avec une tripotés de managers (mémoire, réseau, hardware, ...)
    Pas besoin de threads pour faire cela, des sockets non bloquants, et des timers suffisent.

    Pointeurs intelligents dit pointeurs
    Je ne vois pas en quoi ça pose problème d'utiliser des pointeurs surtout si on ne les allouent pas et si on ne les détruits pas dans la boucle de jeux. (ce qui bien sûr baissent les performances)

    Peut-être qu'avec la RTTI il faut faire des reinterpret_cast.

    C'est plus "simple" de faire ton propre système et qu'il soit utile pendant l'exécution mais aussi pendant le débogage et à l'optimisation mémoire.
    Non, sans RTTI tu vas devoir définir une std::string personnalisée pour chaque type que tu vas enregistrer dans ta factory, je ne fais aucun reinterpret cast et devoir te souvenir du nom lors de l'appel de la fonction non virtuelle template puisque apparemment ils n'utilisent pas non plus de fonctions virtuelles.
    Un système de réflexibilité est plus lent qu'une fonction virtuelle,

    Au niveau du débogage je m'en sors très bien comme ça.

    Bref ce qu'ils font là ce n'est rien d'autre que du c with c++.

Discussions similaires

  1. CppCon 2014 – La programmation multicœur dans les jeux C++
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 9
    Dernier message: 05/01/2015, 16h19
  2. CppCon 2014 – Le C++ dans les jeux triple A
    Par LittleWhite dans le forum C++
    Réponses: 14
    Dernier message: 30/12/2014, 02h04
  3. Du réseau dans les jeux
    Par Mathieu.J dans le forum Développement
    Réponses: 3
    Dernier message: 07/05/2004, 16h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo