2009-06-28 13 views
19

He estado leyendo trabajos sobre gráficos por computadora, y cada cierto tiempo encuentro el término "lectura de textura dependiente" o "búsqueda de textura dependiente" utilizado en el contexto de las texturas de consulta en el código de sombreado. ¿Qué es una textura dependiente leída, y cuál es la diferencia entre esto y una textura "normal" leída?¿Qué es una textura dependiente leída?

Respuesta

23

Una "lectura de textura dependiente" es cuando los valores de retorno de una búsqueda de textura (u otros cálculos en sombreado) se utilizan para determinar DÓNDE buscar desde una segunda textura. Una implicación importante es que las coordenadas de textura (desde donde mira hacia arriba) no están determinadas hasta la mitad de la ejecución del sombreador ... no hay ningún tipo de análisis estático que pueda hacer en el sombreador (incluso conociendo los valores de todos los parámetros) eso te dirá cuáles serán las coordenadas antes de tiempo. También ordena estrictamente ordena las dos lecturas de textura y limita cuánto se podría cambiar el orden de ejecución por optimizaciones en el controlador, etc.

En las tarjetas gráficas anteriores, solía haber bastantes limitaciones en este tipo de cosas . Por ejemplo, en un punto (IIRC) puede buscar desde múltiples texturas pero solo con un pequeño número de coordenadas de textura distintas. El hardware realmente se implementó de manera que ciertos tipos de lecturas de textura dependientes eran imposibles o muy ineficientes.

En la última generación o dos de tarjetas, no debería tener que preocuparse por esto. Pero puede que esté leyendo libros o artículos de hace un par de años cuando realmente tenía que prestar mucha atención a tales cosas.

+8

En realidad, según PowerVR, necesita prestar atención en hardware bastante reciente :-) http://bit.ly/yvSnM – Justicle

+0

En mi GTX 570, las búsquedas de textura dependientes en el sombreador de fragmentos son un orden de magnitud más lentas que las búsquedas de textura independientes. (Esto empujó el motor en el que estaba trabajando desde cero/ahogando FPS a 20 FPS). Experimenté una aceleración levemente menos masiva que eliminaba una "búsqueda de matriz constante" dependiente en el sombreador de geometría. (El recuento primitivo dependía de este valor.) ¡El contexto lo es todo! – Philip

+0

Esto es incorrecto, ver mi respuesta. – benthehutt

10

Una lectura de textura normal solo usa las coordenadas de textura pasadas al sombreado. Una lectura de textura dependiente es con coordenadas de textura que se calcularon en parte utilizando valores obtenidos de otra textura a la que se accedió anteriormente en el sombreador. Por lo tanto, el acceso a la segunda textura es "dependiente" del valor obtenido de la primera.

21

La respuesta aceptada (y la que está debajo) restringe incorrectamente las lecturas de textura dependientes a usar el resultado de otra lectura de textura. Eso es incorrecto.

Una lectura de textura dependiente es cualquier textura leída con las coordenadas que no son las coordenadas exactas pasadas al programa de sombreado. Incluso un swizzle hará que se lea una textura dependiente.

Esto se toma directamente de Apple's OpenGL ES programming guide.

+0

Gracias, @benthehutt, aclaré en mi respuesta. –

Cuestiones relacionadas