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

OpenGL Discussion :

Animer plusieurs "entités"


Sujet :

OpenGL

  1. #1
    Membre à l'essai
    Homme Profil pro
    graphique/réseau
    Inscrit en
    Janvier 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : graphique/réseau

    Informations forums :
    Inscription : Janvier 2009
    Messages : 17
    Points : 17
    Points
    17
    Par défaut Animer plusieurs "entités"
    Bonjour,

    je viens d'implémenter un loader de format IQM et j'en suis plutôt content puisque ça fonctionne super bien pour l'affichage(rendu normal + animation) d'un seul modèle.

    Le soucis c'est qu'en essayant d'afficher 3 "entités"(chacune avec une animation différente ) avec un seul modèle(donc 1 seul VBO), je perds à peu près 1300 fps (pour une base de 1700 j'arrive à 3xx)

    En effet le la fonction animate est appelée 3 fois à chaque tour de boucle, je ne sais pas trop comment faire autrement...en mettant un timer je descends à 1600 fps seulement mais l'animation est identique pour les 3 entités...

    Quelqu'un a-t-il une idée ?

    merci beaucoup

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 274
    Points : 176
    Points
    176
    Par défaut
    300 fps cela reste beaucoup.
    Je m'étais déjà posé la question dans ce genre de cas et effectivement les fps diminuent très vite.
    Mais pas de panique essaie d'afficher plein d'objets animés (plus que 3) pour voir si effectivement il y a un problème mais c'est fort probable qu'il n'y en ait aucun

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 987
    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 987
    Points : 222 165
    Points
    222 165
    Billets dans le blog
    132
    Par défaut
    Bonjour,

    J'ai l'impression que le ralentissement vient du code C++ (et non de l'affichage en lui même, donc non d'un bottleneck du GPU).
    Est ce que le code de la fonction d'animation est optimal ? Peut être vous devriez le profiler.

  4. #4
    Membre à l'essai
    Homme Profil pro
    graphique/réseau
    Inscrit en
    Janvier 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : graphique/réseau

    Informations forums :
    Inscription : Janvier 2009
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Merci pour vos réponses.

    Alors Lintel-oo, j'ai essayé d'en afficher encore plus et je descends à 40 fps

    LittleWhite, je pense que la fonction est optimale puisque c'est quand même le créateur du format qui la propose(le gars est plutôt bon dans le domaine donc je lui fait confiance).

    Le truc c'est que c'est pas du c++ mais du D, mais je ne pense pas que ça vienne de là(je vais quand même vérifier )

    Le fait d'apeller une fonction qui fait plein de calculs X fois par boucle ça me parait logique qu'au bout d'un moment ça puisse poser problème non ?

    Sur un autre forum on m'a proposé de faire le "skinning" côté GPU, je pense donc que je vais aller voir de ce côté là.

    Merci

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 987
    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 987
    Points : 222 165
    Points
    222 165
    Billets dans le blog
    132
    Par défaut
    Bah, un coup de profiling confirmera les doutes, alors ...

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Salut, j'ai recemment eu le meme probleme que toi, (mega bottle neck Cpu au niveau des anims) Je l'ai resolu de la maniere suivante:

    Deja en comptant les perf en ms/frame plutot qu'en frame/s : ca simplifit les calculs et on s'appercoit vite qu'un drop de 1300 a 300 ce n'est que 2 ms de plus, et que les problemes n'arriveront pas avant une dizaine d'entités de plus

    Ensuite, tu peux threader si ce n'est pas deja fais, en ajoutant tout tes mesh a un pool et en faisant tourner un certain nombre de threads qui piochent dedans et font les calcul tu peux facilement doubler le nombre de vertices animés et liberer ton thread de rendu pour faire autre chose avec pendant que les threads se bouffes les calculs (OpenGL ne supportant pas le rendu depuis plusieurs threads, il vaut mieux degager le plus possible le thread de rendu pour pouvoir avoir un maximum de temps consacré a OpenGL)

    Si tout ca ne suffit pas, l'ultime solution est de tout faire sur le gpu (dans les vertex shaders ou via OpenCL), il est prevu pour ca a la base !

    Si tu fais du morphing, tu passe les positions des frames precedente et suivante en attribs pour les interpoler dans le vertex shader.
    Si c'est du skinning, tu passes un array contenant toutes tes matrices au shader et tu passe un vecteur contenant les poids d'interpolation ainsi qu'un vecteur contenant les index des matrices a utiliser en attribs !

    Si tu deplaces tes calcul vers le GPU, tu pourra animer une quantité astronomique de vertices sans probleme (100k passe impec chez moi)

    En esperant aider, gan_

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par _gan_ Voir le message
    Si tout ca ne suffit pas, l'ultime solution est de tout faire sur le gpu (dans les vertex shaders ou via OpenCL), il est prevu pour ca a la base !
    Si je me souvient bien, avec des drivers supportant openGL 4.3, y'a même plus besoin d'OpenCL grâce aux compute shader, même si ça me semble un poil disproportionné dans ce cas

    Sinon, les threads, c'est super, mais bien garder en tête que c'est toujours dangereux si on a pas prévu une organisation inter-thread hyper clean. Le mieux étant d'avoir une organisaiton minimale permettant de rapidement isoler les problèmes éventuels (parce que débuger un problème de thread, c'est à s'en arracher les cheveux).

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par MaximeL Voir le message
    Si je me souvient bien, avec des drivers supportant openGL 4.3, y'a même plus besoin d'OpenCL grâce aux compute shader, même si ça me semble un poil disproportionné dans ce cas
    L'openCL c'est aussi de l'overkill pur et simple, mais au moins tu as l'avantage de pouvoir faire tourné tes kernels sur ton CPU si t'as pas une carte adaptée =D

Discussions similaires

  1. [XML]/[DocBook] Les entités " < etc.
    Par ykerb2 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 08/05/2007, 21h25
  2. [xml] [libxml2] [PHP5] entités quot apo reconverties
    Par vexa dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 15/12/2006, 19h20

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