Sdílet prostřednictvím


fáze Output-Merger

Fáze sloučení výstupu (OM) vygeneruje konečnou vykreslenou barvu pixelů pomocí kombinace stavu kanálu, pixelových dat generovaných shadery pixelů, obsahu cílů vykreslování a obsahu vyrovnávací paměti hloubky nebo vzorníku. Fáze OM je posledním krokem pro určení, které pixely jsou viditelné (s hloubkovým testováním vzorníku) a prolnutí konečných barev pixelů.

Rozdíly mezi Direct3D 9 a Direct3D 10:

  • Direct3D 9 implementuje alfa testování (pomocí stavu alfa-testování) k řízení, zda je pixel zapsán do cíle vykreslení výstupu.
  • Direct3D 10 a vyšší neimplementuje alfa test (nebo stav alfa testování). To lze ovládat pomocí shaderu pixelů nebo s funkcí hloubky nebo vzorníku.

Přehled testování Depth-Stencil

Vyrovnávací paměť vzorníku hloubky, která se vytvoří jako prostředek textury, může obsahovat hloubková data i data vzorníku. Hloubková data slouží k určení, které pixely leží nejblíže fotoaparátu, a data vzorníku slouží k maskování pixelů, které lze aktualizovat. V konečném důsledku se data hodnot hloubky i vzorníku používají ve fázi fúzace výstupu k určení, jestli se má pixel vykreslit nebo ne. Následující diagram znázorňuje koncepčně, jak se provádí testování vzorníku s hloubkou.

diagram fungování hloubkového testování vzorníku

Informace o konfiguraci hloubkového testování vzorníku najdete v tématu Konfigurace Depth-Stencil Funkce. Objekt hloubkového vzorníku zapouzdřuje stav vzorníku hloubky. Aplikace může zadat stav vzorníku hloubky nebo fáze OM bude používat výchozí hodnoty. Operace kombinování se provádějí na pixelech, pokud je vícevzorkování zakázané. Pokud je povolené vícevzorkování, prolnutí probíhá na základě vícevzorkování.

Proces použití hloubkové vyrovnávací paměti k určení, který pixel se má nakreslit, se nazývá hloubková vyrovnávací paměť, také někdy označovaná jako z-buffering.

Jakmile hodnoty hloubky dosáhnou fáze sloučení výstupu (ať už pocházejí z interpolace nebo z pixelového shaderu), jsou vždy uchycené: z = min(Viewport.MaxDepth,max(Viewport.MinDepth;z)) podle formátu/přesnosti vyrovnávací paměti hloubky pomocí pravidel s plovoucí desetinnou čárkou. Po upnutí se hodnota hloubky porovná (pomocí funkce DepthFunc) proti stávající hodnotě hloubkové vyrovnávací paměti. Pokud není vázaná žádná hloubková vyrovnávací paměť, test hloubky vždy projde.

Pokud ve formátu hloubkové vyrovnávací paměti neexistuje žádná součást vzorníku nebo není vázána žádná hloubková vyrovnávací paměť, test vzorníku vždy projde. Jinak se funkce nezmění od Direct3D 9.

Najednou může být aktivní pouze jedna hloubka/vyrovnávací paměť vzorníku; jakékoli vázané zobrazení prostředků se musí shodovat (stejná velikost a rozměry) zobrazení hloubky nebo vzorníku. To neznamená, že velikost prostředku se musí shodovat, pouze že velikost zobrazení se musí shodovat.

Další informace o hloubkové testování vzorníku naleznete v kurzu 14.

Přehled blendingu

Kombinace jedné nebo více hodnot pixelů vytvoří konečnou barvu pixelu. Následující diagram znázorňuje proces, který se týká kombinování dat pixelů.

diagram fungování kombinování dat

Koncepčně můžete vizualizovat tento vývojový diagram implementovaný dvakrát ve fázi fúzování výstupu: první z nich kombinuje data RGB, zatímco druhý sloučí alfa data. Informace o tom, jak pomocí rozhraní API vytvořit a nastavit stav blendu, najdete v tématu Konfigurace funkcí blendingu.

