To może wydawać się głupie, ale mnie wkurza. Z tego, co rozumiem, multiteksturowanie wykorzystuje po prostu więcej niż 1 teksturę na moduł cieniujący (zwykle do ich mieszania). Zamiast tworzyć 1 teksturę, tworzę 2 lub więcej, co jest ... całkiem oczywiste!
Dlaczego istnieje na to specjalny termin? Czy jest w tym coś więcej niż tylko „używanie więcej niż 1 tekstury”? Czy coś brakuje?
Odpowiedzi:
Ten szczególny termin dotyczy ewolucji kart graficznych i interfejsów API grafiki w czasie rzeczywistym, a nie jest tak wyjątkowy. Na przykład przetwarzanie obrazu i renderowanie grafiki offline miało tę funkcję na długo przed udostępnieniem jej w interfejsach API grafiki w czasie rzeczywistym i sprzęcie na poziomie konsumenckim.
Od czasu OpenGL 1.1 (stała funkcjonalność) multiteksturowanie zostało wprowadzone jako nowy stan interfejsu API. Zamiast wiązać tylko jedną teksturę, daje to możliwość wiązania wielu tekstur; po jednym dla każdej jednostki tekstury, a następnie mieszaj je za pomocą jednego z parametrów środowiska tekstury, mieszaj, moduluj ... itd. 1
Następnie wprowadzono kombinatory tekstur , dało to możliwość łączenia zestawu tekstur za pomocą bardziej elastycznych operacji, dając ci sposób na przekazanie parametrów do ustalonego zestawu operacji (pomyśl o tym jak o cieniowaniu, ale ze stałym zestawem parametrów), to było bardziej elastyczny niż oryginalne „kombinatory”.
Wraz z wprowadzeniem shaderów poprzednie kombinatory stały się zbędne aż do oficjalnej rezygnacji. Wreszcie stało się trywialne (gdy ewoluował sprzęt i odpowiednio interfejsy API) przekazywanie próbnika tekstur do modułu cieniującego i pozwolenie GPU na wykonywanie dowolnych operacji (twojego modułu cieniującego) na twoich teksturach o wiele bardziej elastycznie niż wcześniej.
Chodzi o to; nawet jeśli stało się trywialne, termin przetrwał jako ogólny termin dla każdej operacji opisującej próbkowanie i splot wielu tekstur.
1 Korzystam z pamięci, by przypomnieć sobie poprawioną funkcjonalność OpenGL, poprawić mnie, jeśli coś przeoczyłem.
źródło
Historyczny powód jest taki, że „multiteksturowanie” było kiedyś modnym hasłem marketingowym, takim jak „sprzętowy TnL”. Ponieważ była to cecha wyróżniająca nowe karty, trzeba było znaleźć słowo, aby je sprzedać.
Technicznym powodem jest to, że multiteksturowanie to nie tylko tworzenie i używanie dwóch tekstur zamiast jednej. Jeśli po prostu użyłeś dwóch tekstur (lub trzech lub dowolnej liczby), równie dobrze możesz użyć tylko jednej tekstury, ponieważ jest tylko jeden fragment wyjściowy. Nie miałoby to żadnej różnicy (bez względu na wejście, wyjście może być jedno lub drugie), więc nie byłoby nic specjalnego.
Różnica polega nie na tym, że można utworzyć kilka tekstur, ale na połączeniu dwóch lub więcej tekstur. Na przykład możesz je mieszać na podstawie współczynników alfa lub niektórych interpolowanych na wierzchołek czynników mieszania, albo możesz je dodać, lub coś innego.
Ilość konfigurowalności / programowalności znacznie się zmieniła w ciągu ostatniej dekady, ale pozostaje jedna wielka różnica, że można w jakiś sposób połączyć dwa lub więcej wejść w jedno wyjście.
źródło
Na początku było światło
Konkretnie oświetlenie OpenGL, które określało pewne operacje matematyczne, które należy zastosować do fragmentu, które następnie połączono z teksturami w celu uzyskania ostatecznego koloru.
A potem był Quake
Quake nie używał tego rodzaju oświetlenia do wielu swoich obiektów. Zamiast tego użył drugiej tekstury do przedstawienia oświetlenia, która została pomnożona przez (lub „zmodulowana”) teksturą obiektu w celu uzyskania końcowego koloru.
Jednak ówczesny sprzęt nie obsługiwał tego w jednej operacji. Więc Quake musiał dwukrotnie narysować obiekty sceny:
To oczywiście było powolne; nie tylko cała geometria musiała zostać dwukrotnie przekształcona i obcięta (co w tamtych czasach była operacją procesora), ale każdy piksel na ekranie został dotknięty dwukrotnie podczas renderowania.
Wprowadź multiteksturę
Rozwiązaniem tego było Multitexture, które zostało pierwotnie ujawnione za pomocą rozszerzenia GL_SGIS_multitexture, które istniało tylko na niektórych konsumenckich kartach 3DFX. Pierwotnie dozwolone było mieszanie tylko dwóch tekstur (z ograniczonym zestawem trybów mieszania).
Cytat z oryginalnego pliku Readme GLQuake :
Ważne jest, aby pamiętać, że w tej chwili takie efekty, jak normalne mapowanie, wszelkie inne rodzaje oświetlenia na piksele, nawet shadery itp., Po prostu nie istniały (dobrze, ale przede wszystkim w pracach naukowych i projektach badawczych oraz nie zostały uznane za opłacalne do użycia w renderowaniu w czasie rzeczywistym).
I tak do dzisiaj
Stąd jest to prawie tak, jak opisano w innych odpowiedziach. Z czasem multiteksturowanie stało się standardową funkcją, dzięki czemu dostępnych jest więcej trybów mieszania, które ostatecznie ustępują miejsca dowolnemu kodowi modułu cieniującego.
Ale ważne dla celów twojego pytania jest to: na początku standardowa funkcjonalność była w stanie używać jednej tekstury na raz podczas renderowania. Możliwość korzystania z więcej niż jednego była dodatkową funkcją obsługiwaną tylko przez wysokiej klasy sprzęt, dlatego potrzebna była nazwa. Ta nazwa mogła być „podwójnie teksturowana” (ponieważ pierwsze implementacje obsługiwały tylko dwie tekstury), ale z jednym okiem na przyszłość wybrano nazwę „multitekstura”.
Dalsza lektura historii tego wszystkiego jest dostępna tutaj , a także dobry zapis historyczny (szerszego kontekstu i roli, jaką odgrywa w nim multiteksturowanie) w odpowiedzi na Programmers.SE .
źródło