Dela via


Output-Merger fas

Om-fasen (output-merger) genererar den slutliga renderade pixelfärgen med hjälp av en kombination av pipelinetillstånd, pixeldata som genereras av pixelskuggarna, innehållet i återgivningsmålen och innehållet i djup-/stencilbuffertarna. OM-fasen är det sista steget för att avgöra vilka bildpunkter som är synliga (med testning av djupstenciler) och blandning av de sista pixelfärgerna.

Skillnader mellan Direct3D 9 och Direct3D 10:

  • Direct3D 9 implementerar alfatestning (med alfatestningstillstånd) för att styra om en pixel skrivs till ett utdataåtergivningsmål.
  • Direct3D 10 och senare implementerar inte ett alfatest (eller alfatesttillstånd). Detta kan styras med hjälp av en pixelskuggning eller med funktioner för djup/stencil.

Översikt över Depth-Stencil testning

En djupstencilbuffert, som skapas som en strukturresurs, kan innehålla både djupdata och stencildata. Djupdata används för att avgöra vilka pixlar som ligger närmast kameran och stencildata används för att maskera vilka pixlar som kan uppdateras. I slutändan används både djup- och stencilvärdena av utdatasammanslagningssteget för att avgöra om en pixel ska ritas eller inte. Följande diagram visar konceptuellt hur djupstenciltestning utförs.

diagram över hur djupstenciltestning fungerar

Information om hur du konfigurerar djupstenciltestning finns i Konfigurera Depth-Stencil-funktioner. Ett djupstencilobjekt kapslar in djupstenciltillstånd. Ett program kan ange djupstenciltillstånd, eller så använder OM-fasen standardvärden. Blandningsåtgärder utförs per pixel om multisampling är inaktiverat. Om multisampling är aktiverat sker blandning per multisampling.

Processen med att använda djupbufferten för att avgöra vilken pixel som ska ritas kallas djupbuffertning, även kallad z-buffring.

När djupvärden når utdatasammanslagningssteget (oavsett om de kommer från interpolering eller från en pixelskuggare) kläms de alltid fast: z = min(Viewport.MaxDepth,max(Viewport.MinDepth,z)) enligt djupbuffertens format/precision med hjälp av flyttalsregler. Efter klämning jämförs djupvärdet (med DepthFunc) mot det befintliga djupbuffertvärdet. Om ingen djupbuffert är bunden klarar djuptestet alltid.

Om det inte finns någon stencilkomponent i djupbuffertformatet, eller om ingen djupbuffert är bunden, godkänns alltid stenciltestet. Annars ändras funktionaliteten från Direct3D 9.

Endast en djup-/stencilbuffert kan vara aktiv i taget. alla bundna resursvyer måste matcha djup-/stencilvyn (samma storlek och dimensioner). Det betyder inte att resursstorleken måste matcha, bara att visningsstorleken måste matcha.

Mer information om djupstenciltestning finns i självstudie 14.

Översikt över blandning

Blandning kombinerar ett eller flera pixelvärden för att skapa en slutlig pixelfärg. Följande diagram visar processen för att blanda pixeldata.

diagram över hur blandning av data fungerar

Konceptuellt kan du visualisera det här flödesdiagrammet som implementerats två gånger i utdatasammanslagningsfasen: den första blandar RGB-data, medan ett andra parallellt blandar alfadata. Information om hur du använder API:et för att skapa och ange blandningstillstånd finns i Konfigurera blandningsfunktioner.

Fixad funktionsblandning kan aktiveras separat för varje återgivningsmål. Det finns dock bara en uppsättning blandningskontroller, så att samma blandning tillämpas på alla RenderTargets med blandning aktiverat. Blandningsvärden (inklusive BlendFactor) är alltid fastklämda i intervallet för render-målformatet innan de blandas. Klämning görs per återgivningsmål, med respekt för måltypen renderas. Det enda undantaget är för float16-, float11- eller float10-formaten som inte är fastklämda så att blandningsåtgärder i dessa format kan göras med minst lika precision/intervall som utdataformatet. NaN och signerade nollor sprids för alla fall (inklusive 0,0 blandningsvikter).

