Etap cieniowania pikseli
Etap cieniowania pikseli (PS) umożliwia zaawansowane techniki cieniowania, takie jak oświetlenie na piksel i przetwarzanie końcowe. Cieniowanie pikseli to program, który łączy zmienne stałe, dane tekstury, wartości interpolowane na wierzchołki i inne dane w celu wygenerowania danych wyjściowych na piksel. Etap rasteryzatora wywołuje cieniowanie pikseli raz dla każdego piksela objętego elementem pierwotnym, jednak można określić null cieniowania, aby uniknąć uruchamiania cieniowania.
Cieniowanie pikseli
Podczas wieloprzykładowego próbkowania tekstury cieniowanie pikseli jest wywoływane raz na piksel, podczas gdy test głębokości/wzornika występuje dla każdego pokrytego wieloprzykładu. Próbki, które przechodzą test głębokości/wzornika, są aktualizowane przy użyciu koloru wyjściowego cieniowania pikseli.
Funkcje wewnętrzne cieniowania pikseli tworzą lub używają pochodnych ilości w odniesieniu do przestrzeni ekranu x i y. Najczęstszym zastosowaniem pochodnych jest obliczanie obliczeń na poziomie szczegółów na potrzeby próbkowania tekstur i w przypadku filtrowania anisotropowego, wybierania próbek wzdłuż osi anizotropii. Zazwyczaj implementacja sprzętowa uruchamia cieniowanie pikseli na wielu pikselach (na przykład na siatce 2x2), dzięki czemu pochodne ilości obliczone w cieniatorze pikseli mogą być dość przybliżone jako różnice wartości w tym samym punkcie wykonywania w sąsiednich pikselach.
Wejścia
Po skonfigurowaniu potoku bez cieniowania geometrii cieniowanie pikseli jest ograniczone do 16, 32-bitowych, 4-składnikowych danych wejściowych. W przeciwnym razie cieniowanie pikseli może potrwać do 32, 32-bitowych, 4-składnikowych danych wejściowych.
Dane wejściowe cieniowania pikseli obejmują atrybuty wierzchołka (które można interpolować z korektą perspektywy lub bez nich) lub mogą być traktowane jako stałe pierwotne. Dane wejściowe cieniowania pikseli są interpolowane z atrybutów wierzchołka rasteryzowanego elementu pierwotnego na podstawie zadeklarowanego trybu interpolacji. Jeśli element pierwotny zostanie obcięty przed rasteryzacją, tryb interpolacji zostanie również uznany podczas procesu wycinania.
Atrybuty wierzchołka są interpolowane (lub oceniane) w lokalizacjach centrum cieniowania pikseli. Tryby interpolacji atrybutów cieniowania pikseli są deklarowane w deklaracji rejestru wejściowego na podstawie elementu w argumentu lub struktury wejściowej . Atrybuty mogą być interpolowane liniowo lub z próbkowaniem centroid . Ocena Centroid jest odpowiednia tylko podczas wieloamplingu w celu pokrycia przypadków, w których piksel jest objęty elementem pierwotnym, ale środek piksela może nie być; centroid ocena występuje jak najbliżej środka piksela (nieobjętego).
Dane wejściowe mogą być również deklarowane za pomocą semantycznego wartości systemowej, który oznacza parametr używany przez inne etapy potoku. Na przykład pozycja pikseli powinna być oznaczona semantyczną SV_Position. Etap IA może wygenerować jeden skalar dla cieniowania pikseli (przy użyciu SV_PrimitiveID); etap rasteryzatora może również wygenerować jeden skalar dla cieniowania pikseli (przy użyciu SV_IsFrontFace).
Wyjść
Cieniowanie pikseli może wydawać maksymalnie 8, 32-bitowe, 4-składowe kolory lub bez koloru, jeśli piksel zostanie odrzucony. Składniki rejestru danych wyjściowych cieniowania pikseli muszą być zadeklarowane przed ich używaniem; każdy rejestr jest dozwolony jako odrębna maska zapisu wyjściowego.
Użyj stanu włączania głębi zapisu (na etapie łączenia danych wyjściowych), aby kontrolować, czy dane głębokości są zapisywane w buforze głębokości (lub użyj instrukcji odrzucania, aby odrzucić dane dla tego piksela). Cieniowanie pikseli może również wyprowadzać opcjonalny 32-bitowy, 1-składnikowy, zmiennoprzecinkowy, wartość głębokości do testowania głębokości (przy użyciu semantyki SV_Depth). Wartość głębokości to dane wyjściowe w rejestrze oDepth i zamienia wartość interpolowanej głębokości na potrzeby testowania głębokości (przy założeniu, że włączono testowanie głębokości). Nie ma możliwości dynamicznej zmiany między użyciem głębokości funkcji stałej lub cieniowania oDepth.
Cieniowanie pikseli nie może wygenerować wartości wzornika.
Tematy pokrewne
-
etapy potoku (Direct3D 10)