Megosztás a következőn keresztül:


Output-Merger szakasz

A kimeneti egyesítési (OM) fázis a végső renderelt képpontszínt a folyamatállapot, a képpontárnyékolók által létrehozott képpontadatok, a renderelési célok tartalma és a mélységi/rajzsablonpufferek tartalma alapján hozza létre. Az OM szakasz az utolsó lépés annak meghatározásához, hogy mely képpontok láthatók (a mélységi rajzsablon tesztelésével), és hogy a végső képpontszínek elegyednek-e.

A Direct3D 9 és a Direct3D 10 közötti különbségek:

  • A Direct3D 9 alfatesztelést implementál (alfatesztelési állapothasználatával) annak szabályozására, hogy egy képpontot kimeneti renderelési célba ír-e.
  • A Direct3D 10 és újabb verziók nem implementálnak alfatesztet (vagy alfatesztelési állapotot). Ez vezérelhető képpontárnyékolóval vagy mélység/rajzsablon funkcióval.

Depth-Stencil tesztelés áttekintése

A textúraerőforrásként létrehozott mélységi rajzsablonpuffer mélységi adatokat és rajzsablonadatokat is tartalmazhat. A mélységi adatok segítségével meghatározhatja, hogy mely képpontok legyenek a legközelebb a kamerához, a rajzsablon adatai pedig a frissíthető képpontok maszkolására szolgálnak. Végső soron mind a mélységi, mind a rajzsablon-értékek adatait a kimeneti összevonási szakasz használja annak meghatározására, hogy képpontot kell-e rajzolni vagy sem. Az alábbi ábra a rajzsablonok mélységi tesztelésének koncepcionális módját mutatja be.

rajzsablon-tesztelés működésének diagramja

A mélységi rajzsablonok tesztelésének konfigurálásához lásd Depth-Stencil funkciókonfigurálását. A mélység-rajzsablon objektum a mélység-rajzsablon állapotát foglalja magában. Az alkalmazások megadhatják a mélységi rajzsablon állapotát, vagy az OM szakasz alapértelmezett értékeket használ. A keverési műveleteket képpontonként hajtja végre, ha a többminta-készítés le van tiltva. Ha engedélyezve van a többminta-készítés, a keverés többample-alapú alapon történik.

A mélységi puffer használatával meghatározható, hogy melyik képpontot kell megrajzolnia, úgynevezett mélységi pufferelésnek, más néven z-pufferelésnek.

Ha a mélységértékek elérik a kimeneti egyesítési szakaszt (akár interpolációból, akár képpontárnyékolóból származnak), mindig rögzítve vannak: z = min(Viewport.MaxDepth,max(Viewport.MinDepth,z)) a mélységi puffer formátuma/pontossága szerint, lebegőpontos szabályok használatával. A befogás után a rendszer összehasonlítja a mélységi értéket (a DepthFunc használatával) a meglévő mélységpuffer értékével. Ha nincs megkötve a mélységi puffer, a mélységi teszt mindig áthalad.

Ha nincs rajzsablon-összetevő a mélységpuffer formátumban, vagy nincs megkötve a mélységi puffer, akkor a rajzsablon tesztje mindig halad. Ellenkező esetben a funkció nem változik a Direct3D 9-hez képest.

Egyszerre csak egy mélységi/rajzsablon-puffer lehet aktív; minden kötött erőforrásnézetnek meg kell egyeznie a mélység/rajzsablon nézetével (méretekkel és méretekkel). Ez nem jelenti azt, hogy az erőforrás méretének meg kell egyeznie, csak a nézet méretének egyeznie kell.

A mélységi rajzsablonok teszteléséről további információt 14.. oktatóanyagban talál.

Keverés áttekintése

A keverés egy vagy több képpontérték összefűzésével végleges képpontszínt hoz létre. Az alábbi ábra a képpontadatok keverésének folyamatát mutatja be.

diagram az adatok keverésének működéséről

Elméletileg a kimeneti összeolvadás fázisában kétszer implementált folyamatábra vizualizálható: az első az RGB-adatokat keveri, míg a második az alfaadatokat. Ha tudni szeretné, hogyan hozhat létre és állíthat be keverési állapotot az API-val, tekintse meg Keverési funkciók konfigurálásacímű témakört.

