Partilhar via


Otimizando sombreadores HLSL

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

Saiba onde realizar cálculos de sombreamento

Os sombreadores de vértice executam operações que incluem a busca de vértices e a transformação matricial de dados de vértice. Normalmente, os 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 realização de cálculos de iluminação. Normalmente, os sombreadores de pixels são executados uma vez por pixel para uma determinada parte da geometria.

Normalmente, numa cena, os píxeis superam os vértices, de modo que os sombreadores de píxel são executados com mais frequência do que os sombreadores de vértice.

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

  • Execute cálculos no sombreador de vértice, se possível. Um cálculo que é executado em um sombreador de pixel é muito mais caro do que um cálculo que é executado em um sombreador de vértice.
  • Considere o uso de cálculos por vértice para melhorar o desempenho em situações como malhas densas. Para malhas densas, os cálculos por vértice podem produzir resultados visualmente indistinguíveis dos 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 que são 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 para limitar as instruções. Por exemplo, se um pixel não estiver aceso, não faz sentido executar o algoritmo de iluminação.

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

Condição a verificar Resposta no Shader
A verificação alfa determina que um pixel não será visto. Ignore o resto do sombreador.
O pixel ou geometria é totalmente embaçado. Ignore o resto do sombreador.
Os pesos da pele são zero. Pule ossos.
A atenuação da luz é zero. Pule a iluminação.
Termo Lambertiano não positivo. Pule a iluminação.

 

Agrupar Variáveis e Interpolantes

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

Reduza a complexidade do sombreamento

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