Kombinaci pevných funkcí je možné povolit nezávisle pro každý cíl vykreslení. Existuje však pouze jedna sada ovládacích prvků blendu, takže stejná kombinace se použije pro všechny RenderTargety s povoleným prolnutím. Hodnoty blendu (včetně BlendFactor) jsou před prolnutím vždy uchyceny v rozsahu cílového formátu vykreslování. Upnutí se provádí na cíl vykreslení s ohledem na typ cíle vykreslení. Jedinou výjimkou jsou formáty float16, float11 nebo float10, které nejsou uchycené, aby operace mixu s těmito formáty mohly být provedeny s alespoň stejnou přesností a rozsahem jako výstupní formát. Pro všechny případy se šíří nuly se nulami a nulami se signepčními nulami (včetně 0,0 váhou).

Pokud použijete cíle vykreslování sRGB, modul runtime převede cílovou barvu vykreslení na lineární prostor před provedením prolnutí. Modul runtime převede konečnou kombinovanou hodnotu zpět do prostoru sRGB, než uloží hodnotu zpět do cíle vykreslení.

Rozdíly mezi Direct3D 9 a Direct3D 10:

  • V Režimu Direct3D 9 je možné pro každý cíl vykreslování povolit kombinaci s pevnou funkcí nezávisle.
  • V Direct3D 10 a vyšší existuje jeden popis stavu blend-state; proto lze nastavit jednu hodnotu prolínání pro všechny cíle vykreslování.

Dual-Source prolnutí barev

Tato funkce umožňuje fúzi výstupu současně používat výstupy shaderu pixelů (o0 i o1) jako vstupy pro operaci prolnutí s jedním cílem vykreslení na slotu 0. Mezi platné operace mixu patří sčítání, odčítání a odčítání. Platné možnosti směsi pro SrcBlend, DestBlend, SrcBlendAlpha nebo DestBlendAlpha zahrnují: D3D11_BLEND_SRC1_COLOR, D3D11_BLEND_INV_SRC1_COLOR, D3D11_BLEND_SRC1_ALPHA, D3D11_BLEND_INV_SRC1_ALPHA. Rovnice prolnutí a maska zápisu výstupu určují, které komponenty shader pixelů má výstup. Nadbytečné komponenty se ignorují.

Zápis do jiných výstupů shaderu pixelů (o2, o3 atd.) není definován; Pokud není vázán na slot 0, nesmíte zapisovat do cíle vykreslení. Zápis oDepth je platný během kombinování dvou zdrojových barev.

Příklady najdete v prolnutí výstupů shaderu pixelů.

Přehled více objektů RenderTarget

Shader pixelů lze použít k vykreslení alespoň na 8 samostatných cílů vykreslování, z nichž všechny musí být stejného typu (buffer, Texture1D, Texture1DArray atd.). Všechny cíle vykreslení navíc musí mít stejnou velikost ve všech rozměrech (šířka, výška, hloubka, velikost pole, počty vzorků). Každý cíl vykreslení může mít jiný formát dat.

Můžete použít libovolnou kombinaci slotů cílů vykreslování (až 8). Zobrazení prostředků však nelze současně svázat s několika sloty cíle vykreslování. Zobrazení může být opakovaně použito, pokud se prostředky nepoužívají současně.

Přehled masky Output-Write

Maska výstupního zápisu slouží k řízení (na komponentu) toho, jaká data je možné zapsat do cíle vykreslení.

Přehled ukázkové masky

Ukázková maska je 32bitová maska pokrytí s více razítky, která určuje, které vzorky se aktualizují v aktivních cílech vykreslování. Je povolena pouze jedna ukázková maska. Mapování bitů v ukázkové masce na ukázky v prostředku definuje uživatel. Pro n-ukázkové vykreslování se použijí první n bity (z LSB) ukázkové masky (32 bitů je maximální počet bitů).

V této části

Námět Popis
konfigurace funkcí Depth-Stencil
Tato část popisuje kroky pro nastavení vyrovnávací paměti vzorníku hloubky a stavu podrobného vzorníku pro fázi fúze výstupu.
konfigurace funkcí blendingu
Operace prolnutí se provádějí na každém výstupu shaderu pixelů (hodnota RGBA) před zápisem výstupní hodnoty do cíle vykreslení. Pokud je povoleno vícevzorkování, prolnutí se provádí na každém víceample; jinak se prolnutí provádí na jednotlivých pixelech.
hloubková odchylka
Mnohoúhelníky, které jsou koplanární ve 3D prostoru, lze vytvořit tak, aby vypadaly, jako by nebyly koplanární přidáním zkreslení z (nebo hloubkové předsudky) do každého z.

grafického kanálu

fáze kanálu (Direct3D 10)