Optimización de sombreadores HLSL

En esta sección se describen las estrategias de uso general que puede usar para optimizar los sombreadores. Puede aplicar estas estrategias a los sombreadores que se escriben en cualquier lenguaje, en cualquier plataforma.

Saber dónde realizar cálculos del sombreador

Los sombreadores de vértices realizan operaciones que incluyen la captura de vértices y la transformación de matriz de datos de vértices. Normalmente, los sombreadores de vértices se ejecutan una vez por vértice.

Los sombreadores de píxeles realizan operaciones que incluyen capturar datos de textura y realizar cálculos de iluminación. Normalmente, los sombreadores de píxeles se ejecutan una vez por píxel para un fragmento determinado de geometría.

Normalmente, los píxeles superan los vértices de una escena, por lo que los sombreadores de píxeles se ejecutan con más frecuencia que los sombreadores de vértices.

Al diseñar algoritmos de sombreador, tenga en cuenta lo siguiente:

  • Realice cálculos en el sombreador de vértices si es posible. Un cálculo que se realiza en un sombreador de píxeles es mucho más caro que un cálculo que se realiza en un sombreador de vértices.
  • Considere la posibilidad de usar cálculos por vértice para mejorar el rendimiento en situaciones como mallas densas. En el caso de las mallas densas, los cálculos por vértice pueden producir resultados que visualmente son indistinguibles de los resultados generados con cálculos por píxel.

Omitir instrucciones innecesarias

En HLSL, la bifurcación dinámica proporciona la capacidad de limitar el número de instrucciones que se ejecutan. Por lo tanto, la bifurcación dinámica puede ayudar a acelerar el tiempo de ejecución del sombreador. Si no se muestran geometrías o píxeles, use la bifurcación dinámica para salir del sombreador o para limitar las instrucciones. Por ejemplo, si no se ilumina un píxel, no hay ningún punto en ejecutar el algoritmo de iluminación.

En la tabla siguiente se enumeran algunos casos en los que puede probar condiciones en el sombreador y usar bifurcaciones dinámicas para omitir instrucciones innecesarias. La tabla no es completa. En su lugar, está pensado para proporcionarle ideas para optimizar el código.

Condición para comprobar Respuesta en el sombreador
La comprobación alfa determina que no se verá un píxel. Omita el resto del sombreador.
El píxel o geometría está totalmente marcado. Omita el resto del sombreador.
Los pesos de la piel son cero. Omita huesos.
La atenuación de luz es cero. Omita la iluminación.
Término Lambertiano no positivo. Omita la iluminación.

 

Empaquetar variables e interpolantes

Tenga en cuenta el espacio necesario para los datos del sombreador. Empaqueta la mayor cantidad de información en una variable o interpolante lo más posible. A veces, la información de dos variables se puede empaquetar en el espacio de memoria de una sola variable.

Reducir la complejidad del sombreador

Mantenga los sombreadores pequeños y sencillos. En general, los sombreadores con menos instrucciones se ejecutan más rápidamente que los sombreadores con más instrucciones. También es más fácil depurar y optimizar sombreadores más pequeños y menos complejos.

Guía de programación para HLSL

Guía de programación para HLSL