J'essaie d'implémenter un graphique de scène et dans tous les articles que j'ai rencontrés, il est question de tri d'objets. Vous trieriez donc vos objets par "matière" par exemple. Jusqu'à ce que je m'assoie et que je commence à le mettre en œuvre, je tenais cela pour acquis, car cela avait du sens. Mais maintenant je me demande ce que le tri change réellement?
Dans mon moteur, j'ai un gestionnaire pour les UBO, j'utilise ceux-ci pour stocker les données qui seront partagées entre les programmes, pour le moment qui ne concernent que le temps, la caméra et les matrices de projection et les lumières (je ne me soucie pas de gérer les lumières qui affectent quels objets ATM).
Maintenant, pour chaque modèle, je dois changer le modèle en uniforme de matrice mondiale, aucun tri ne va changer cela. Le changement de cette matrice est-il donc si difficile de définir un matériau pour chaque objet?
Je me souviens vaguement avoir lu quelque part que chaque fois que vous modifiez quelque chose dans le pipeline, il doit être vidé et cela peut entraîner des problèmes de performances. Mais pour chaque appel de dessin, je mets en place un modèle de matrice mondiale, alors quel sens cela fait-il de se préoccuper de cela?
BTW contient des informations sur le fait de savoir si changer un uniforme et appeler glBufferSubData est plus (ou moins) cher.
Réponses:
Vous voulez vraiment trier pour regrouper les matériaux. Si vous le pouvez, vous pouvez également utiliser l'instanciation pour regrouper la géométrie (par exemple, si vous avez un nombre X des mêmes objets).
Le tri par profondeur est également toujours utile. Vous devez trier vers l'arrière pour les objets transparents (en ignorant plusieurs techniques avancées qui suppriment ce besoin, dans des circonstances limitées).
Il est également utile de trier les objets opaques d'avant en arrière, car cela permet au début de Z de réduire considérablement les frais généraux du shader de fragments de votre scène.
la source
Le tri des objets uniquement par profondeur a une valeur énorme, en particulier pour les architectures de rendu binning ou en mosaïque.
Triez les solides d'avant en arrière, les transparents d'arrière en avant.
Lors du rendu, les éléments les plus proches de la caméra et du solide sont rendus en premier, et tout autre élément occupant le même espace sera rejeté par une première vérification du tampon z.
Si l'architecture graphique a une sorte de tampon z hiérarchique ou basse résolution, la géométrie peut être éliminée avant même que quoi que ce soit soit rendu.
la source