Mungkinkah alpha mencampur beberapa target render menggunakan alpha yang ditentukan?

9

Katakanlah saya memiliki target render 0 hingga N dan RT 0 kebetulan memiliki komponen keempat pada saluran alpha yang ditentukan oleh bahan atau topeng atau sesuatu.

Apakah mungkin untuk membuat komposer perangkat keras membuat target render 1 hingga N menggunakan alfa target render pertama?

jeremyong
sumber

Jawaban:

5

Sejauh yang saya ketahui tidak ada cara di DX atau GL untuk menggunakan kembali alpha RT 0 untuk semua operasi blending. Sayangnya, sepertinya itu bukan sesuatu yang didukung oleh perangkat keras.

Anda dapat mengonfigurasi mode campuran yang berbeda untuk setiap target render, atau mengaktifkan blending untuk beberapa dan menonaktifkan untuk yang lain; namun, jika blending diaktifkan untuk target render, ia selalu menggunakan alfa sendiri.

Ada juga mode yang disebut "dual-source blending" (lihat DX11 doc dan OGL doc ), yang memungkinkan Anda menentukan alpha untuk blending dengan output yang sama sekali terpisah dari pixel shader, bukan saluran alpha target render. Namun, mode ini hanya berfungsi dengan satu target render pada perangkat keras saat ini.

Sejauh yang saya tahu, satu-satunya opsi untuk memadukan beberapa target render dengan alpha yang sama adalah:

  • Keluarkan alpha yang sama pada semua target render (mengorbankan kemampuan untuk menyimpan nilai-nilai lain ke saluran alpha seperti yang Anda lakukan dalam naungan yang ditangguhkan, misalnya).
  • Ulangi rendering dalam pass terpisah untuk setiap target render, menggunakan pencampuran sumber ganda.
  • Gunakan UAV / penyimpanan gambar untuk menjalankan blending dalam pixel shader (hanya berfungsi jika geometri tidak tumpang-tindih di ruang layar, karena tidak ada perlindungan terhadap kondisi lomba; juga mungkin agak lambat).
  • Pada perangkat keras yang mendukungnya, DX11.3 / DX12 Rasterizer-Order Views , NV_fragment_shader_interlock , atau INTEL_fragment_shader_ordering (yang terakhir juga diekspos oleh GPU AMD). Ini adalah tiga nama untuk hal yang sama: pada dasarnya bagian "kritis" dalam pixel shader yang memungkinkan Anda membaca-memodifikasi-menulis tekstur secara atom sehubungan dengan doa pixel shader lainnya. Ini pada dasarnya memungkinkan pencampuran yang dapat diprogram secara sewenang-wenang, tetapi mungkin cukup lambat, dan hanya tersedia pada perangkat keras terbaru.
Nathan Reed
sumber
Yap, saya pikir ini juga kesimpulan saya. Apakah Anda tahu jika ini adalah kasus dengan DX12 atau (yang belum dirilis) Vulkan? Ini memiliki aplikasi yang cukup besar untuk rendering yang ditangguhkan seperti yang telah Anda sebutkan dan tidak ada alternatif yang ada sekarang tampak memuaskan.
jeremyong
@ jeremyong Maaf, saya tidak berpikir ada perubahan pada operasi campuran di DX12. Tidak yakin tentang Vulkan, tetapi saya akan terkejut; perangkat keras pencampur belum berubah. FWIW, dalam permainan yang telah saya kerjakan kami melakukan varian bullet # 3 untuk decals yang ditangguhkan, dan memproses geometri untuk memisahkannya menjadi kelompok yang tidak tumpang tindih.
Nathan Reed
Gotcha terima kasih atas rekomendasinya.
Decals yang