Udostępnij przez


etap Output-Merger

Etap łączenia danych wyjściowych (OM) generuje końcowy kolor renderowanego piksela przy użyciu kombinacji stanu potoku, danych pikseli generowanych przez cieniowanie pikseli, zawartość obiektów docelowych renderowania oraz zawartość głębokości/wzornika. Etap OM jest ostatnim krokiem do określenia, które piksele są widoczne (z testowaniem wzornika głębokości) i mieszaniem końcowych kolorów pikseli.

Różnice między direct3D 9 i Direct3D 10:

  • Funkcja Direct3D 9 implementuje testowanie alfa (przy użyciu stanu testowania alfa) w celu kontrolowania, czy piksel jest zapisywany w wyjściowym obiekcie docelowym renderowania.
  • Funkcja Direct3D 10 lub nowsza nie implementuje testu alfa (ani stanu testowania alfa). Można to kontrolować za pomocą cieniowania pikseli lub funkcji głębi/wzornika.

Depth-Stencil Testing Overview (Omówienie testowania Depth-Stencil)

Bufor wzornika głębi, który jest tworzony jako zasób tekstury, może zawierać zarówno dane głębokości, jak i dane wzornika. Dane głębokości służą do określania pikseli znajdujących się najbliżej aparatu, a dane wzornika są używane do maskowania pikseli, które można zaktualizować. Ostatecznie zarówno dane dotyczące głębokości, jak i wzornika są używane przez etap fuzji danych wyjściowych w celu określenia, czy piksel powinien zostać narysowany, czy nie. Na poniższym diagramie przedstawiono koncepcyjnie sposób przeprowadzania testowania wzornika głębi.

diagram przedstawiający działanie testowania wzornika głębokości

Aby skonfigurować testowanie wzornika głębi, zobacz Konfigurowanie funkcji Depth-Stencil. Obiekt wzornika głębokości hermetyzuje stan wzornika głębokości. Aplikacja może określić stan wzornika głębi lub etap OM będzie używać wartości domyślnych. Operacje łączenia są wykonywane na podstawie poszczególnych pikseli, jeśli wieloskładniki są wyłączone. Jeśli włączono wieloprzykładowe próbkowanie, mieszanie odbywa się na podstawie wielu próbek.

Proces używania buforu głębokości w celu określenia, który piksel ma być rysowany, jest nazywany buforowaniem głębokości, czasami nazywany buforowaniem z.

Gdy wartości głębokości osiągną etap fuzji danych wyjściowych (niezależnie od tego, czy pochodzą z interpolacji, czy z cieniowania pikseli), są zawsze zaciskane: z = min(Viewport.MaxDepth,max(Viewport.MinDepth,z)) zgodnie z formatem/dokładnością buforu głębokości przy użyciu reguł zmiennoprzecinkowych. Po zaciskaniu wartość głębokości jest porównywana (przy użyciu funkcji DepthFunc) względem istniejącej wartości buforu głębokości. Jeśli bufor głębokości nie jest powiązany, test głębokości zawsze przechodzi.

Jeśli nie ma składnika wzornika w formacie buforu głębokości lub nie ma powiązanego buforu głębokości, test wzornika zawsze przechodzi. W przeciwnym razie funkcjonalność nie zmienia się z direct3D 9.

Jednocześnie może być aktywny tylko jeden bufor głębokości/wzornika; każdy powiązany widok zasobu musi być zgodny (ten sam rozmiar i wymiary) z widokiem głębokości/wzornika. Nie oznacza to, że rozmiar zasobu musi być zgodny, tylko że rozmiar widoku musi być zgodny.

Aby uzyskać więcej informacji na temat testowania wzornika głębi, zobacz tutorial 14.

Omówienie mieszania

Łączenie łączy co najmniej jedną wartość pikseli w celu utworzenia końcowego koloru pikseli. Na poniższym diagramie przedstawiono proces łączenia danych pikseli.

diagram przedstawiający sposób działania danych mieszania

Koncepcyjnie można zwizualizować ten wykres blokowy zaimplementowany dwa razy na etapie fuzji danych wyjściowych: pierwszy łączy dane RGB, podczas gdy równolegle drugi łączy dane alfa. Aby zobaczyć, jak używać interfejsu API do tworzenia i ustawiania stanu mieszania, zobacz Configuring Blending Functionality.

Funkcję stałą można włączyć niezależnie dla każdego elementu docelowego renderowania. Istnieje jednak tylko jeden zestaw kontrolek mieszania, dzięki czemu ta sama mieszanka jest stosowana do wszystkich obiektów RenderTarget z włączonym mieszaniem. Wartości blend (w tym BlendFactor) są zawsze zaciskane do zakresu formatu docelowego renderowania przed połączeniem. Zaciskanie odbywa się na obiekt docelowy renderowania, szanując typ docelowy renderowania. Jedynym wyjątkiem jest format float16, float11 lub float10, które nie są zaciśnięte, aby operacje mieszania na tych formatach można wykonać z co najmniej równą precyzją/zakresem jako format wyjściowy. NaN i podpisane zera są propagowane dla wszystkich przypadków (w tym 0,0 mas mieszanych).

