È buona norma utilizzare tutte le unità texture disponibili?


9

Quando si applicano più trame a una mesh, come per il bump mapping, di solito associo le trame alle prime poche unità di texture fisse, ad esempio: diffuse = unità 0, bump = unità 1, speculare = unità 2, quindi continuo a riutilizzarle per ciascuna maglia diversa con diverse trame. Ma mi sono sempre chiesto perché glActiveTexturesupporta così tante unità di trama (nel link precedente, dice almeno 80).

Quindi mi è venuto in mente che un possibile modo di gestire le trame è legare trame distinte a ciascuna unità disponibile e lasciarle abilitate, aggiornando semplicemente l'indice di campionamento uniforme. Ciò dovrebbe migliorare il rendering perf riducendo il numero di interruttori texture. Se hai meno trame delle unità di trama massime, non devi mai separare una trama.

Questa pratica standard è in applicazioni OpenGL in tempo reale (credo che ciò valga anche per D3D)? E ci sono implicazioni non ovvie sulle prestazioni nell'adottare questo approccio? Overhead di memoria forse?

Risposte:


11

L'hardware moderno non ha davvero il concetto di punti di rilegatura a trama come esposto da OpenGL. Piuttosto, l'unità shader utilizza un descrittore (che è solo una sorta di puntatore grasso) che può potenzialmente indirizzare qualsiasi trama purché risieda nella memoria video. Questo è ciò che rende possibili cose come trame senza legame . Quindi la grande quantità di "unità di trama" disponibili nelle attuali implementazioni sta semplicemente cercando di eseguire l'ondeggiamento manuale di questa parte ora irrilevante dell'API.

Detto questo, il modo consigliato di implementare ciò che stai cercando di evitare (evitando la rilegatura delle trame) è utilizzare gli array di trame , che ti consentono di indicizzare dinamicamente un insieme di trame nello shader, purché tutte stesso formato e dimensioni. Questa presentazione contiene maggiori dettagli su queste e altre tecniche per ridurre il sovraccarico del driver durante il rendering con OpenGL moderno: Approaching Zero Driver Overhead


Ho già visto quella presentazione, è molto buona. Non sapevo di cosa tu abbia parlato nel primo paragrafo, quindi grazie per l'informazione!
glampert
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.