När du använder sRGB-återgivningsmål konverterar körningen målfärgen till linjärt utrymme innan den utför blandning. Körningen konverterar det slutliga blandade värdet tillbaka till sRGB-utrymme innan värdet sparas tillbaka till återgivningsmålet.

Skillnader mellan Direct3D 9 och Direct3D 10:

  • I Direct3D 9 kan blandning med fast funktion aktiveras separat för varje återgivningsmål.
  • I Direct3D 10 och senare finns det en beskrivning av blandningstillståndet. Därför kan ett blandningsvärde anges för alla återgivningsmål.

Dual-Source färgblandning

Med den här funktionen kan utdatasammanslagningssteget samtidigt använda både pixelskuggningsutdata (o0 och o1) som indata till en blandningsåtgärd med det enskilda återgivningsmålet på plats 0. Giltiga blandningsåtgärder är: add, subtract och revsubtract. Giltiga blandningsalternativ för SrcBlend, DestBlend, SrcBlendAlpha eller DestBlendAlpha är: D3D11_BLEND_SRC1_COLOR, D3D11_BLEND_INV_SRC1_COLOR, D3D11_BLEND_SRC1_ALPHA, D3D11_BLEND_INV_SRC1_ALPHA. Blandningsekvationen och skrivmasken för utdata anger vilka komponenter pixelskuggningen matar ut. Extra komponenter ignoreras.

Det är odefinierat att skriva till andra pixelskuggningsutdata (o2, o3 osv.). du kanske inte skriver till ett återgivningsmål om det inte är bundet till plats 0. Att skriva oDepth är giltigt under dubbel källfärgsblandning.

Exempel finns i blandning av pixelskuggningsutdata.

Översikt över flera RenderTargets

En pixelskuggning kan användas för att återge till minst 8 separata återgivningsmål, som alla måste vara av samma typ (buffert, Texture1D, Texture1DArray och så vidare). Dessutom måste alla återgivningsmål ha samma storlek i alla dimensioner (bredd, höjd, djup, matrisstorlek, antal exempel). Varje återgivningsmål kan ha olika dataformat.

Du kan använda valfri kombination av återgivningsmålsfack (upp till 8). En resursvy kan dock inte bindas till flera återgivningsmålplatser samtidigt. En vy kan återanvändas så länge resurserna inte används samtidigt.

Översikt över Output-Write Mask

Använd en utdataskrivningsmask för att styra (per komponent) vilka data som kan skrivas till ett återgivningsmål.

Översikt över exempelmask

En exempelmask är en 32-bitars multisample-täckningsmask som avgör vilka exempel som uppdateras i aktiva återgivningsmål. Endast en exempelmask tillåts. Mappningen av bitar i en exempelmask till exemplen i en resurs definieras av en användare. För n-exempelåtergivning används de första n bitarna (från LSB) i exempelmasken (32 bitar det maximala antalet bitar).

I det här avsnittet

Ämne Beskrivning
Konfigurera Depth-Stencil funktioner
Det här avsnittet beskriver stegen för att konfigurera djupstencilbufferten och tillståndet djupstencil för fasen output-merger.
Konfigurera blandningsfunktioner
Blandningsåtgärder utförs på varje pixelskuggningsutdata (RGBA-värde) innan utdatavärdet skrivs till ett återgivningsmål. Om multisampling är aktiverat görs blandning på varje multisample. annars utförs blandning på varje pixel.

Polygoner som är coplanar i 3D-utrymme kan fås att verka som om de inte är coplanar genom att lägga till en z-bias (eller djupförskjutning) till var och en.

Grafikpipeline

pipelinesteg (Direct3D 10)