HLSL-shaders optimaliseren
In deze sectie worden strategieën voor algemeen gebruik beschreven die u kunt gebruiken om uw shaders te optimaliseren. U kunt deze strategieën toepassen op shaders die in elke taal zijn geschreven, op elk platform.
- Weet waar u shaderberekeningen moet uitvoeren
- Onnodige instructies overslaan
- Verpakkingsvariabelen en interpolanten
- de complexiteit van de shader verminderen
- verwante onderwerpen
- Verwante onderwerpen
Weet waar arceringsberekeningen uitgevoerd moeten worden
Hoekpunt-shaders voeren bewerkingen uit met het ophalen van hoekpunten en het uitvoeren van matrixtransformatie van hoekpuntgegevens. Meestal worden vertex shaders eenmaal per hoekpunt uitgevoerd.
Pixel Shaders voeren bewerkingen uit die het ophalen van patroongegevens omvatten en verlichtingsberekeningen uitvoeren. Doorgaans worden pixel-shaders eenmaal per pixel uitgevoerd voor een bepaald stuk geometrie.
Meestal zijn er meer pixels dan hoekpunten in een scène, zodat pixelshaders vaker worden uitgevoerd dan vertexshaders.
Houd rekening met het volgende wanneer u shader-algoritmen ontwerpt:
- Voer indien mogelijk berekeningen uit op de hoekpunt-shader. Een berekening die wordt uitgevoerd op een pixel-shader is veel duurder dan een berekening die wordt uitgevoerd op een hoekpunt-shader.
- Overweeg het gebruik van berekeningen per hoekpunt om de prestaties te verbeteren in situaties zoals dichte meshes. Voor dichte meshes kunnen per hoekpuntberekeningen resultaten opleveren die visueel niet kunnen worden onderscheiden van resultaten die worden geproduceerd met berekeningen per pixel.
Onnodige instructies overslaan
In HLSL biedt dynamische vertakking de mogelijkheid om het aantal instructies te beperken dat wordt uitgevoerd. Dynamische vertakking kan daarom helpen om de uitvoeringstijd van shader te versnellen. Als geometrie of pixels niet worden weergegeven, gebruikt u dynamische vertakking om de shader af te sluiten of instructies te beperken. Als een pixel bijvoorbeeld niet wordt verlicht, is er geen zin in het uitvoeren van het verlichtingsalgoritmen.
De volgende tabel bevat enkele gevallen waarin u voorwaarden in uw shader kunt testen en dynamische vertakkingen kunt gebruiken om onnodige instructies over te slaan. De tabel is niet uitgebreid. In plaats daarvan is het bedoeld om u ideeën te geven voor het optimaliseren van uw code.
Te controleren voorwaarde | Antwoord in de shader |
---|---|
Alfacontrole bepaalt dat een pixel niet wordt weergegeven. | Sla de rest van de arcering over. |
De pixel of geometrie is volledig in nevel gehuld. | Sla de rest van de arcering over. |
Huidgewichten zijn nul. | Sla botten over. |
Lichtattenuatie is nul. | Sla verlichting over |
Niet-positieve Lambertiaanse term. | Sla verlichting over. |
Variabelen en interpolanten inpakken
Houd rekening met de ruimte die nodig is voor shader-gegevens. Pak zoveel mogelijk informatie in een variabele of interpolant in. Soms kan de informatie van twee variabelen worden verpakt in de geheugenruimte van één variabele.
Complexiteit van shader verminderen
Houd uw shaders klein en eenvoudig. Over het algemeen worden shaders met minder instructies sneller uitgevoerd dan shaders met meer instructies. Het is ook eenvoudiger om fouten op te sporen en kleinere, minder complexe shaders te optimaliseren.
Verwante onderwerpen
Programmeerhandleiding voor HLSL-
Verwante onderwerpen