Ottimizzazione degli shader HLSL
Questa sezione descrive le strategie per utilizzo generico che è possibile usare per ottimizzare gli shader. È possibile applicare queste strategie agli shader scritti in qualsiasi linguaggio, in qualsiasi piattaforma.
- Sapere dove eseguire calcoli shader
- Ignorare le istruzioni non necessarie
- Comprimere variabili e interpolanti
- Ridurre la complessità dello shader
- Argomenti correlati
- Argomenti correlati
Sapere dove eseguire calcoli shader
I vertex shader eseguono operazioni che includono il recupero dei vertici e l'esecuzione della trasformazione matrice dei dati dei vertici. In genere, i vertex shader vengono eseguiti una volta per vertice.
I pixel shader eseguono operazioni che includono il recupero dei dati delle trame e l'esecuzione di calcoli di illuminazione. In genere, i pixel shader vengono eseguiti una volta per pixel per un determinato pezzo di geometria.
In genere, i vertici in ordine di numero di pixel in una scena, quindi gli shader pixel vengono eseguiti più spesso rispetto ai vertex shader.
Quando si progettano algoritmi shader, tenere presente quanto segue:
- Se possibile, eseguire calcoli sul vertex shader. Un calcolo eseguito su un pixel shader è molto più costoso di un calcolo eseguito su un vertex shader.
- Prendere in considerazione l'uso di calcoli per vertice per migliorare le prestazioni in situazioni come mesh dense. Per le mesh dense, i calcoli per vertice possono produrre risultati visivamente indistingubili dai risultati prodotti con calcoli per pixel.
Ignorare le istruzioni non necessarie
In HLSL, la diramazione dinamica consente di limitare il numero di istruzioni eseguite. Di conseguenza, la diramazione dinamica consente di velocizzare il tempo di esecuzione dello shader. Se la geometria o i pixel non vengono visualizzati, usare la diramazione dinamica per uscire dallo shader o per limitare le istruzioni. Ad esempio, se un pixel non è acceso, non c'è alcun punto nell'esecuzione dell'algoritmo di illuminazione.
La tabella seguente elenca alcuni casi in cui è possibile testare le condizioni nello shader e usare la diramazione dinamica per ignorare le istruzioni non necessarie. La tabella non è completa. È invece destinato a fornire idee per ottimizzare il codice.
Condizione da controllare | Risposta nello shader |
---|---|
Il controllo alfa determina che un pixel non verrà visualizzato. | Ignorare il resto dello shader. |
Il pixel o la geometria è completamente nebbia. | Ignorare il resto dello shader. |
I pesi della pelle sono zero. | Salta le ossa. |
L'attenuazione della luce è zero. | Saltare l'illuminazione. |
Termine lambertiano non positivo. | Saltare l'illuminazione. |
Comprimere variabili e interpolanti
Tenere presente lo spazio necessario per i dati dello shader. Comprimere la maggior quantità di informazioni in una variabile o interpolante il più possibile. In alcuni casi, le informazioni di due variabili possono essere compresse nello spazio di memoria di una singola variabile.
Ridurre la complessità dello shader
Mantieni i tuoi shader piccoli e semplici. In generale, gli shader con un minor numero di istruzioni vengono eseguiti più rapidamente rispetto agli shader con altre istruzioni. È anche più semplice eseguire il debug e ottimizzare shader più piccoli e meno complessi.
Argomenti correlati
Guida alla programmazione per HLSL
Argomenti correlati