Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tej sekcji opisano strategie ogólnego przeznaczenia, których można użyć do optymalizacji cieniowania. Możesz zastosować te strategie do shaderów napisanych w dowolnym języku, na dowolnej platformie.
- Wiedzieć, gdzie należy wykonywać obliczenia shaderów
- pomijanie niepotrzebnych instrukcji
- Pakowanie Zmiennych i Interpolantów
- zmniejsz złożoność cieniowania
- tematy pokrewne
- Tematy pokrewne
Dowiedz się, gdzie wykonywać obliczenia cieniowania
Shaderzy wierzchołków wykonują operacje obejmujące pobieranie wierzchołków i wykonywanie transformacji macierzy danych o wierzchołkach. Zazwyczaj cieniowania wierzchołków są wykonywane raz na wierzchołek.
Cieniowniki pikseli wykonują operacje, które obejmują pobieranie danych tekstury i wykonywanie obliczeń oświetlenia. Zazwyczaj cieniowania pikseli są wykonywane raz na piksel dla danego fragmentu geometrii.
Zazwyczaj piksele przewyższają wierzchołki w scenie, więc cieniowania pikseli są wykonywane częściej niż cieniowania wierzchołków.
Podczas projektowania algorytmów cieniowania należy pamiętać o następujących kwestiach:
- Jeśli to możliwe, wykonaj obliczenia na shaderze wierzchołków. Obliczenie wykonywane na shaderze pikseli jest znacznie bardziej kosztowne niż obliczenie wykonywane na shaderze wierzchołków.
- Rozważ użycie obliczeń na poziomie wierzchołków w celu zwiększenia wydajności w sytuacjach, takich jak gęste siatki. W przypadku gęstych siatek obliczenia na wierzchołki mogą generować wyniki, które są wizualnie nie do odróżnienia od wyników generowanych za pomocą obliczeń na piksel.
Pomiń niepotrzebne instrukcje
W systemie HLSL dynamiczne rozgałęzianie umożliwia ograniczenie liczby wykonywanych instrukcji. W związku z tym dynamiczne rozgałęzianie może pomóc przyspieszyć czas wykonywania cieniowania. Jeśli geometria lub piksele nie są wyświetlane, użyj dynamicznego rozgałęziania, aby zakończyć cieniowanie lub ograniczyć instrukcje. Jeśli na przykład piksel nie jest oświetlony, nie ma sensu wykonywać algorytmu oświetlenia.
W poniższej tabeli wymieniono niektóre przypadki, w których można przetestować warunki w cieniowaniu i użyć dynamicznego rozgałęziania, aby pominąć niepotrzebne instrukcje. Tabela nie jest kompleksowa. Zamiast tego ma ona na celu przekazanie pomysłów na optymalizację kodu.
| Warunek do sprawdzenia | Odpowiedź w shaderze |
|---|---|
| Sprawdzanie alfa określa, że piksel nie będzie widoczny. | Pomiń resztę cieniowania. |
| Piksele lub geometria są całkowicie zamglone. | Pomiń resztę cieniowania. |
| Wagi skóry są zerowe. | Pomiń kości. |
| Zatłoczenie światła jest zerowe. | Pomiń oświetlenie. |
| Niepozytywny termin Lambertowski. | Pomiń oświetlenie. |
Pakowanie zmiennych i interpolantów
Należy pamiętać o przestrzeni wymaganej dla danych cieniowania. Spakuj jak najwięcej informacji do zmiennej lub interpolanta. Czasami informacje z dwóch zmiennych mogą być pakowane w przestrzeń pamięci pojedynczej zmiennej.
Zmniejsz złożoność cieniowania
Zachowaj cieniowania małe i proste. Ogólnie rzecz biorąc, cieniowania z mniejszą liczbą instrukcji są wykonywane szybciej niż cieniowania z większą liczbą instrukcji. Również łatwiej jest debugować i optymalizować mniejsze, mniej złożone shadery.
Tematy pokrewne
Przewodnik programowania dla HLSL
Tematy pokrewne
-
Przewodnik programowania dla HLSL