Czy multiteksturowanie naprawdę „używa więcej niż jednej tekstury”?

10

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?

NPS
źródło
W pewnym momencie, szczególnie w grafice 3D w czasie rzeczywistym, używanie jednej tekstury (mapy rozproszonej) było bardzo powszechne. Dlatego nazwa została użyta do zasugerowania, że ​​używasz więcej niż jednej tekstury. Nie widzę problemu. Podobnie jak wielowątkowy
AturSams
Ale wielowątkowość wymaga specjalnego API, zupełnie innej konstrukcji programu i tak dalej. Różni się pod wieloma względami. Moje pytanie wynika z faktu, że multiteksturowanie nie wydaje się mieć nic innego, ale liczy się faktura. I to nie jest problem, tylko pytanie.
NPS
Nie musi wymagać specjalnego API. To zależy od wdrożenia. Używam kilka narzędzi, które leczą multitekstur tak samo oni „unitexture”;)
AturSams
@concept Która część? Tytuł?
Anko

Odpowiedzi:

16

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.

concept3d
źródło
5

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.

Damon
źródło
2

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:

  • Narysuj wszystko raz, aby położyć podstawowe tekstury.
  • Ustaw modulowany tryb mieszania.
  • Narysuj wszystko po raz drugi, aby zastosować tekstury oświetlenia.

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 :

GL_SGIS_multitexture Obsługa
multitekstur pozwala niektórym urządzeniom renderować świat w jednym przejściu zamiast dwóch. GLQuake używa dwóch przejść, jednego do tekstur świata, a drugiego do map świetlnych, które są mieszane z teksturami. Na niektórych urządzeniach, z implementacją OpenGL obsługiwaną przez GL_SIGS_multitexture, można to zrobić w jednym przebiegu. Na sprzęcie, który to obsługuje, uzyskasz 60 do 100% wzrost liczby klatek na sekundę. Obecnie tylko podwójne karty TMU 3DFX (takie jak Obsidian 2220) obsługują to rozszerzenie, ale wkrótce pojawi się inny sprzęt.

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 .

Maximus Minimus
źródło