Le multitexturing consiste-t-il vraiment à «utiliser plus d'une texture»?

10

Cela peut sembler stupide, mais cela me dérange. D'après ce que je comprends, le multitexturing utilise simplement plus d'une texture par shader (généralement pour les mélanger d'une manière ou d'une autre). Donc au lieu de créer 1 texture, j'en crée 2 ou plus ce qui est ... assez évident!

Pourquoi y a-t-il un terme spécial pour cela? Y a-t-il plus que simplement "utiliser plus d'une texture"? Suis-je en train de manquer quelque chose?

NPS
la source
À un moment donné, en particulier dans les graphiques 3D en temps réel, l'utilisation d'une texture (carte diffuse) était très courante. Par conséquent, le nom a été utilisé pour suggérer que vous utilisez plusieurs textures. Je ne vois pas le problème. Tout comme le multi-thread
AturSams
Mais le multithreading nécessite une API spéciale, une conception de programme complètement différente, etc. Elle diffère à bien des égards. Ma question vient du fait que le multitexturing ne semble avoir rien d'autre que le nombre de textures. Et ce n'est pas un problème, juste une question.
NPS
Il n'a pas besoin d'exiger une API spéciale. Cela dépendrait de la mise en œuvre. J'utilise certains outils qui traitent le multitexture de la même manière qu'ils le feraient "unitexture";)
AturSams
@concept Quelle partie? Le titre?
Anko

Réponses:

16

Le terme spécial a à voir avec l'évolution des cartes graphiques et des API graphiques en temps réel plutôt que d'être si spécial. Par exemple, le traitement d'image et le rendu graphique hors ligne possédaient cette fonctionnalité bien avant d'être disponible dans les API graphiques en temps réel et le matériel de niveau grand public.

Depuis OpenGL 1.1 (fonctionnalité fixe), le multitexturing a été introduit comme nouvel état dans l'API. Au lieu de ne lier qu'une seule texture, il vous a permis de lier plusieurs textures; un pour chaque unité de texture, puis mélangez-les entre eux en utilisant l'un des paramètres d'environnement de texture, mélangez, modulez..etc 1

Ensuite , des combineurs de textures ont été introduits, il a permis de combiner un ensemble de textures en utilisant des opérations plus flexibles, en vous donnant un moyen de passer des paramètres à un ensemble fixe d'opérations (pensez-y comme des shaders mais avec un ensemble fixe de paramètres), c'était plus flexible que les "combiners" originaux.

Avec l'introduction des shaders, les combineurs précédents sont devenus redondants jusqu'à ce qu'ils soient officiellement obsolètes. Enfin, il est devenu trivial (au fur et à mesure que le matériel et les API ont évolué) de passer un échantillonneur de texture au shader et de laisser le GPU exécuter des opérations arbitraires (votre shader) sur vos textures autant plus flexiblel que ce qui était auparavant.

Le point ici; même s'il est devenu trivial, le terme a survécu comme un terme générique pour toute opération qui décrit l'échantillonnage et la convolution de textures multiples.

1 J'utilise ma mémoire pour rappeler la fonctionnalité fixe OpenGL me corriger si j'ai raté qch.

concept3d
la source
5

La raison historique est que "multitexturing" était un mot à la mode marketing comme "hardware TnL" il était une fois. Comme il s'agissait d'une caractéristique distinctive des nouvelles cartes, il fallait un mot pour les vendre.

