Imaginons un grand maillage de grille, comme celui que nous pourrions utiliser pour le terrain. Nous en rendrons des n
triangles, couvrant par exemple la moitié de notre écran 1080p, en un seul appel.
Si nous soudons tous nos sommets et n'avons pas de coutures de lissage / texturation, alors chaque triangle a 3 sommets et chaque sommet est partagé par 6 triangles, nous avons donc des n/2
sommets.
Pour rendre cela, nous devons:
Exécutez le vertex shader au moins une n/2
fois
("au moins" parce que notre cache pour les résultats des sommets est seulement si grand. Parfois, nous finirons par expulser un sommet que nous avons déjà transformé, puis nous en aurons besoin à nouveau pour un triangle ultérieur qui le partage et donc réexécuter le vertex shader sur celui-ci Nous n'obtenons donc pas autant d'économies que sur le papier)
n
Triangles à clipser et à éliminer .
Pixellisez et interpolez sur au moins 1 920 x 1 080/2 ou environ 1 million de pixels du tampon d'image (car nous avons dit que notre terrain couvre environ la moitié de l'écran).
("au moins" en raison de la façon dont les GPU fonctionnent sur des quadrilatères de pixels , certains fragments juste à l'extérieur des bords des polygones sont encore tramés mais masqués, ce qui signifie que nous traitons les fragments deux fois. Pour un maillage cahoteux, nous aurons également un surplomb n'importe où le maillage s'obstrue, si nous n'avons pas la chance de dessiner le polygone le plus en avant dans le tampon de profondeur en premier)
Exécutez le shader de fragments pour tous ces fragments> = 1 million.
Mélangez ~ 1 million de résultats dans les tampons de cadre et de profondeur.
Bon, maintenant, déroulons tous nos sommets alors maintenant nous avons des 3n
sommets à rendre, six fois plus qu'auparavant! Nos étapes sont ...
Exécutez les temps de vertex shader 3n
.
(Pas d'astérisques en raison de la mise en cache car chaque sommet n'est utilisé qu'une seule fois, bien que cela signifie que le cache ne peut pas nous sauver à tout moment)
n
Triangles à clipser et à éliminer .
Pixellisez et interpolez sur au moins 1 920 x 1 080/2 ou environ 1 million de pixels du tampon d'image.
Exécutez le shader de fragments pour tous ces fragments> = 1 million.
Mélangez ~ 1 million de résultats dans les tampons de cadre et de profondeur.
... attendez, chaque étape sauf la première est la même! Ainsi, la plupart du travail effectué par le GPU dans un appel de dessin typique n'est pas directement lié au nombre de sommets utilisés. Le montant de la couverture d'écran, le dépassement et le nombre total de triangles représentent beaucoup plus le coût.
Cela ne signifie pas que les sommets sont totalement libres. Si vous partagez des sommets lorsque vous le pouvez, vous pouvez réaliser de modestes économies grâce à la mise en cache, surtout si vos vertex shaders sont compliqués ou que le pipeline de vertex de votre matériel est faible (comme c'était le cas sur certaines consoles plus anciennes). Mais étant donné que le nombre de sommets suit proportionnellement au nombre de triangles plus ou moins un facteur constant, ce n'est généralement pas aussi intéressant une mesure du coût global du maillage.