A rögzített függvények keverése egymástól függetlenül engedélyezhető minden renderelési célhoz. A keverési vezérlőknek azonban csak egy készlete van, így az összes RenderTargetre ugyanazt a keveréket alkalmazza a rendszer, ha engedélyezve van a keverés. A blend értékek (beleértve a BlendFactort) mindig a renderelési célformátum tartományához vannak rögzítve a keverés előtt. A befogás renderelési célonként történik, a renderelési céltípusnak megfelelően. Az egyetlen kivétel az úszó16, float11 vagy float10 formátumok esetében van, amelyek nincsenek rögzítve, így az ezeken a formátumokon végzett keverési műveletek legalább ugyanolyan pontossággal/tartománnyal végezhetők el, mint a kimeneti formátum. A naN és az aláírt nullák minden esetben propagálva vannak (beleértve a 0,0 keveréksúlyt).

Az sRGB renderelési célok használatakor a futtatókörnyezet a leképezési célszínt lineáris térré alakítja, mielőtt elegyítést végez. A futtatókörnyezet a végső elegyített értéket sRGB-térré alakítja vissza, mielőtt az értéket visszamentené a renderelési célhelyre.

A Direct3D 9 és a Direct3D 10 közötti különbségek:

  • A Direct3D 9-ben a rögzített függvények keverése egymástól függetlenül engedélyezhető minden renderelési célhoz.
  • A Direct3D 10-ben és újabb verziókban egy keverékállapot-leírás található; ezért egyetlen keverési érték állítható be az összes renderelési célhoz.

Dual-Source színkeverés

Ez a funkció lehetővé teszi, hogy a kimeneti összeolvadási fázis egyszerre használja a képpontárnyékoló kimeneteit (o0 és o1) bemenetként a 0. pontban található egyetlen renderelési célponttal való keverési művelethez. Az érvényes keverési műveletek a következők: hozzáadás, kivonás és revsubtract. Az SrcBlend, a DestBlend, a SrcBlendAlpha vagy a DestBlendAlpha érvényes keverési beállításai a következők: D3D11_BLEND_SRC1_COLOR, D3D11_BLEND_INV_SRC1_COLOR, D3D11_BLEND_SRC1_ALPHA, D3D11_BLEND_INV_SRC1_ALPHA. A keverési egyenlet és a kimeneti írási maszk határozza meg, hogy a képpontárnyékoló mely összetevőket adja ki. A rendszer figyelmen kívül hagyja a további összetevőket.

Az írás más képpontárnyékoló kimenetekre (o2, o3 stb.) nincs meghatározva; nem írhat renderelési célhelyre, ha az nem a 0. ponthoz van kötve. Az oDepth írása a két forrásszín keverése során érvényes.

Példák: képpontárnyékoló-kimenetek.

Több rendertarget áttekintése

A képpontárnyékolóval legalább 8 különálló renderelési célt jeleníthet meg, amelyek mindegyikének azonos típusúnak kell lennie (puffer, Texture1D, Texture1DArray stb.). Ezenkívül minden renderelési célnak minden dimenzióban azonos méretűnek kell lennie (szélesség, magasság, mélység, tömbméret, mintaszám). Előfordulhat, hogy minden renderelési cél eltérő adatformátummal rendelkezik.

A renderelési célhelyek tetszőleges kombinációját (legfeljebb 8) használhatja. Az erőforrásnézetek azonban nem köthetők egyszerre több renderelési célhelyhez. A nézet újra felhasználható mindaddig, amíg az erőforrásokat nem használják egyszerre.

Output-Write maszk áttekintése

Kimeneti-írási maszk használatával (összetevőnként) szabályozhatja, hogy milyen adatok írhatók renderelési célba.

Mintamaszk áttekintése

A mintamaszk egy 32 bites többminta-lefedettségi maszk, amely meghatározza, hogy mely minták frissülnek aktív renderelési célokban. Csak egy mintamaszk engedélyezett. A mintamaszk bitjeinek az erőforrás mintáihoz való leképezését egy felhasználó határozza meg. Az n-minta rendereléséhez a mintamaszk első n bitjei (az LSB-ből) lesznek használatban (32 bit a maximális bitszám).

Ebben a szakaszban

Téma Leírás
Depth-Stencil funkciók konfigurálása
Ez a szakasz a mélységi rajzsablon pufferének beállításának lépéseit, valamint a kimeneti összeolvadás fázisának mélységi rajzsablon-állapotát ismerteti.
Keverési funkciók konfigurálása
A keverési műveleteket minden képpontárnyékoló kimenetén (RGBA-érték) hajtja végre, mielőtt a kimeneti értéket renderelési célba írná. Ha engedélyezve van a többampling, a keverés minden egyes többample-en történik; ellenkező esetben a keverés minden képponton történik.
mélységi torzítás
A 3D térben lévő sokszögek úgy jeleníthetők meg, mintha nem lennének coplanárisak, ha mindegyikhez hozzáadunk egy z-torzításokat (vagy mélységi torzításokat).

grafikus folyamat

folyamatszakaszok (Direct3D 10)