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 :

Sort par material vs par depth


Sujet :

OpenGL

  1. #1
    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 Sort par material vs par depth
    Bonjour, bonjour, je suis venu ici pour une question assez pointue et probablement mille fois posée mais a laquelle je n'ai pas pu trouver de reponse correcte, tout les posts etants vieux et pas bien a jour avec les dernieres version d'ogl qui ont changé pas mal de choses.

    Dans une scene typique (disons cs_assault en cocultant le fait que les bsp ne sont pas z-testé) sinon on ne va pas s'en sortir), on rencontre rarement plus d'une dizaine d'objets de meme type ce qui limite fortement l'interet de batcher autrement qu'en separant les objet par type de z buffering et de blending (un changement complet du pipeline restant uber-lourd). Les cartes recentes (opengl 3+) beneficient de plus d'obtimisations consequentes pour limiter les testes de profondeur inutiles et donc les pertes de fillrate et de framerate dues a une scene dessinée dans un ordre arbitraire . Voici donc la question : est il encore utile de trier ses batchs par materiaux pour minimiser les state changes plutot que par Z pour avoir le hierachical-z (la question ne se pose pas pour les cas extremes genre zerg-swarm qui necessitent un traitement specifique) Si oui, peut on faire les deux efficacement en meme temps ?


    merci d'avance pour vos eclaircissements/conseils =D

  2. #2
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    toujours, toujours, toujours
    (vraiment toujours)
    essayer de limiter le nombre de batch !!!

    En fait, les développeurs de moteurs modernes passent un temps fou à essayer de réduire le nombre de batch d'affichage.

    regarde du coté des atlas de textures par exemple pour voir comment, en regroupant des textures, on peut réduire ce nombre de batch.

    L'optimisation du z order n'aura qu'une influence limitée sur les performances.
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  3. #3
    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
    Merci d'une reponce aussi rapide et claire !

    Ce que je fais pour le moment est mettre les batchs dans une multimap en utilisant comme clef un uint64 représentant la signature du material (en gros je compacte tout sur 64 bits en mettant les changements d’état les plus lourds dans les bits de poids les plus forts) puis j’itère sur ma map ce qui me donne les matériaux dans un ordre a peu pres coherent (le problème de batcher de façon parfaite étant np je me contente d'une approximation)

    je pense aussi atlasser les textures au chargement des matériaux (pourquoi pas un seul atlas pour tout façon virtual texture même (ou un atlas par mode de filtrage pour éviter les problèmes)).

    Est ce suffisant ou dois je prévoir un truc plus efficace pour grouper mes matériaux (les technique décrite revient a faire exactement :

    bool operator<(Batch b) {
    if(translutent != b.transluent) return !transluent;
    if(blendMode != b.blendMode) return (int)blendMode < (int)b.blendMode;
    ...
    }

    en plus rapide (1 seule comparaison à faire), ce qui reste vachement limité)

  4. #4
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    a priori, c'est ce qu'il faut faire. après, tout dépend de ce que tu souhaite afficher
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

Discussions similaires

  1. Trier VBOs par material
    Par Nanos dans le forum OpenGL
    Réponses: 7
    Dernier message: 13/12/2011, 16h41
  2. [REGEXP] Sous chaine commene par et fini par...
    Par lionel69 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 02/05/2006, 15h45
  3. Passage par valeur / passage par adresse
    Par jeje99 dans le forum C++
    Réponses: 13
    Dernier message: 16/02/2006, 10h29
  4. Classer une requete par rand et par ordre alphabetique
    Par yobogs dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 19/01/2006, 14h35
  5. Classer des messages par date ET par pertinence
    Par pocpoc2 dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 04/07/2005, 10h54

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