Pourquoi les ventilateurs triangulaires ne sont-ils pas pris en charge dans Direct3D 10 ou version ultérieure?

16

Comme indiqué dans la documentation, les ventilateurs triangulaires ne sont pas pris en charge dans Direct3D 10 ou version ultérieure .

Pourquoi? Y a-t-il des inconvénients inhérents à travailler avec des ventilateurs triangulaires?

Micah Bolen
la source
5
Ma compréhension est que, parce que les fans de triangle entraînent souvent de longs triangles très maigres, ce qui entraîne des interopérations provoquant des artefacts. Je pense également que cela nécessite des appels de tirage séparés pour rendre tous les essais qui ne sont pas connectés à un ventilateur. Lorsque cela est possible avec une bande. Je ne pense pas qu'il y ait quelque chose que les fans puissent faire que les bandes ne puissent pas faire mieux.
ClassicThunder
3
Les fans peuvent être connectés à l'aide d'index, donc aucun appel séparé n'est nécessaire. La même chose s'applique également aux bandes (et vous pouvez même connecter des ventilateurs avec des bandes) qui est beaucoup plus flexible, ne nécessite pas de tris dégénéré et plus léger en termes de bande passante.
Maximus Minimus

Réponses:

15

Depuis plus d'une décennie, les fournisseurs de matériel ont poussé les bandes triangulaires, les listes de triangles indexés et les bandes triangulaires indexées comme les types primitifs les plus rapides à utiliser. Pourquoi? Les bandes ont une meilleure localité de cache (réutilisant les 2 derniers verts soumis au lieu d'avoir à revenir continuellement au premier) et l'indexation permet aux caches de vertex matériels de fonctionner réellement, ainsi que d'être plus efficace pour éliminer les verts en double.

Si tous les fournisseurs de matériel disent «faites-le de cette façon et vous allez être plus rapide», il y a de fortes chances que si vous le faites de cette façon, vous serez réellement plus rapide.

Donc, D3D10 + officialise simplement cela; si c'est le chemin rapide, c'est le chemin que vous allez utiliser et les autres chemins n'existeront pas. Cela est conforme à l'une des philosophies de conception du D3D10 +, qui est de vous mettre sur la voie rapide et de vous y maintenir.

Maximus Minimus
la source
4

Je ne sais pas dans quelle mesure cela affecte réellement le développement, mais comme pour tout changement de ce type, il a été dit qu'ils laisseraient les développeurs de pilotes écrire de meilleurs pilotes. La complexité des pilotes GPU est incroyable, mais je ne sais pas si ce changement exact aidera beaucoup.

Dans les deux cas, il est possible de remplacer les ventilateurs triangulaires pour la plupart de vos besoins (comme le rendu de polygones convexes) par des bandes, souvent avec de meilleurs résultats.

// A simplified API interface is presented for the purposes of having readable pseudocode
// Push( pos ) - pushes position data to make a new vertex
// TRIANGLE FANS:
for( i = 0; i < vertices.count; ++i )
    Push( vertices[ i ] );

// TRIANGLE STRIPS:
for( i = 0; i < vertices.count; ++i )
{
    if( i % 2 == 0 )
        vertex = i / 2;
    else
        vertex = vertices.count - 1 - i / 2;
    Push( vertices[ vertex ] );
}

EDIT: oublié de mentionner - si vous devez changer l'ordre de bobinage - inversez simplement le test dans ce "si" (== à! =).

snake5
la source
3

(Cette question particulière mérite une réponse d'opinion :)

Subjectivement, je dirais son architecture astronautique. OpenGLES a également lancé beaucoup de choses pour le rendre `` moins complexe '' tout en poussant simplement la complexité sur chaque développeur avec du code hérité à la place.

Bien sûr, même si le matériel ne le prend pas en charge nativement, il aurait été trivial de fournir une compatibilité avec les personnes séquencant les fans de triangle en les convertissant en bandes ou triangles.

Les exécutions WebGL et autres doivent garder une trace des tampons validés et autres tout le temps, et les pilotes peuvent facilement gérer les personnes qui leur envoient des fans même s'ils ne le supportent pas.

Donc, tout le jet de FFP et ce n'est qu'un gros ennui de l' OMI.

Volonté
la source
Il y a 10 ans ou plus, cela aurait été une bonne réponse. Aujourd'hui, le pipeline de vertex est presque toujours implémenté dans le matériel, et les données de vertex sont plus susceptibles d'être stockées dans des objets tampons dans la mémoire GPU, donc une implémentation hypothétique de fan-to-strip dans un pilote nécessiterait de retirer les données de vertex dans la mémoire du CPU pour le réorganiser, puis le recharger dans la mémoire du GPU. Cela détruit non seulement tout l'intérêt d'utiliser des objets tampons (puisque vous n'avez plus de données de sommet statiques), mais cela nécessite une relecture de la mémoire du GPU, donc bonjour les arrêts de pipeline et les faibles performances.
Maximus Minimus
1
@ mh01 quel matériel ne supporte pas le ventilateur nativement? Le HW doit travailler avec l'OpenGL complet après tout ...
Will
Les données de sommet peuvent être stockées dans la mémoire du GPU, mais elles doivent en premier lieu y accéder depuis la mémoire système (au moins une fois). C'est par le chauffeur. (En supposant que le côté CPU provienne des données, ce qui, presque pour les démos matérielles spécialisées, le fait presque toujours).
BrainSlugs83