Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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.
- Scopri dove eseguire i calcoli shader
- Ignorare le istruzioni non necessarie
- Confezionare variabili e interpolazioni
- ridurre la complessità dello shader
- argomenti correlati
- argomenti correlati
Come determinare dove eseguire i calcoli shader
Il vertex shader esegue operazioni che includono il recupero dei vertici e l'esecuzione della trasformazione tramite 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 ciascun pixel di una determinata parte di geometria.
In genere, i pixel sono più numerosi dei vertici in una scena, quindi gli shader dei pixel vengono eseguiti più spesso rispetto agli shader dei vertici.
Quando si progettano algoritmi shader, tenere presente quanto segue:
- Eseguire calcoli sul vertex shader, se possibile. 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 quelle di mesh dense. Per le mesh dense, i calcoli per vertice possono produrre risultati visivamente indistinguabili 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 l'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. Tabella non completa. Piuttosto, è progettato per offrire 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 sono completamente annebbiati. | Ignorare il resto dello shader. |
I pesi della pelle sono zero. | Saltare le ossa. |
L'attenuazione della luce è zero. | Ignorare l'illuminazione. |
Termine lambertiano non positivo. | Ignorare l'illuminazione. |
Comprimere variabili e interpolanti
Tenere presente lo spazio necessario per i dati dello shader. Comprimere la maggior quantità possibile di informazioni in una variabile o in un interpolante. 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 gli shader piccoli e semplici. In generale, gli shader con un minor numero di istruzioni vengono eseguiti più rapidamente rispetto agli shader con più istruzioni. È anche più facile eseguire il debug e ottimizzare shader più piccoli e meno complessi.
Argomenti correlati
Guida per la programmazione HLSL
Argomenti correlati
-
Guida alla programmazione per HLSL