La raison technique est que le multitexturing ne consiste pas seulement à créer et à utiliser deux textures au lieu d'une. Si vous avez simplement utilisé deux textures (ou trois, ou n'importe quel nombre), vous pourriez tout aussi bien n'utiliser qu'une seule texture, car il n'y a qu'un seul fragment de sortie. Cela ne ferait aucune différence (quelle que soit l'entrée, la sortie ne peut être que l'une ou l'autre), donc ce ne serait rien de spécial.

La différence n'est pas que vous pouvez créer plusieurs textures, mais que vous combinez deux textures ou plus. Par exemple, vous pouvez les fusionner en fonction de l'alpha ou de certains facteurs de fusion interpolés par sommet, ou vous pouvez les ajouter, ou quelque chose de différent.
La quantité de configurabilité / programmabilité a considérablement évolué au cours de la dernière décennie, mais la seule grande différence demeure que vous pouvez en quelque sorte combiner deux entrées ou plus en une seule sortie.

Damon
la source
2

Au début il y avait de la lumière

L'éclairage OpenGL, pour être spécifique, qui spécifiait certaines opérations mathématiques à appliquer à un fragment, qui étaient ensuite combinées avec des textures pour dériver une couleur finale.

Et puis il y a eu Quake

Quake n'a pas utilisé ce type d'éclairage pour bon nombre de ses objets. Au lieu de cela, il a utilisé une deuxième texture pour représenter l'éclairage, qui a été multipliée par (ou "modulée avec) la texture de l'objet pour dériver une couleur finale.

Cependant, le matériel de l'époque ne le supportait pas en une seule opération. Donc, Quake devait dessiner ses objets de scène deux fois:

  • Dessinez tout une fois pour définir les textures de base.
  • Définissez un mode de fusion modulé.
  • Dessinez tout une seconde fois pour appliquer les textures d'éclairage.

Bien sûr, cela a été lent; non seulement toute la géométrie devait être transformée et découpée deux fois (ce qui était à l'époque une opération du processeur), mais chaque pixel à l'écran a fini par être touché deux fois pendant le rendu.

Entrez multitexture

Multitexture était la solution à cela, et a été initialement exposé via l'extension GL_SGIS_multitexture, qui n'existait que sur certaines cartes 3DFX grand public. À l'origine, il ne permettait de mélanger que deux textures (et avec un ensemble limité de modes de fusion).

Pour citer le readme original de GLQuake :

GL_SGIS_multitexture La
prise en charge de multitextures permet à certains matériels de rendre le monde en un seul passage au lieu de deux. GLQuake utilise deux passes, une pour les textures du monde et la seconde pour les lightmaps qui sont mélangées aux textures. Sur certains matériels, avec une implémentation OpenGL prise en charge par GL_SIGS_multitexture, cela peut être fait en un seul passage. Sur le matériel qui prend en charge cela, vous obtiendrez une augmentation de 60% à 100% de la fréquence d'images. Actuellement, seules les cartes double TMU 3DFX (telles que l'Obsidian 2220) prennent en charge cette extension, mais d'autres matériels suivront bientôt.

Il est important de se rappeler qu'à ce stade, les effets tels que le mappage normal, tout autre type d'éclairage par pixel, même les shaders, etc. n'existaient pas (eh bien, ils existaient , mais principalement uniquement dans les articles universitaires et les projets de recherche, et n'étaient pas considérés comme viables pour une utilisation dans le rendu en temps réel).

Et donc jusqu'à présent

De là, c'est à peu près comme décrit dans les autres réponses. Le multitexturing est devenu une fonctionnalité standard au fil du temps, avec plus de modes de fusion devenant disponibles, cédant finalement la place à un code de shader arbitraire.

Mais ce qui est important pour les besoins de votre question est le suivant: au début, la fonctionnalité standard ne pouvait qu’en utiliser une texture à la fois lors du rendu. Pouvoir en utiliser plusieurs était une fonctionnalité supplémentaire prise en charge uniquement par du matériel haut de gamme, et il fallait donc un nom. Ce nom aurait pu être "dual-texturing" (comme les premières implémentations ne supportaient que deux textures) mais avec un œil sur l'avenir, le nom "multitexture" a été choisi.

Une lecture plus approfondie de l'histoire de tout cela est disponible ici , et un bon résumé historique (du contexte plus large et du rôle du multitexturing) dans cette réponse de Programmers.SE .

Maximus Minimus
la source