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 :

3.1 Rendu de plusieurs instances avec glDrawElementsInstanced


Sujet :

OpenGL

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 110
    Par défaut 3.1 Rendu de plusieurs instances avec glDrawElementsInstanced
    Bonjour,

    Je suis en train de développer quelques outils pour le rendu de scene en OpenGL(+ quelques petit jeux)
    Je me retrouve dans un cas ou je dois faire un rendu de plusieurs milliers d'objets (2 à 3 modèle différents). Pour l'instant j'appelle glDrawElements pour chaque objet et ça passe sans trop de problème, en restant raisonnable.

    Afin d'optimiser tout ça je souhaite faire appel à glDrawElementsInstanced disponible dans la version 3.1. , et mettre un jour le Buffer contenant les matrices de transformation de chaque instances.

    Le problème :
    Tous les exemples que j'ai pu voir utilise glVertexAttribDivisor pour passer les attributs matrices du model(ou model view projection selon le choix) sauf que celle ci n'est dispo qu'en version 3.3

    Je pourrais faire en sorte de récupérer l'id de l'instance dans le vertex shader, de stocker ces matrices de transformations dans une texture puis un lookup, mais cette solution me parait couteuse, la texture devant être mis à jour à chaque rendu.

    Quelqu'un aurait une piste ?

    Merci de votre attention.

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 036
    Billets dans le blog
    12
    Par défaut
    Sur ce lien: http://hacksoflife.blogspot.co.uk/20...ricksmith.html, la première réponse (http://hacksoflife.blogspot.co.uk/20...76086433811790) semble apporter un élément de réponse
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 110
    Par défaut
    Merci,
    Je vois en gros ce que le type propose. Mais ça n'est pas réalisable sur des instances dont la matrice de transformation est mise à jour à chaque itération.
    Ou alors cette mise à jour ce fait coté GPU dans un Shader fait pour.

    J'avais implémenté un truc similaire en Webgl en bidouillant avec un buffer contenant l'indice du vertex(Gl_InstanceID n'existant pas).
    Je pensais ne pas avoir recours à ça, car au final si ça reste bien plus rapide sur des milliers d'instances c'est un sacré bordel

    Pour le moment, J'ai opter pour un solution intermédiaire simplifiée, uniform d'array de matrice de transformation (pour le moment 10 par call draw)
    Je ne sais pas si ça vaut le coup dans mon cas d'essayer d'être compatible avec le maximum de version d'OpenGL. (ça fait déjà 3 implémentation différentes sur ce projet)

  4. #4
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 036
    Billets dans le blog
    12
    Par défaut
    Plus ça va, plus j'enlève mon code de compatibilité entre les versions d'OpenGL (je supportais quand même les Vertex Arrays, tu sais, le truc avant les VBO )
    Je me tourne désormais vers l'avenir
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 110
    Par défaut
    Vertex Arrays ? C'est un peu la base pour passer les infos d'un modèle 3D non ?

    J'essaye de garder une certaine compatibilité quand je vois qu'une machine récente à base d'Intel n'a pas de driver 3.3
    Mais tu as peut-être raison, peut être que je devrais simplifier mais je débute, du coup je test un peu tous ce qui est possible de faire...

  6. #6
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 036
    Billets dans le blog
    12
    Par défaut
    Je parle de Vertex Arrays, pas de Vertex Buffer Object (VBO), ni de Vertex Array Objects (VAO).
    C'étaient les tableaux qui étaient stockés en RAM et qu'on envoyait au GPU à chaque frame...
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

Discussions similaires

  1. Fonction avec plusieurs instances
    Par nabab dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 20/09/2007, 13h12
  2. Réponses: 2
    Dernier message: 11/12/2006, 14h15
  3. Réponses: 2
    Dernier message: 26/10/2006, 11h13
  4. plusieurs instance de classe avec thread
    Par lucky dans le forum MFC
    Réponses: 2
    Dernier message: 14/09/2006, 12h30
  5. [] plusieurs instances de form avec leur contexte ?
    Par Seb-31 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 11/04/2003, 14h56

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