Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
DirectX. Rendering
w czasie rzeczywistym
Autor: Kelly Dempski
Tumaczenie: Radosaw Meryk (wstp, rozdz. 1 25,
37 40, dod. A), Krzysztof Jurczyk (rozdz. 26 36)
ISBN: 83-7361-120-7
Tytu oryginau: Real-Time Rendering
Tricks and Techniques in DirectX
Format: B5, stron: 688
W cigu kilku ostatnich lat przetwarzanie grafiki w czasie rzeczywistym osigno stopie
najwyszego zaawansowania. Obecnie powszechnie dostpne s procesory przetwarzania
grafiki, ktre dorwnuj szybkoci i moliwociami najdroszym stacjom graficznym
sprzed zaledwie kilku lat.
Jeeli jeste gotw na pogbienie swojej wiedzy na temat programowania grafiki, signij
po t ksik. Opisuje ona zaawansowane zagadnienia w taki sposb, e nawet
pocztkujcy przyswajaj je atwo. Czytelnicy, ktrzy bd studiowa t ksik od
pocztku i dokadnie j przeanalizuj, nie powinni mie problemu z nauczeniem si coraz
bardziej skomplikowanych technik. Czytelnicy zaawansowani mog wykorzystywa t
ksik jako uyteczne rdo informacji, przeskakujc od rozdziau do rozdziau, wtedy
kiedy maj potrzeb nauczenia si lub dokadniejszego poznania wybranych problemw.
Ksika zawiera:
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treci
O Autorze ..............................................................................................15
Od wydawcy serii...................................................................................17
Sowo wstpne ......................................................................................19
Wstp ...................................................................................................21
Cz I
Podstawy ........................................................................... 23
Cz II
Spis treci
Spis treci
Cz V
10
Spis treci
11
12
Rozdzia 32. Implementacja technik per vertex jako techniki per pixel......................519
Odbicie per pixel.....................................................................................................................519
Korzystanie z texm3x3pad......................................................................................................520
Vertex shader odwzorowania nierwnoci z odbiciem wiata ..............................................522
Pixel shader odwzorowania nierwnoci z odbiciem wiata.................................................524
Aplikacja odwzorowania nierwnoci z odbiciem wiata .....................................................525
Cieniowanie kreskwkowe per pixel ......................................................................................530
Vertex shader cieniowania kreskwkowego per pixel............................................................530
Pixel shader cieniowania kreskwkowego per pixel ..............................................................532
Aplikacja cieniowania kreskwkowego per pixel ..................................................................534
Podsumowanie ........................................................................................................................536
Spis treci
13
Solaryzacja obrazu............................................................................................................602
Regulacja kontrastu sceny ................................................................................................603
Efekt sepii .........................................................................................................................605
Wykorzystywanie krzywych kolorw do modyfikacji kolorw.............................................607
Przetwarzanie obrazu z wykorzystaniem jder splotu ............................................................611
Wydajno...............................................................................................................................616
Podsumowanie ........................................................................................................................617
Zakoczenie........................................................................................675
Skorowidz ...........................................................................................677
Rozdzia 16.
260
Cz IV
Mechanizmy shader
Rysunek 16.1.
Miejsce mechanizmu
pixel shader
w potoku
inne spojrzenie na dalsze etapy renderowania pokazane na rysunku 5.1. Jak widzimy,
shader ma wpyw na kolorowanie danego prymitywu, ale przetworzony przez shader
piksel, zanim trafi na ekran, nadal musi by poddany testowi alfa, gbi i matrycy.
Pixel shader przetwarza kady piksel renderowanego prymitywu, ale niekoniecznie kady
piksel ekranu czy okna wyjciowego. Oznacza to, e pixel shader ma wpyw na wygld
okrelonego trjkta, czy te obiektu. Pixel shader zajmuje miejsce stanw czenia tekstury i pozwala na dokadniejsze zarzdzanie przezroczystoci i kolorem dowolnego
wykrelanego obiektu. Jak przekonamy si w dalszych rozdziaach, ma to swoje implikacje dotyczce owietlenia, cieniowania oraz wielu innych operacji na kolorach.
Prawdopodobnie jedn z najwikszych zalet mechanizmw pixel shader jest to, e upraszczaj one przedstawianie zoonych operacji czenia tekstur. Stany faz tekstur wymagaj
ustawiania operacji na teksturach, argumentw, wspczynnikw czenia oraz kilku innych
stanw. Stany te pozostaj w mocy, dopki nie zostan jawnie zmienione. W wyniku
tego skadnia jest czasami niezgrabna, a czasami trudno kontrolowa wszystkie ustawienia. Mechanizmy pixel shader zamieniaj wywoania metody
seri stosunkowo prostych instrukcji arytmetycznych z przejrzycie zdefiniowanymi argumentami. Kiedy ju zapoznamy si z mechanizmami pixel shader, z pewnoci oka si
one bardzo przydatne.
Rozdzia 16.
261
Wejcia, wyjcia
oraz operacje realizowane
przez mechanizmy pixel shader
Tak jak w przypadku mechanizmw vertex shader, dziaania wykonywane przez mechanizm pixel shader s uzalenione od zbioru danych wejciowych, zbioru instrukcji
oraz rejestrw sucych do przechowywania wynikw. Architektur mechanizmu pixel
shader pokazano na rysunku 16.2.
Rysunek 16.2.
Architektura
mechanizmu
pixel shader
Rejestry kolorw
Rejestry kolorw
oraz
to najprostsze rejestry wejciowe. Kady z nich posiada
cztery wartoci skadowych koloru, ktre odpowiadaj rejestrom wyjciowym
oraz
mechanizmu vertex shader. Mona je wykorzysta do przekazywania danych o kolorach, wsprzdnych tekstury lub nawet wektorach, ktre maj wpyw na czenie lub
kolorowanie wynikowych pikseli.
262
Cz IV
Mechanizmy shader
Rejestry staych
Stae mechanizmu pixel shader maj dokadnie tak sam posta i dziaanie jak stae
mechanizmw vertex shader poza tym, e ich wartoci powinny mieci si w zakresie
od 1,0 do 1,0. W wielu przypadkach spotkamy si z definiowaniem staych wewntrz
mechanizmu pixel shader. W wikszoci technik zwizanych z mechanizmami pixel shader
wartoci stae s rzeczywicie stae, co oznacza, e nigdy si nie zmieniaj. Zmodyfikowane wartoci mona przekaza do mechanizmu pixel shader za pomoc mechanizmu
vertex shader. Jeli jest taka potrzeba, to wartoci staych mona take przekaza do mechanizmu pixel shader za pomoc wywoa API.
Rejestry tekstur
Rejestry tekstur dostarczaj do mechanizmu pixel shader informacji o teksturach. Z technicznego punktu widzenia rejestry tekstur zawieraj wsprzdne tekstur, ale w wikszoci
przypadkw informacje te s natychmiast zamieniane na dane o kolorach w miar pobierania danych o teksturze. W shaderach wersji od 1.1 do 1.4 rejestry tekstur mog by
odczytywane jako wsprzdne, a nastpnie zapisywane danymi o kolorach. W wersji 1.4.
mog by jedynie odczytywane i s wykorzystywane jako parametry suce do zaadowania danych o kolorach do innych rejestrw. Dokadne przeznaczenie tych rejestrw
stanie si bardziej jasne po omwieniu instrukcji dostpnych dla shadera. Liczba rejestrw
tekstur zaley od liczby faz tekstur.
Rozdzia 16.
263
Rysunek 16.3.
Zwyke i warunkowe
odczytywanie tekstur
Instrukcje dostpne
w mechanizmach pixel shader
Instrukcje pixel shadera dziaaj na wartociach rejestrw wejciowych i tymczasowych
w podobny sposb jak instrukcje vertex shadera. Istnieje jednak kilka istotnych rnic.
Pierwsza rnica polega na tym, e pixel shadery obsuguj znacznie mniejsz liczb
instrukcji. Ogranicza to moliwoci shaderw, ale w praktyce jest sensowne, ze wzgldu
na czstotliwo zastosowania mechanizmu pixel shader. Pomijajc moliwoci sprztu,
pisanie dugich shaderw, ktre miayby przetwarza miliony pikseli w pojedynczej ramce,
wydaje si bezcelowe. Inna rnica polega na zastosowaniu modyfikatorw instrukcji.
Modyfikatory instrukcji stanowi cenny dodatek do zestawu instrukcji shadera. Modyfikatory omwimy w nastpnym podrozdziale.
Niewygodne jest to, e rne wersje mechanizmw pixel shader w pewnym stopniu obsuguj rny zestaw instrukcji. W objanieniach zamieszczonych poniej dla kadej instrukcji wymieniam zestaw wersji shaderw, ktre j obsuguj. W przypadku braku takiej
listy bdziemy mogli przyj, e instrukcja jest obsugiwana we wszystkich dostpnych
obecnie wersjach.
Istniej trzy generalne grupy instrukcji. Nazwaem je instrukcjami konfiguracji, instrukcjami
arytmetycznymi oraz instrukcjami adresowania tekstur. Kategoria instrukcji konfiguracyjnych stanowi w pewnym sensie rodzaj kategorii dodatkowej dla trzech instrukcji, ktre
nie pasuj do pozostaych kategorii. Instrukcje konfiguracyjne wymieniono w tabeli 16.1.
264
Cz IV
Mechanizmy shader
Opis
Instrukcja definiuje warto staej jako wektor skadajcy si z czterech skadowych.
Instrukcja ta przydaje si do ustawiania wartoci, ktre nie zmieniaj si w cigu caego
czasu istnienia shadera.
Ta instrukcja jest unikatowa dla wersji 1.4. Wersja 1.4 pozwala na rozdzielenie pixel shadera
na dwie rne fazy dziaania, co w rezultacie pozwala na podwojenie liczby instrukcji
dozwolonych do wykorzystania wewntrz mechanizmu pixel shader. Wartoci kolorw
ustawione podczas jednej z faz shadera przechodz do fazy drugiej, ale wartoci kanau alfa
nie musz by takie same. Jeeli shader nie zawiera instrukcji , urzdzenie uruchamia
shader, tak jakby znajdowa si w ostatniej fazie (tylko wersja 1.4).
W tabeli 16.2 zestawiono instrukcje arytmetyczne. Wikszo spord tych instrukcji jest
przynajmniej czciowo obsugiwana we wszystkich wersjach shaderw. Naley zachowa ostrono, gdy niektre z nich albo nie s obsugiwane, albo zuywaj wicej ni
jeden cykl.
Istniej pewne ograniczenia dotyczce tego, ktre instrukcje wolno czy w pary. Wedug
niepisanej reguy, nie naley grupowa instrukcji o najwikszych ograniczeniach. Bez
przeszkd mona czy w pary proste operacje arytmetyczne.
Rozdzia 16.
265
Opis
Dodaje jedn warto rejestru do drugiej i umieszcza wynik w rejestrze
wynikowym.
Odejmuje jedn warto rejestru od drugiej i umieszcza wynik w rejestrze
wynikowym. Pixel shadery obsuguj take negacj rejestrw, a zatem
mona wykorzysta instrukcj z zanegowanym parametrem wejciowym.
Instrukcja
wykonuje liniow interpolacj wartoci zawartych
w parametrach i na podstawie parametru .
Przykadowo, pojedyncza warto wyniku jest obliczana jako
!
"
# !
" ! $
##.
%
266
Cz IV
Mechanizmy shader
Format
Opis
&'
&' &!#
&'
&'
!# &!#
&'
&'
&!#
&'
&'
&!#
&'
jest w pewnym sensie instrukcj towarzyszc instrukcji &'
i instrukcj analogiczn do &'
. Jeeli shader wywoa t instrukcj
zamiast &', dane opisu wsprzdnych tekstury bd zaadowane
zamiast wartoci opisujcej kolor. Instrukcja moe by przydatna
w tych technikach, gdzie vertex shader przekazuje dane do pixel
shadera poprzez wsprzdne tekstury (1.1, 1.2, 1.3).
&'
&'
&!#
&!#
&'
&'
&!#
&!#
&'
&'
&!#
&!#
&'
&' &!#
Rozdzia 16.
267
Tabela 16.3. Instrukcje adresowania tekstur dostpne w mechanizmach pixel shader cig dalszy
Instrukcja
Format
Opis
&''
&''&'
&''
&'' &!#
&!#
&''&'
&''&' &!#
&!#
&''
&''
&'' &!#
&!#
268
Cz IV
Mechanizmy shader
Tabela 16.3. Instrukcje adresowania tekstur dostpne w mechanizmach pixel shader cig dalszy
Instrukcja
Format
Opis
&'
&'
&'&
&'&
!#
&'
&'&'
&'&' &!#
&!#
Kolejny fragment kodu wykorzystuje pierwsze dwie wsprzdne tekstury z fazy 0 jako
wsprzdne tekstury w fazie 1. Tekstura fazy 1. jest prbkowana, a uzyskany w wyniku
kolor jest zapisywany do rejestru . Kolejne instrukcje korzystajce z rejestru bd
wykorzystyway warto koloru z prbki tekstury fazy 1.
&'
& &
Rozdzia 16.
269
W dalszych rozdziaach niektre z opisanych wczeniej instrukcji zostan zaprezentowane w praktycznym dziaaniu. Kiedy zobaczymy, jak si ich uywa, nabior dla nas
wikszego sensu.
Moliwoci przetwarzania nie s ograniczone jedynie do zestawu instrukcji. Podobnie
jak w przypadku mechanizmw vertex shader, pixel shadery umoliwiaj zastosowanie
modyfikatorw, ktre daj wiele moliwoci.
Modyfikatory dostpne
dla mechanizmw pixel shader
W pixel shaderach mona stosowa niektre spord dodatkowych funkcji dostpnych
dla vertex shaderw, takich jak negacja czy maski zapisu, ale istnieje take zbir modyfikatorw instrukcji, ktre gwarantuj dodatkowe moliwoci. Dostpne modyfikatory
dla rejestrw rdowych zestawiono w tabeli 16.4.
Tabela 16.4. Modyfikatory rejestrw rdowych dostpne dla pixel shaderw
Modyfikator Skadnia
Opis
Przesunicie
*
Odwrcenie
$
Negacja
$
Podwojenie
*'
Skala ze
znakiem
*'
W pixel shaderach jest take dostpna ograniczona forma operacji mieszania. Przed
wykonaniem instrukcji moemy dokona replikacji jednego kanau na wszystkie kolory.
Podobnie jak w przypadku operacji mieszania dostpnej w vertex shaderach odpowiednie rejestry danych nie ulegaj zmianie. Odpowiednie selektory rejestrw rdowych
zestawiono w tabeli 16.5.
Mona take stosowa maski zapisu. We wszystkich wersjach shaderw mona wybra,
czy bdziemy zapisywa wszystkie kanay, tylko kana alfa, czy tylko kolory. W wersji
1.4 do zapisu mona wybra dowolne kanay. Skadnia masek zapisu jest taka sama jak
w przypadku mechanizmw vertex shader, z t rnic, e zamiast etykiet .xyzw stosujemy etykiety .rgba, co pokazano w tabeli 16.5.
Ostatni grup modyfikatorw s modyfikatory instrukcji. O dziaaniu tych modyfikatorw
moemy myle jako o operacji wykonywanej przed ustawieniem wartoci wyniku. Tego
typu modyfikatory opisano w tabeli 16.6. W przykadach posuono si instrukcj ,
ale modyfikatorw tych mona uy dla wikszoci instrukcji arytmetycznych.
270
Cz IV
Mechanizmy shader
Skadnia Opis
Replikacja kanau
alfa
Replikacja kanau
niebieskiego
Replikacja kanau
zielonego
Replikacja kanau
czerwonego
Skadnia Opis
Mnoenie przez 2
*'
Mnoenie przez 4
*'
Mnoenie przez 8
*'+
Dzielenie przez 2
*
Dzielenie przez 4
*
Dzielenie przez 8
*+
Nasycenie
*&
Rozdzia 16.
271
2 (etap 2)
Rejestr tymczasowy
!#
Pixel shadery s ograniczone przez sprzt, na ktrym dziaaj. Niektre karty by moe
w ogle nie bd obsugiway adnej z wersji pixel shader. Inaczej ni w przypadku mechanizmw vertex shader, dla pixel shaderw nie ma akceptowalnej alternatywy programowej. Jeeli sprzt ich nie obsuguje, wydajno jest przeraliwie niska. Urzdzenie
referencyjne moe suy do testowania kodu, ale nie do rzeczywistego wykorzystania.
Sprawdzanie dostpnoci
mechanizmw pixel shader
Podobnie jak w przypadku mechanizmw vertex shader, mona sprawdzi, czy nasz
sprzt obsuguje pixel shadery, poprzez wywoanie metody
. Struktura
zawiera pole typu ! "#
. Warto zawiera zarwno numer
wersji gwnej, jak numery wersji pomocniczych. Najlepiej analizowa znaczenie tej
wartoci za pomoc makra "$#%!& ':
,,-./(+ 012
*3,,$45&,-!,,.,./)67*,68.9:) ,,,6;)</6*=.: >01#2
!01/'(
;
,,/(*;67(?@A!#
B
!8.?:6,!9&3
1/
&.3@!*3& ,,,6;)</6*=.:
,,-76.)6*=.7,.76*;67)6C/7@-6((?A5###
&
8.:(62
D
272
Cz IV
Mechanizmy shader
Rozdzia 16.
273
Rysunek 16.4.
Bardzo prosta
aplikacja
wykorzystujca
pixel shader
Proste owietlenie
za pomoc mechanizmu vertex shader
Wykonywanie oblicze owietlenia za pomoc vertex shaderw szczegowo opisano
w rozdziale 24., zatem w tym rozdziale nie bd zagbia si w teori. Pokazany tu przykad to niezwykle prosty vertex shader obliczajcy iloczyn skalarny wektora owietlenia
oraz wektora normalnego wierzchoka. W mojej implementacji vertex shader jest wykorzystany nieco na si, jedynie po to, aby pokaza, w jaki sposb naley przekazywa
dane do pixel shadera,. W kolejnych rozdziaach zaprezentuj lepsze przykady, natomiast
przykad pokazany w tym rozdziale ma na celu pokazanie moliwoci wzajemnej interakcji pomidzy shaderami. Poniszy kod shadera pochodzi z pliku PixelSetup.vsh:
Obliczamy iloczyn skalarny normalnej wierzchoka oraz wektora owietlenia dla wiata kierunkowego. Warto iloczynu skalarnego to kosinus kta pomidzy dwoma wektorami. W tym kontekcie iloczyn skalarny wykorzystywany jest do okrelenia stopnia
odbicia wiata od powierzchni w prostym modelu owietlenia rozpraszajcego. Wektor
owietlenia przekazywany jest do vertex shadera jako .. Negujemy go, aby wykona
przeksztacenie na wektor wierzchoek owietlenie. Wynik zapisywany jest do rejestru koloru zwierciadlanego
. Temu rejestrowi w mechanizmie pixel shader odpowiada wejciowy rejestr koloru
:
274
Cz IV
Mechanizmy shader
Rozdzia 16.
275
Rysunek 16.6.
Kanay koloru i alfa
dla tekstury
innych celw. W naszym przypadku wykorzystuj kana alfa do przechowywania 8-bitowego wspczynnika skalowania dla wartoci owietlenia kierunkowego. Poniszy kod
shadera znajduje si w pliku Simple.psh. Pierwszy wiersz informuje asembler shadera,
ktr wersj shadera wykorzystujemy:
W pierwszym wierszu adujemy warto tekstury do pixel shadera. Kod ten moemy
interpretowa nastpujco: warto wsprzdnej tekstury w rejestrze wykorzystujemy
jako dan wejciow. Ten sam rejestr wykorzystujemy take do umieszczenia w nim
wartoci koloru wybranego piksela na podstawie wsprzdnych tekstury interpolowanych z wierzchokw:
&' &
276
Cz IV
Mechanizmy shader
Shadery s w zasadzie dosy proste. Pozostaje opracowanie aplikacji, ktra czy wszystkie opisane elementy w jedn cao.
Prosta aplikacja
z wykorzystaniem pixel shadera
Wikszo interesujcych dziaa naszej aplikacji wykonuj zaprezentowane wczeniej
shadery. Gwnym zadaniem aplikacji jest dostarczenie do shaderw danych oraz zapewnienie utworzenia waciwych shaderw i uaktywnienie ich w odpowiednim czasie.
W zaprezentowanym niej kodzie pokazuj tylko nowe funkcje. Peny kod rdowy
znajduje si na pycie CD (\Kod\Rozdzial16).
Najpierw rozbudowuj funkcj "
12
3 o sprawdzenie dostpnoci pixel shaderw. Jeeli urzdzenie sprztowe nie obsuguje pixel shaderw, aplikacja siga do
urzdzenia referencyjnego. Jest to dobre do testowania, ale w rzeczywistych aplikacjach
lepiej wyczy technik ni wykorzystywa urzdzenie referencyjne:
H@@: I.)EE/J3!#
B
Rozdzia 16.
277
I
9
11!#2
!8.?:6,!9&3
1H
/111!###
&
8.:(62
Metoda ,3
6 tworzy zarwno mechanizm vertex shader, jak i pixel shader.
Jeeli wykonanie tej metody nie powiedzie si, bdzie to wskazywao na moliwy bd
syntaktyczny w kodzie shadera. Jeeli shader jest poprawny, wykonanie funkcji zawsze
powinno zakoczy si pomylnie, ze wzgldu na alternatywne wykorzystanie urzdzenia
referencyjnego. Jeeli zdezaktywujemy wykorzystanie urzdzenia referencyjnego, wywoanie funkcji moe si nie powie w przypadku, gdy sprzt nie obsuguje shaderw:
!8.?:6,!9&3
1(
!###
&
8.:(62
Ponisza tekstura to ta, ktr pokazano na rysunku 16.5. Zarwno kolor, jak i dane dotyczce odbicia zapisano w pojedynczej teksturze:
!8.?:6,!,,C-
&)'&
8
8!*39
11,,
KLLLL)K
>*3)&
###
&
8.:(62
&
)7962
D
Zwalniamy bufor shadera, aby mona go byo wykorzysta ponownie do utworzenia pixel
shadera. Zwalnianie bufora bdw nie jest potrzebne, poniewa jeeli jestemy w tym
miejscu, oznacza to, e bufor bdw nie zosta utworzony:
3H
(
$47!#2
Wywoanie wykorzystane do utworzenia pixel shadera jest dokadnie takie same, jak wywoanie do utworzenia vertex shadera. Asembler wykorzystuje pierwsz instrukcj opisujc wersj w celu uzyskania informacji o typie shadera oraz o sposobie jego asemblacji:
278
Cz IV
Mechanizmy shader
!8.?:6,!,,C.(
8
8!KLLLL
LL(K
A9:: >3H
(
>3H(
###
&
6*8.?:2
Teraz trzeba ustawi vertex shader. W naszej prostej aplikacji moglimy ustawi vertex
shader w czasie tworzenia shadera. W naszym przykadzie jednak umieszczam t instrukcj wewntrz funkcji renderujcej dla lepszego zilustrowania wykonywanych dziaa:
*39
11,,$4(&;
&'(
!*(
I
#2
Poniszy kod wykonuje animacj kierunku owietlenia. W obliczeniach przyjto, e owietlenie jest zawsze skierowane w d, niezalenie od wartoci animacji. Po zdefiniowaniu
kierunku owietlenia jest on przekazywany do rejestru . shadera. W rozdziale 24. dowiemy si, e takie przyjmowanie sposobu oddziaywania wektora owietlenia na przeksztacenia obiektu jest naiwne (i zazwyczaj niepoprawne), ale dla naszej prostej aplikacji
wystarczy. Jeeli zdecydujemy si na modyfikacj macierzy wiata, uzyskamy nieprawidowe wyniki, ale w tym kontekcie nie jest to takie wane. Moje sowa nabior wikszego
sensu w rozdziale 24:
Rozdzia 16.
279
Ustawiamy tekstur w fazie 0. W tym prostym przypadku tekstur mona byo ustawi
podczas jej adowania, ale dla jasnoci ustawiam jej warto w tym miejscu:
*39
11,,$4(&)'&
! *3)&
#2
Ustawiamy pixel shader. Ten shader wymaga przekazania kilku tekstur wejciowych oraz
wartoci z vertex shadera. Mona by byo wykorzysta pixel shader z innym vertex shaderem i tekstur, ale wyniki mogyby by nieprzewidywalne i prawdopodobnie bdne:
*39
11,,$4(&/'(
!*/
&/'(
#2
Zazwyczaj, jeeli nie wykorzystujemy pixel shadera, dobrym pomysem jest jego wyczenie. W tym przypadku cay czas korzystamy z pixel shadera, ale dodaem ponisz
instrukcj po to, aby podkreli to, jak wane jest wyczanie shadera. Podobnie jak stany
faz tekstur, pixel shader jest stosowany dla kadego piksela do chwili, kiedy zostanie
jawnie zmieniony. Inaczej ni w przypadku stanw faz tekstur, wyczenie shadera jest
znacznie atwiejsze ni osobne wyczanie kadego ze stanw tekstury:
*39
11,,$4(&/'(
!#2
D
Wynik dziaania aplikacji ju pokazano na rysunkach 16.4 i 16.6. Ten przykad jest nieco
sztuczny, a procedury owietlenia nie s najwyszej jakoci, ale ilustruje podstawy tworzenia mechanizmw pixel shader, zasilania ich danymi przez vertex shadery oraz wykorzystywania do oddziaywania na wynik przebiegu renderingu.
280
Cz IV
Mechanizmy shader
Podsumowanie
Nie ma w tym nic dziwnego, jeli czytelnik po lekturze powyszych rozdziau nie czuje
si jeszcze zbyt pewnie, zwaywszy, e prezentowany materia jest nowy. Osobicie
uwaam, e atwiej zrozumie pojcia, kiedy si ich uywa. W tym rozdziale moim zamiarem byo skrtowe omwienie podstawowych poj oraz definicji instrukcji. W dalszych rozdziaach utrwalimy pojcia za pomoc przykadw.
Kolejnych kilka rozdziaw koncentruje si na vertex shaderach. Nauczymy si skadni
oraz wielu poj na tle interesujcych i ciekawych technik. Zaprezentowane techniki
pozwol nam myle w kategoriach ogranicze instrukcji uywanych w shaderach. Do
czasu, kiedy przeanalizujemy pierwszy pixel shader w rozdziale 29., bdziemy do
swobodnie posugiwa si shaderami. Od tego momentu przejcie od vertex shaderw
do pixel shaderw powinno by atwiejsze, ni nam si wydaje. Zatem zapamitajmy
z tego rozdziau tyle, ile si da, ale pamitajmy, e dalsze rozdziay utrwal wiele spord poj poznanych w tym rozdziale. Zanim przejdziemy dalej, sprbujmy podsumowa
poznane pojcia:
Pixel shadery dziaaj w podobny sposb jak vertex shadery. Instrukcje zapisuj
i odczytuj dane z i do rejestrw, a nastpnie przekazuj ostateczne wyniki.
Instrukcje , oraz wykonuj konfiguracj shadera i nie zawieraj si
w oglnej liczbie dozwolonych instrukcji w shaderze.
Rozdzia 16.
Pixel shadery, podobnie jak vertex shadery naley podda asemblacji, utworzy
i ustawi. Podczas tworzenia pixel shaderw deklaracje nie s potrzebne.
281