Światła i materiały (Direct3D 9)
Światła są używane do oświetlenia obiektów w scenie. Po włączeniu oświetlenia funkcja Direct3D oblicza kolor każdego wierzchołka obiektu na podstawie kombinacji:
Nuta
Ta sekcja dotyczy tylko potoku funkcji stałej. Programowalne cieniowania wykonują jawnie wszystkie oświetlenie.
- Bieżący kolor materiału i texels w skojarzonej mapie tekstury.
- Kolory dyfuzora i widmowe w wierzchołku, jeśli określono.
- Kolor i intensywność światła generowanego przez źródła światła w scenie lub otoczenia sceny poziom światła.
W przypadku korzystania z oświetlenia i materiałów Direct3D możesz zezwolić direct3D na obsługę szczegółów oświetlenia. Użytkownicy zaawansowani mogą samodzielnie wykonywać oświetlenie, jeśli jest to konieczne.
Sposób pracy z oświetleniem i materiałami ma dużą różnicę w wyglądzie renderowanej sceny. Materiały definiują, jak światło odbija się od powierzchni. Poziomy światła bezpośredniego i otoczenia definiują światło, które jest odbite. W przypadku włączenia oświetlenia należy użyć materiałów do renderowania sceny. Światła nie są wymagane do renderowania sceny, ale szczegóły w scenie renderowanej bez światła nie są widoczne. W najlepszym razie renderowanie niewyświetłej sceny powoduje wyświetlenie sylwetki obiektów w scenie. Jest to za mało szczegółów dla większości celów.
Światło bezpośrednie a światło otoczenia
Chociaż zarówno bezpośrednie, jak i otoczenia światła świecą obiekty na scenie, są niezależne od siebie, mają bardzo różne efekty i wymagają, aby pracować z nimi w zupełnie inny sposób.
Bezpośrednie światło jest tylko to: bezpośrednie. Bezpośrednie światło zawsze ma kierunek i kolor i jest czynnikiem do cieniowania algorytmów, takich jak cieniowanie Gouraud. Różne typy świateł emitują bezpośrednie światło na różne sposoby, tworząc specjalne efekty tłumienia. Utworzysz zestaw parametrów światła dla światła bezpośredniego, wywołując metodę IDirect3DDevice9::SetLight.
Światło otoczenia jest skutecznie wszędzie na scenie. Można go traktować jako ogólny poziom światła, który wypełnia całą scenę, niezależnie od obiektów i ich lokalizacji w tej scenie. Światło otoczenia nie ma położenia ani kierunku, tylko kolor i intensywność. Każde światło dodaje do ogólnego światła otoczenia w scenie. Ustaw poziom światła otoczenia za pomocą wywołania IDirect3DDevice9::SetRenderState metody, określając D3DRS_AMBIENT jako parametr stanu i żądany kolor RGBA jako parametr Value.
Kolor światła otoczenia przyjmuje formę wartości RGBA, gdzie każdy składnik jest wartością całkowitą z zakresu od 0 do 255. Jest to w przeciwieństwie do większości wartości kolorów w trybie Direct3D.
Aby wygenerować wartości RGBA, możesz użyć makra D3DCOLOR_RGBA. Czerwone, zielone i niebieskie składniki łączą się, aby ostateczny kolor światła otoczenia. Składnik alfa kontroluje przezroczystość koloru. W przypadku korzystania z przyspieszania sprzętowego lub emulacji RGB składnik alfa jest ignorowany.
Model jasny Direct3D a natura
W naturze, gdy światło jest emitowane ze źródła, jest odbijane od setek, jeśli nie tysięcy lub milionów obiektów przed dotarciem do oka użytkownika. Za każdym razem, gdy zostanie odzwierciedlone, niektóre światło jest pochłaniane przez powierzchnię, niektóre są rozproszone w losowych kierunkach, a reszta przechodzi na inną powierzchnię lub na oko użytkownika. Ten proces będzie kontynuowany, dopóki światło nie zostanie zredukowane do niczego lub użytkownik postrzega światło.
Oczywiście obliczenia wymagane do idealnego symulowania naturalnego zachowania światła są zbyt czasochłonne do użycia na potrzeby grafiki Direct3D w czasie rzeczywistym. W związku z tym, mając na uwadze szybkość, model światła Direct3D przybliża sposób działania światła w świecie naturalnym. Direct3D opisuje światło pod względem czerwonych, zielonych i niebieskich składników, które łączą się w celu utworzenia końcowego koloru.
W trybie Direct3D, gdy światło odbija się od powierzchni, kolor światła współdziała matematycznie z samą powierzchnią, aby utworzyć kolor ostatecznie wyświetlany na ekranie. Aby uzyskać szczegółowe informacje na temat algorytmów bezpośrednich3D, zobacz Matematyka oświetlenia (Direct3D 9).
Model światła Direct3D uogólnia światło na dwa typy: światło otoczenia i bezpośrednie światło. Każda z nich ma różne atrybuty, a każda z nich wchodzi w interakcje z materiałem powierzchni na różne sposoby. Światło otoczenia jest światło, które zostało rozproszone tak bardzo, że jego kierunek i źródło są nieokreślone: utrzymuje niski poziom intensywności wszędzie. Pośrednie oświetlenie używane przez fotografów jest dobrym przykładem otoczenia światła. Światło otoczenia w trybie Direct3D, jak w przyrodzie, nie ma rzeczywistego kierunku ani źródła, tylko kolor i intensywność. W rzeczywistości poziom światła otoczenia jest całkowicie niezależny od wszystkich obiektów w scenie, która generuje światło. Światło otoczenia nie przyczynia się do odbicia widmowego.
Bezpośrednie światło to światło generowane przez źródło w scenie; zawsze ma kolor i intensywność, a porusza się w określonym kierunku. Bezpośrednie światło wchodzi w interakcję z materiałem powierzchni, aby utworzyć specularne wyróżnienia, a jego kierunek jest używany jako czynnik w algorytmach cieniowania, w tym cieniowanie Gouraud. Gdy światło bezpośrednie jest odbite, nie przyczynia się do poziomu światła otoczenia w scenie. Źródła w scenie, które generują bezpośrednie światło, mają różne cechy wpływające na to, jak oświetlają scenę.
Ponadto materiał wielokąta ma właściwości wpływające na to, jak ten wielokąt odzwierciedla światło, które otrzymuje. Ustawisz pojedynczą cechę odbicia, która opisuje, w jaki sposób materiał odzwierciedla światło otoczenia, i ustawisz poszczególne cechy w celu określenia widmowej i rozproszonej odbicia materiału. Aby uzyskać więcej informacji, zobacz Materials (Direct3D 9).
Wartości kolorów świateł i materiałów
Direct3D opisuje kolor pod względem czterech składników czerwony, zielony, niebieski i alfa-, które łączą się w celu utworzenia końcowego koloru. Struktura D3DCOLORVALUE C++ jest definiowana tak, aby zawierała wartości dla każdego składnika. Każdy element członkowski jest wartością zmiennoprzecinkową, która zazwyczaj waha się od 0,0 do 1,0 włącznie. Chociaż zarówno światła, jak i materiały używają tej samej struktury do opisywania koloru, wartości w strukturze są używane nieco inaczej.
Wartości kolorów źródeł światła reprezentują ilość określonego składnika światła, który emituje. Ponieważ światła nie używają składnika alfa, istotne są tylko czerwone, zielone i niebieskie składniki koloru. Trzy składniki można wizualizować jako czerwone, zielone i niebieskie obiektywy w telewizorze projekcji. Każdy obiektyw może być wyłączony (wartość 0,0 w odpowiednim elemencie), może być tak jasny, jak to możliwe (wartość 1,0) lub może być pewien poziom między. Kolory przechodzące przez obiektywy łączą się, aby kolor końcowy światła. Połączenie takie jak R(1.0), G(1.0), B(1.0) tworzy białe światło, gdzie R(0.0), G(0.0), B(0.0) w ogóle nie emituje światła. Możesz zrobić światło, które emituje tylko jeden składnik, co powoduje czystą czerwoną, zieloną lub niebieską światło; lub, światło może używać kombinacji do emitowania kolorów, takich jak żółty lub fioletowy. Można nawet ustawić wartości składników koloru ujemnego, aby utworzyć "ciemne światło", które rzeczywiście usuwa światło ze sceny. Możesz też ustawić składniki na wartość większą niż 1,0, aby utworzyć bardzo jasne światło.
Z drugiej strony, wartości kolorów reprezentują, ile składnik światła jest odzwierciedlany przez powierzchnię renderowaną z tym materiałem. Materiał, którego składniki kolorów to R(1.0), G(1.0), B(1.0), A(1.0) odzwierciedla całe światło, które przychodzi. Podobnie materiał z R(0.0), G(1.0), B(0.0), A(1.0) odzwierciedla całe zielone światło skierowane do niego. Materiały mają wiele wartości odbicia w celu utworzenia różnych typów efektów.
Dodatkowe informacje znajdują się w: Light Types (Direct3D 9)i Light Properties (Direct3D 9).
Tematy pokrewne