Entonces, la apariencia de algunos objetos cambiará cuando cambias tu punto de vista, en especial aquellos que son brillantes o resplandecientes. Por el otro lado, la apariencia de la mayoría de los objetos cambiará muy poco cuando mueves la cabeza y, por lo tanto, recalcular nuevamente los mismos colores exactos para reproducir esos objetos en cada cuadro es un gasto de los preciosos ciclos de GPU. Sería mucho más eficaz aplicar una tasa menor de sombreado a esos objetos (digamos un tercio o, incluso, un poco menos) y reutilizar los colores del objeto (o “téxeles” como se los conoce) que ya se calcularon anteriormente. Este enfoque de reutilizar el trabajo es muy importante en ray tracing y, en especial, en el caso de la iluminación global, que es un ejemplo muy común del procesamiento de sombreado muy costoso y que cambia lentamente.
Esta técnica se conoce como Sombreado de espacio de textura. Los cálculos no se realizan cuadro a cuadro en el espacio de la pantalla (es decir, desde el punto de vista del gamer), sino que se calculan con una tasa de sombreado diferente en el espacio de textura (básicamente, desde el punto de vista del objeto). ¿Por qué el espacio de textura? Porque, hoy en día, todos los objetos en los juegos tienen texturas y estas son independientes del punto de vista del gamers, por lo que son la opción perfecta para almacenar los colores de los objetos con sombras y “transmitirlos” de cuadro a cuadro.
Esta misma técnica también se puede aplicar de forma eficaz en la realidad virtual, debido a que nuestros ojos están bastante cerca, la gran mayoría de las cosas que ven con un ojo también son percibidas por el otro ojo. La principal diferencia no es el sombreado de estos objetos (por ejemplo, con tu ojo izquierdo, ves el lápiz en el escritorio con el mismo color amarillo que con el ojo derecho), sino la orientación. De esta forma, con el Sombreado de espacio de textura puedes “tomar prestado” los cálculos de sombreado de un ojo y usarlos en el otro ojo, básicamente para completar la carga de trabajo del sombreado. Si el rendimiento está limitado por el sombreado por píxel en el juego, entonces, en teoría, el Sombreado de espacio de textura puede duplicar la frecuencia de cuadros.
Con el Sombreado de espacio de textura, el motor del juego no aplicará el sombrado a todos los píxeles rasterizados de inmediato. En su lugar, primero identificará los téxeles a los que hacen referencia los píxeles que rasterizó. Esta operación es muy similar a lo que hace una unidad de textura cuando encuentra los téxeles necesarios para una determinada operación de texturizado. Este conjunto de téxeles queda en fila para el sombreado, que tendrá lugar luego. Ten en cuenta que, durante este proceso, es posible que diferentes píxeles hagan referencia al mismo texel para mayor eficacia. Por supuesto, no queremos aplicar sombreado a téxeles de forma redundante. De esta manera, el motor del juego deberá realizar lo que se conoce como deduplicación de solicitudes de sombreado, a fin de aislar las referencias de texel únicas y garantizar que se aplique sombreado a cada texel solo una vez.
Una vez que se identifica el conjunto de referencias a un único texel, el juego aplicará el sombreado y almacenará los resultados en las texturas correspondientes para volver a utilizarlos más tarde. Esto es comparable al sombreado de píxeles, excepto que, en lugar de aplicar el sombreado en los píxeles en la pantalla, se aplica en los téxeles en una textura.
Por último, los téxeles procesados se pueden usar para calcular sus correspondientes colores de píxeles, de la misma forma en que se usan las texturas estáticas hoy en día. Este paso es extremadamente económico, dado que simplemente realizar una sola operación de texturizado.
El proceso de encontrar el conjunto de téxeles visible y aislar los únicos requiere mucho procesamiento, es por eso que anteriormente las aplicaciones no podían afrontar el Sombreado de espacio de textura. La arquitectura Turing resuelve este problema al incluir la aceleración de hardware en este paso clave: La unidad de textura de Turing ahora es capaz de proporcionar la información sobre los téxeles directamente al sombreador. Además, los nuevos datos en paralelo hacen que la reduplicación sea muy eficiente.
Si bien el Sombreado de espacio de textura puede parecer un paso bastante simple y lógico, existen algunos obstáculos que evitaron que esta técnica se utilice ampliamente.
Primero, los juegos modernos reutilizan muchos objetos, incluidas las texturas. Si ves un bosque en el juego, es muy poco probable que cada hoja tenga su propia textura. Por el contrario, hay muchas posibilidades de que las hojas provengan de un pequeño conjunto de modelos y texturas de hojas. Estos objetos no funcionan con el Sombreado de espacio de textura, porque todos los objetos visibles deben tener sus propias texturas, ¡no se permite compartirlas! Imagina si no implementaras esto, que todas las hojas de un árbol tengan la misma textura, y luego aplicas el sombreado en una de ellas de forma manual. ¡El sombreado se aplicaría en todas las hojas del árbol de forma simultánea! Esto es lo primero con lo que deben lidiar los desarrolladores: asegurarse de que cada objeto tenga su propia textura, a la cual se puede aplicar el sombreado de forma independiente de los demás objetos.
Por lo tanto, el Sombreado de espacio de textura requiere una gran cantidad de análisis con respecto a la forma en que se desarrollan los juegos. Sin embargo, una vez que finaliza este paso, las posibilidades son infinitas: aparecen nuevas formas de llevar a cabo la renderización, lo que ofrece beneficios tanto para el ray tracing como para la rasterización para generar imágenes fotorrealistas con frecuencias de cuadros altas, sin comprometer el rendimiento. La compatibilidad del hardware con la arquitectura Turing para el Sombreado de espacio de textura permite que estos enfoques híbridos finalmente sean posibles.