Tahap Output Merger (OM)

Tahap Output Merger (OM) menggabungkan berbagai jenis data output (nilai shader piksel, informasi kedalaman dan stensil) dengan konten buffer target render dan kedalaman/stensil untuk menghasilkan hasil alur akhir.

Tujuan dan penggunaan

Tahap Output Merger (OM) adalah langkah terakhir untuk menentukan piksel mana yang terlihat (dengan pengujian stensil kedalaman) dan memadukan warna piksel akhir.

Tahap OM menghasilkan warna piksel akhir yang dirender menggunakan kombinasi dari yang berikut ini:

  • Status alur
  • Data piksel yang dihasilkan oleh shader piksel
  • Konten target render
  • Isi buffer kedalaman/stensil.

Gambaran umum penpaduan

Memadukan menggabungkan satu atau beberapa nilai piksel untuk membuat warna piksel akhir. Diagram berikut menunjukkan proses yang terlibat dalam memadukan data piksel.

diagram cara kerja data penpaduan

Secara konseptual, Anda dapat memvisualisasikan bagan alur ini yang diimplementasikan dua kali dalam tahap Output Merger: yang pertama memadukan data RGB, sementara secara paralel, yang kedua memadukan data alfa. Untuk melihat cara menggunakan API untuk membuat dan mengatur status campuran, lihat Mengonfigurasi Fungsionalitas Blending.

Campuran fungsi tetap dapat diaktifkan secara independen untuk setiap target render. Namun hanya ada satu set kontrol campuran, sehingga campuran yang sama diterapkan ke semua RenderTargets dengan blending diaktifkan. Nilai campuran (termasuk BlendFactor) selalu dijepit ke rentang format target render sebelum memadukan. Penjepitan dilakukan per target render, dengan menghormati jenis target render. Satu-satunya pengecualian adalah untuk format float16, float11 atau float10 yang tidak dijepit sehingga operasi campuran pada format ini dapat dilakukan dengan setidaknya presisi/rentang yang sama dengan format output. Nol naN dan yang ditandatangani disebarluaskan untuk semua kasus (termasuk bobot campuran 0,0).

Saat Anda menggunakan target render sRGB, runtime mengonversi warna target render menjadi ruang linier sebelum melakukan penpaduan. Runtime mengonversi nilai campuran akhir kembali menjadi ruang sRGB sebelum menyimpan nilai kembali ke target render.

Penpaduan warna sumber ganda

Fitur ini memungkinkan tahap Output Merger untuk secara bersamaan menggunakan output shader piksel (o0 dan o1) sebagai input ke operasi perpaduan dengan target render tunggal di slot 0. Operasi campuran yang valid meliputi: tambahkan, kurangi, dan revsubtract. Persamaan campuran dan masker tulis output menentukan komponen mana yang dihasilkan oleh shader piksel. Komponen tambahan diabaikan.

Menulis ke output shader piksel lainnya (o2, o3 dll.) tidak terdefinisi; Anda mungkin tidak menulis ke target render jika tidak terikat ke slot 0. Menulis oDepth berlaku selama penpaduan warna sumber ganda.

Gambaran umum pengujian stensil kedalaman

Buffer stensil kedalaman, yang dibuat sebagai sumber daya tekstur, dapat berisi data kedalaman dan data stensil. Data kedalaman digunakan untuk menentukan piksel mana yang paling dekat dengan kamera, dan data stensil digunakan untuk menutupi piksel mana yang dapat diperbarui. Pada akhirnya, data nilai kedalaman dan stensil digunakan oleh tahap output-merger untuk menentukan apakah piksel harus digambar atau tidak. Diagram berikut menunjukkan secara konseptual bagaimana pengujian stensil kedalaman dilakukan.

diagram cara kerja pengujian stensil kedalaman

Untuk mengonfigurasi pengujian stensil kedalaman, lihat Mengonfigurasi fungsionalitas Depth-Stencil. Objek stensil kedalaman merangkum status stensil kedalaman. Aplikasi dapat menentukan status stensil kedalaman, atau tahap OM akan menggunakan nilai default. Operasi penpaduan dilakukan berdasarkan per piksel jika multisampling dinonaktifkan. Jika multisampling diaktifkan, penpaduan terjadi berdasarkan per-multisample.

Proses penggunaan buffer kedalaman untuk menentukan piksel mana yang harus digambar disebut buffering kedalaman, juga kadang-kadang disebut z-buffering.

Setelah nilai kedalaman mencapai tahap output-merger (baik berasal dari interpolasi atau dari shader piksel) nilai tersebut selalu dijepit: z = min(Viewport.MaxDepth,max(Viewport.MinDepth,z)) sesuai dengan format/presisi buffer kedalaman, menggunakan aturan floating-point. Setelah penjepitan, nilai kedalaman dibandingkan (menggunakan DepthFunc) terhadap nilai buffer kedalaman yang ada. Jika tidak ada buffer kedalaman yang terikat, tes kedalaman selalu lolos.

Jika tidak ada komponen stensil dalam format buffer kedalaman, atau tidak ada buffer kedalaman yang terikat, maka pengujian stensil selalu lolos.

Hanya satu buffer kedalaman/stensil yang dapat aktif pada satu waktu; tampilan sumber daya terikat apa pun harus cocok (ukuran dan dimensi yang sama) tampilan kedalaman/stensil. Ini tidak berarti ukuran sumber daya harus cocok, hanya saja ukuran tampilan harus cocok.

Gambaran umum masker sampel

Masker sampel adalah masker cakupan multisample 32-bit yang menentukan sampel mana yang diperbarui dalam target render aktif. Hanya satu masker sampel yang diizinkan. Pemetaan bit dalam masker sampel ke sampel dalam sumber daya ditentukan oleh pengguna. Untuk penyajian n-sampel, bit n pertama (dari LSB) dari masker sampel digunakan (32 bit itu jumlah maksimum bit).

Input

Tahap Output Merger (OM) menghasilkan warna piksel akhir yang dirender menggunakan kombinasi dari berikut ini:

  • Status alur
  • Data piksel yang dihasilkan oleh shader piksel
  • Konten target render
  • Isi buffer kedalaman/stensil.

Output

Gambaran umum masker output-write

Gunakan masker output-write untuk mengontrol (per komponen) data apa yang dapat ditulis ke target render.

Gambaran umum target beberapa render

Shader piksel dapat digunakan untuk merender ke setidaknya 8 target render terpisah, yang semuanya harus berjenis yang sama (buffer, Texture1D, Texture1DArray, dan sebagainya). Selain itu, semua target render harus memiliki ukuran yang sama di semua dimensi (lebar, tinggi, kedalaman, ukuran array, jumlah sampel). Setiap target render mungkin memiliki format data yang berbeda.

Anda dapat menggunakan kombinasi slot target render (hingga 8). Namun, tampilan sumber daya tidak dapat terikat ke beberapa slot render-target secara bersamaan. Tampilan dapat digunakan kembali selama sumber daya tidak digunakan secara bersamaan.

Di bagian ini

Topik Deskripsi

Mengonfigurasi fungsionalitas stensil kedalaman

Bagian ini mencakup langkah-langkah untuk menyiapkan buffer stensil kedalaman, dan status stensil kedalaman untuk tahap output-merger.

 

Alur grafik