Ist Multitexturing wirklich nur "mehr als eine Textur verwenden"?


10

Das mag dumm erscheinen, aber es nervt mich. Soweit ich weiß , verwendet Multitexturing nur mehr als 1 Textur pro Shader (normalerweise, um sie irgendwie zu mischen). Anstatt 1 Textur zu erstellen, erstelle ich 2 oder mehr, was ... ziemlich offensichtlich ist!

Warum gibt es dafür einen speziellen Begriff? Gibt es mehr als nur "mehr als 1 Textur verwenden"? Vermisse ich etwas


Zu einem bestimmten Zeitpunkt, insbesondere in Echtzeit-3D-Grafiken, war die Verwendung einer Textur (diffuse Karte) sehr verbreitet. Daher wurde der Name verwendet, um darauf hinzuweisen, dass Sie mehr als eine Textur verwenden. Ich sehe das Problem nicht. Ähnlich wie Multithreading
AturSams

Multithreading erfordert jedoch eine spezielle API, ein völlig anderes Programmdesign und so weiter. Es unterscheidet sich in vielen Aspekten. Meine Frage ergibt sich aus der Tatsache, dass Multitexturing nichts anderes zu haben scheint als die Texturanzahl. Und es ist kein Problem, nur eine Frage.
NPS

Es muss keine spezielle API erforderlich sein. Das würde von der Umsetzung abhängen. Ich benutze einige Tools, die Multitexture genauso behandeln wie "Unitexture";)
AturSams

@concept Welcher Teil? Der Titel?
Anko

Antworten:


16

Der spezielle Begriff hat eher mit der Entwicklung von Grafikkarten und Echtzeit-Grafik-APIs zu tun, als dass er so speziell ist. Beispielsweise hatten Bildverarbeitung und Offline-Grafik-Rendering diese Funktion lange bevor sie in Echtzeit-Grafik-APIs und Hardware auf Verbraucherebene verfügbar war.

Seit OpenGL 1.1 (feste Funktionalität) wurde Multitexturing als neuer Status in die API eingeführt. Anstatt nur eine Textur zu binden, konnten Sie mehrere Texturen binden. eine für jede Textureinheit und dann mit einem der Texturumgebungsparameter zwischen ihnen mischen, mischen, modulieren usw. 1

Dann wurden Textur-Kombinierer eingeführt, die es ermöglichten, eine Reihe von Texturen mit flexibleren Operationen zu kombinieren, indem Sie eine Möglichkeit hatten, Parameter an eine feste Menge von Operationen zu übergeben (stellen Sie sich diese als Shader vor, aber mit einer festen Menge von Parametern) flexibler als die ursprünglichen "Kombinierer".

Mit der Einführung von Shadern wurden die vorherigen Kombinierer überflüssig, bis sie offiziell abgelehnt wurden. Schließlich wurde es trivial (als sich die Hardware und die entsprechenden APIs weiterentwickelten), einen Textur-Sampler an den Shader zu übergeben und die GPU beliebige Operationen (Ihren Shader) an Ihren Texturen ausführen zu lassen, die wesentlich flexibler waren als zuvor.

Der Punkt hier; Selbst wenn es trivial wurde, blieb der Begriff als Oberbegriff für jede Operation erhalten, die das Abtasten und Falten mehrerer Texturen beschreibt.

1 Ich benutze mein Gedächtnis, um mich an die OpenGL-Funktionalität zu erinnern, die mich korrigiert, wenn ich etwas verpasst habe.


5

Der historische Grund ist, dass "Multitexturing" einst ein Marketing-Schlagwort wie "Hardware TnL" war. Da es ein Unterscheidungsmerkmal für neue Karten war, musste es ein Wort geben, um sie zu verkaufen.

Der technische Grund ist, dass Multitexturing nicht nur zwei Texturen anstelle von einer erstellt und verwendet. Wenn Sie einfach zwei Texturen (oder drei oder eine beliebige Zahl) verwendet haben, können Sie genauso gut nur eine Textur verwenden, da es nur ein Ausgabefragment gibt. Das würde keinen Unterschied machen (was auch immer die Eingabe ist, die Ausgabe kann nur die eine oder andere sein), also wäre es nichts Besonderes.

