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
Antworten:
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.
quelle
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 .
quelle
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:
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 :
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.
quelle