Il multitexturing è davvero "usando più di una trama"?


10

Potrebbe sembrare stupido, ma mi dà fastidio. Da quanto ho capito, il multitexturing sta usando solo più di 1 trama per shader (di solito per fonderli in qualche modo). Quindi, invece di creare 1 trama, ne creo 2 o più che è ... abbastanza ovvio!

Perché esiste un termine speciale per questo? C'è di più oltre al semplice "utilizzo di più di una trama"? Mi sto perdendo qualcosa?


Ad un certo punto, specialmente nella grafica 3D in tempo reale, l'uso di una trama (mappa diffusa) era molto comune. Pertanto, il nome è stato usato per suggerire che stai usando più di una trama. Non vedo il problema. Proprio come multi-thread
AturSams

Ma il multithreading richiede API speciali, design del programma completamente diverso e così via. Differisce in molti aspetti. La mia domanda deriva dal fatto che il multitexturing non sembra avere nulla di diverso ma il conteggio delle trame. E non è un problema, solo una domanda.
NPS

Non deve richiedere un'API speciale. Dipenderebbe dall'implementazione. Uso alcuni strumenti che trattano il multitexture nello stesso modo in cui "unirebbero";)
AturSams

@concept Quale parte? Il titolo?
Anko

Risposte:


16

Il termine speciale ha a che fare con l'evoluzione delle schede grafiche e delle API grafiche in tempo reale piuttosto che essere così speciale. Ad esempio, l'elaborazione delle immagini e il rendering della grafica offline avevano questa funzione molto prima che fosse disponibile in API grafiche in tempo reale e hardware di livello consumer.

Da quando OpenGL 1.1 (funzionalità fissa) il multitexturing è stato introdotto come nuovo stato nell'API. Invece di legare solo una trama, ti ha dato la possibilità di associare più trame; uno per ogni unità di trama e quindi sfumare tra loro usando uno dei parametri dell'ambiente di trama, mescola, modula ... ecc. 1

Quindi sono stati introdotti i combinatori di texture , che hanno dato la possibilità di combinare un set di trame usando operazioni più flessibili, dandoti un modo per passare i parametri a un set fisso di operazioni (pensalo come shader ma con set fisso di parametri), questo era più flessibile degli "combinatori" originali.

Con l'introduzione degli shader, i combinatori precedenti sono diventati ridondanti fino a quando non sono stati ufficialmente deprecati. Alla fine è diventato banale (con l'evolversi dell'hardware e di conseguenza delle API) passare un campionatore di texture allo shader e lasciare che la GPU eseguisse operazioni arbitrarie (il tuo shader) sulle trame, tanto più flessibile rispetto a prima.

Il punto qui; anche se è diventato banale, il termine è sopravvissuto come termine generico per qualsiasi operazione che descriva il campionamento e la convoluzione di più trame.

1 Sto usando la mia memoria per richiamare la correzione della funzionalità fissa OpenGL se mi sono perso sth.


5

Il motivo storico è che "il multitexturing" era una parola d'ordine di marketing come "hardware TnL" una volta. Dato che era una caratteristica distintiva delle nuove carte, doveva esserci una parola per venderle.

Il motivo tecnico è che il multitexturing non sta solo creando e usando due trame anziché una. Se hai semplicemente usato due trame (o tre, o qualsiasi numero), puoi anche usare solo una trama, poiché esiste un solo frammento di output. Ciò non farebbe alcuna differenza (qualunque sia l'input, l'output può essere solo l'uno o l'altro), quindi non sarebbe niente di speciale.

La differenza non è che puoi creare più trame, ma che combini due o più trame. Ad esempio, potresti fonderli sulla base di alfa o su alcuni fattori di fusione interpolati per vertice, oppure potresti aggiungerli o qualcosa di diverso.
La quantità di configurabilità / programmabilità si è notevolmente evoluta nell'ultimo decennio, ma l'unica grande differenza rimane che in qualche modo è possibile combinare due o più ingressi in un unico output.


2

All'inizio c'era la luce

L'illuminazione OpenGL, per essere precisi, ha specificato alcune operazioni matematiche da applicare a un frammento, che sono state quindi combinate con trame per ottenere un colore finale.

E poi c'è stato Quake

Quake non ha usato questo tipo di illuminazione per molti dei suoi oggetti. Invece ha usato una seconda trama per rappresentare l'illuminazione, che è stata moltiplicata (o "modulata con") dalla trama dell'oggetto per derivare un colore finale.

Tuttavia, l'hardware dell'epoca non lo supportava in un'unica operazione. Quindi Quake doveva disegnare i suoi oggetti scena due volte:

  • Disegna tutto una volta per definire le trame di base.
  • Imposta una modalità di fusione modulata.
  • Disegna tutto una seconda volta per applicare le trame luminose.

Questo ovviamente era lento; non solo tutte le geometrie dovevano essere trasformate e ritagliate due volte (che a quei tempi era un'operazione CPU), ma ogni pixel sullo schermo finiva per essere toccato due volte durante il rendering.

Inserisci multitexture

Multitexture era la soluzione a questo, ed era originariamente esposto tramite l'estensione GL_SGIS_multitexture, che esisteva solo su alcune schede 3DFX di consumo. Inizialmente consentiva solo la fusione di due trame (e con un insieme limitato di metodi di fusione).

Per citare dal readme originale di GLQuake :

GL_SGIS_multitexture Il
supporto multitexture consente a determinati hardware di rendere il mondo in un passaggio anziché in due. GLQuake utilizza due passaggi, uno per le trame del mondo e il secondo per le mappe luminose che si fondono sulle trame. Su alcuni hardware, con un'implementazione OpenGL GL_SIGS_multitexture supportata, questo può essere fatto in un unico passaggio. Su hardware che supporta questo, otterrai un aumento dal 60% al 100% della frequenza dei fotogrammi. Attualmente, solo le doppie schede TMU 3DFX (come Obsidian 2220) supportano questa estensione, ma presto seguiranno altri hardware.

È importante ricordare che in questo momento non esistevano effetti come la normale mappatura, qualsiasi altro tipo di illuminazione per pixel, persino shader e così via (bene, ma principalmente in articoli accademici e progetti di ricerca, e non sono stati considerati validi per l'uso nel rendering in tempo reale).

E così al presente

Da qui è praticamente come descritto nelle altre risposte. Il multitexturing è diventato una funzionalità standard nel tempo, con più modalità di fusione disponibili, che alla fine hanno lasciato il posto al codice shader arbitrario.

Ma ciò che è importante ai fini della tua domanda è questo: all'inizio la funzionalità standard era solo quella di poter usare una trama alla volta durante il rendering. Essere in grado di utilizzare più di una era una funzionalità aggiuntiva supportata solo dall'hardware di fascia alta, e quindi aveva bisogno di un nome. Quel nome avrebbe potuto essere "dual-texturing" (poiché le prime implementazioni supportavano solo due texture) ma con un occhio al futuro è stato scelto il nome "multitexture".

Ulteriori letture sulla storia di tutto ciò sono disponibili qui , e un buon resoconto storico (del contesto più ampio e della parte multitexturing giocata in essa) in questa risposta di Programmers.SE .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.