Otimizando sombreadores HLSL

Esta seção descreve as estratégias de uso geral que você pode usar para otimizar seus sombreadores. Você pode aplicar essas estratégias a sombreadores escritos em qualquer linguagem, em qualquer plataforma.

Saber onde executar cálculos de sombreador

Sombreadores de vértice executam operações que incluem buscar vértices e executar a transformação de matriz de dados de vértice. Normalmente, sombreadores de vértice são executados uma vez por vértice.

Os Sombreadores de Pixel executam operações que incluem a busca de dados de textura e a execução de cálculos de iluminação. Normalmente, sombreadores de pixel são executados uma vez por pixel para uma determinada parte da geometria.

Normalmente, os pixels superam os vértices em uma cena, portanto, sombreadores de pixel são executados com mais frequência do que sombreadores de vértice.

Ao criar algoritmos de sombreador, lembre-se do seguinte:

  • Execute cálculos no sombreador de vértice, se possível. Um cálculo executado em um sombreador de pixel é muito mais caro do que um cálculo executado em um sombreador de vértice.
  • Considere usar cálculos por vértice para melhorar o desempenho em situações como malhas densas. Para malhas densas, cálculos por vértice podem produzir resultados visualmente indistinguíveis de resultados produzidos com cálculos por pixel.

Ignorar instruções desnecessárias

No HLSL, a ramificação dinâmica fornece a capacidade de limitar o número de instruções executadas. Portanto, a ramificação dinâmica pode ajudar a acelerar o tempo de execução do sombreador. Se a geometria ou os pixels não forem exibidos, use a ramificação dinâmica para sair do sombreador ou limitar as instruções. Por exemplo, se um pixel não estiver aceso, não haverá nenhum ponto na execução do algoritmo de iluminação.

A tabela a seguir lista alguns casos em que você pode testar condições em seu sombreador e usar a ramificação dinâmica para ignorar instruções desnecessárias. A tabela não é abrangente. Em vez disso, ele destina-se a fornecer ideias para otimizar seu código.

Condição a ser verificada Resposta no sombreador
Alfa marcar determina que um pixel não será visto. Ignore o restante do sombreador.
O pixel ou geometria é totalmente fogged. Ignore o restante do sombreador.
Os pesos da pele são zero. Pule ossos.
Atenuação leve é zero. Ignore a iluminação.
Termo lambertiano não positivo. Ignore a iluminação.

 

Variáveis de pacote e interpolantes

Esteja atento ao espaço necessário para os dados do sombreador. Empacote o máximo possível de informações em uma variável ou interpolante. Às vezes, as informações de duas variáveis podem ser empacotadas no espaço de memória de uma única variável.

Reduzir a complexidade do sombreador

Mantenha seus sombreadores pequenos e simples. Em geral, sombreadores com menos instruções são executados mais rapidamente do que sombreadores com mais instruções. Também é mais fácil depurar e otimizar sombreadores menores e menos complexos.

Guia de programação para HLSL

Guia de programação para HLSL