Der Unterschied besteht nicht darin, dass Sie mehrere Texturen erstellen können, sondern dass Sie zwei oder mehr Texturen kombinieren . Sie können sie beispielsweise basierend auf Alpha oder einigen interpolierten Mischfaktoren pro Scheitelpunkt mischen oder sie hinzufügen oder etwas anderes.
Das Maß an Konfigurierbarkeit / Programmierbarkeit hat sich im letzten Jahrzehnt stark weiterentwickelt, aber der einzige große Unterschied besteht darin, dass Sie zwei oder mehr Eingänge irgendwie zu einem Ausgang kombinieren können .


2

Am Anfang war Licht

Um genau zu sein, OpenGL-Beleuchtung, die bestimmte mathematische Operationen spezifizierte, die auf ein Fragment angewendet werden sollten, die dann mit Texturen kombiniert wurden, um eine endgültige Farbe abzuleiten.

Und dann war da noch Quake

Quake hat diese Art der Beleuchtung für viele seiner Objekte nicht verwendet. Stattdessen wurde eine zweite Textur zur Darstellung der Beleuchtung verwendet, die mit der Objekttextur multipliziert (oder mit dieser "moduliert") wurde, um eine endgültige Farbe abzuleiten.

Die damalige Hardware unterstützte dies jedoch nicht in einem einzigen Vorgang. Also musste Quake seine Szenenobjekte zweimal zeichnen:

  • Zeichnen Sie alles einmal, um die Basistexturen festzulegen.
  • Stellen Sie einen modulierten Mischmodus ein.
  • Zeichnen Sie alles ein zweites Mal, um die Beleuchtungstexturen anzuwenden.

Das war natürlich langsam; Es musste nicht nur die gesamte Geometrie zweimal transformiert und abgeschnitten werden (was damals eine CPU-Operation war), sondern jedes Pixel auf dem Bildschirm wurde beim Rendern zweimal berührt.

Geben Sie Multitexture ein

Multitexture war die Lösung für dieses Problem und wurde ursprünglich über die Erweiterung GL_SGIS_multitexture verfügbar gemacht, die nur auf bestimmten 3DFX-Consumer-Karten vorhanden war. Ursprünglich war es nur erlaubt, zwei Texturen zu mischen (und mit einem begrenzten Satz von Mischmodi).

Um aus der originalen GLQuake-Readme-Datei zu zitieren :

GL_SGIS_multitexture
Die Unterstützung von Multitextures ermöglicht es bestimmter Hardware, die Welt in einem Durchgang anstelle von zwei zu rendern. GLQuake verwendet zwei Durchgänge, einen für die Welttexturen und den zweiten für die Lightmaps, die auf den Texturen gemischt werden. Auf einigen Hardwarekomponenten mit einer von GL_SIGS_multitexture unterstützten OpenGL-Implementierung kann dies in einem Durchgang erfolgen. Auf Hardware, die dies unterstützt, wird die Bildrate um 60% bis 100% erhöht. Derzeit unterstützen nur 3DFX-Dual-TMU-Karten (wie der Obsidian 2220) diese Erweiterung, andere Hardware wird jedoch bald folgen.

Es ist wichtig, sich daran zu erinnern, dass zu diesem Zeitpunkt Effekte wie normales Mapping, jede andere Art von Beleuchtung pro Pixel, sogar Shader usw. einfach nicht existierten (nun ja , aber hauptsächlich nur in wissenschaftlichen Arbeiten und Forschungsprojekten, und wurden für die Verwendung beim Echtzeit-Rendering nicht als brauchbar angesehen.

Und so bis zur Gegenwart

Von hier aus ist es so ziemlich wie in den anderen Antworten beschrieben. Multitexturing wurde im Laufe der Zeit zu einer Standardfunktion, wobei mehr Mischmodi verfügbar wurden und schließlich beliebigem Shader-Code Platz machten.

Für die Zwecke Ihrer Frage ist jedoch Folgendes wichtig: Am Anfang bestand die Standardfunktionalität darin, beim Rendern jeweils nur eine Textur verwenden zu können. In der Lage zu sein, mehr als eine zu verwenden, war eine zusätzliche Funktionalität, die nur von High-End-Hardware unterstützt wurde, und daher war ein Name erforderlich. Dieser Name hätte "Dual-Texturing" sein können (da die ersten Implementierungen nur zwei Texturen unterstützten), aber mit einem Blick auf die Zukunft wurde der Name "Multitexture" gewählt.

Weitere Informationen zur Geschichte all dessen finden Sie hier und eine gute historische Beschreibung (des breiteren Kontextes und der darin gespielten Rolle der Multitexturierung) in dieser Programmers.SE- Antwort.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.