W przypadku korzystania z obiektów docelowych renderowania sRGB środowisko uruchomieniowe konwertuje kolor docelowy renderowania na przestrzeń liniową przed wykonaniem mieszania. Środowisko uruchomieniowe konwertuje końcową wartość mieszaną z powrotem na miejsce sRGB, zanim zapisze wartość z powrotem do obiektu docelowego renderowania.

Różnice między direct3D 9 i Direct3D 10:

  • W trybie Direct3D 9 łączenie funkcji stałych można włączyć niezależnie dla każdego obiektu docelowego renderowania.
  • W trybie Direct3D 10 i nowszym istnieje jeden opis stanu mieszanego; W związku z tym można ustawić jedną wartość mieszaną dla wszystkich obiektów docelowych renderowania.

mieszanie kolorów Dual-Source

Ta funkcja umożliwia etapowi fuzji danych wyjściowych jednoczesne używanie danych wyjściowych cieniowania pikseli (o0 i o1) jako danych wejściowych operacji łączenia z pojedynczym obiektem docelowym renderowania w miejscu 0. Prawidłowe operacje mieszania obejmują: dodawanie, odejmowanie i odejmowanie. Prawidłowe opcje mieszanki dla SrcBlend, DestBlend, SrcBlendAlpha lub DestBlendAlpha obejmują: D3D11_BLEND_SRC1_COLOR, D3D11_BLEND_INV_SRC1_COLOR, D3D11_BLEND_SRC1_ALPHA, D3D11_BLEND_INV_SRC1_ALPHA. Równanie blend i maska zapisu wyjściowego określają, które składniki cieniowania pikseli generuje. Dodatkowe składniki są ignorowane.

Zapisywanie w innych danych wyjściowych cieniowania pikseli (o2, o3 itp.) jest niezdefiniowane; jeśli nie jest on powiązany z miejscem 0, może nie być zapisywany w obiekcie docelowym renderowania. Zapisywanie wartości oDepth jest prawidłowe podczas łączenia kolorów podwójnego źródła.

Aby zapoznać się z przykładami, zobacz łączenie danych wyjściowych cieniowania pikseli.

Omówienie wielu obiektów RenderTarget

Cieniowanie pikseli może służyć do renderowania co najmniej 8 oddzielnych elementów docelowych renderowania, z których wszystkie muszą być tego samego typu (bufor, Tekstura1D, Tekstura1DArray itd.). Ponadto wszystkie obiekty docelowe renderowania muszą mieć taki sam rozmiar we wszystkich wymiarach (szerokość, wysokość, głębokość, rozmiar tablicy, liczba próbek). Każdy element docelowy renderowania może mieć inny format danych.

Można użyć dowolnej kombinacji miejsc docelowych renderowania (do 8). Jednak widok zasobu nie może być powiązany z wieloma miejscami render-target-slots jednocześnie. Widok może być ponownie używany, o ile zasoby nie są używane jednocześnie.

Omówienie maski Output-Write

Użyj maski zapisu wyjściowego, aby kontrolować (na składnik) dane, które mogą być zapisywane w obiekcie docelowym renderowania.

Omówienie maski przykładowej

Przykładowa maska to 32-bitowa maska pokrycia wieloample, która określa, które próbki są aktualizowane w aktywnych elementach docelowych renderowania. Dozwolona jest tylko jedna maska przykładowa. Mapowanie bitów w przykładowej masce na próbki w zasobie jest definiowane przez użytkownika. W przypadku renderowania n-przykładowego użyto pierwszych n bitów (z LSB) przykładowej maski (32 bity to maksymalna liczba bitów).

W tej sekcji

Temat Opis
Konfigurowanie funkcji Depth-Stencil
W tej sekcji opisano kroki konfigurowania buforu wzornika głębokości i stanu wzornika głębokości dla etapu fuzji danych wyjściowych.
Konfigurowanie funkcji mieszania
Operacje łączenia są wykonywane na każdym danych wyjściowych cieniowania pikseli (wartość RGBA), zanim wartość wyjściowa zostanie zapisana w obiekcie docelowym renderowania. Jeśli włączono wieloprzykładowe próbkowanie, mieszanie odbywa się na każdym wieloample; w przeciwnym razie mieszanie jest wykonywane na każdym pikselu.
głębokości
Wielokąty, które są współpłatne w przestrzeni 3D, mogą być wyświetlane tak, jakby nie były coplanar, dodając stronniczy z (lub stronniczy głębokość) do każdego z nich.

potoku grafiki

etapy potoku (Direct3D 10)