Belirli bir alfa kullanarak birden fazla oluşturma hedefini alfa harmanlamak mümkün mü?


9

Diyelim ki 0 ile N arasındaki hedeflerim var ve RT 0, dördüncü bileşeninde bir malzeme veya maske veya başka bir şeyle belirtilen bir alfa kanalına sahip oluyor.

İlk oluşturucu hedefin alfa'sını kullanarak donanım birleştirici karışımının 1'den N'ye kadar hedefleri oluşturması mümkün müdür?

Yanıtlar:


5

Bildiğim kadarıyla, DX veya GL'de RT 0'ın alfa'sını tüm karıştırma işlemleri için yeniden kullanmanın bir yolu yok. Ne yazık ki, donanım tarafından desteklenen bir şey gibi görünmüyor.

Her oluşturma hedefi için farklı karışım modları yapılandırabilir veya bazıları için karıştırmayı etkinleştirebilir ve diğerleri için devre dışı bırakabilirsiniz; ancak, bir oluşturma hedefi için karıştırma etkinleştirilirse, her zaman kendi alfa değerini kullanır.

Ayrıca , oluşturma hedefinin alfa kanalını değil, piksel gölgelendiriciden tamamen ayrı bir çıktıyla karıştırma için alfa belirtmenize olanak tanıyan "çift kaynaklı karıştırma" ( DX11 doc ve OGL doc adlı ) adlı bir mod da vardır . Ancak bu mod, geçerli donanımda yalnızca bir oluşturma hedefi ile çalışır.

Anlayabildiğim kadarıyla, birkaç alfa hedefini aynı alfa ile karıştırmak için tek seçenek şunlardır:

  • Tüm render hedeflerine aynı alfa çıktısı alın (örneğin ertelenmiş gölgelendirme gibi alfa kanalına başka değerler depolayabilme yeteneğinden ödün vererek).
  • Çift kaynak harmanlamayı kullanarak her bir oluşturma hedefi için oluşturmayı ayrı bir geçişte tekrarlayın.
  • Piksel gölgelendiricideki karıştırmayı yürütmek için İHA'ları / görüntü yükleme deposunu kullanın (yalnızca yarış alanında geometri kendiliğinden çakışmıyorsa çalışır, çünkü yarış koşullarına karşı koruma yoktur; muhtemelen biraz yavaştır).
  • Onu destekleyen donanımda, DX11.3 / DX12 Rasterizer-Order Views , NV_fragment_shader_interlock veya INTEL_fragment_shader_ordering (ikincisi AMD GPU'lar tarafından da maruz bırakılır). Bunlar aynı şey için üç isimdir: temel olarak piksel gölgelendiricisinde diğer piksel gölgelendirici çağrılarına göre bir dokuyu atomik olarak okumanıza, değiştirmenize-yazmanıza izin veren bir "kritik bölüm". Temelde keyfi programlanabilir harmanlamayı mümkün kılar, ancak muhtemelen oldukça yavaştır ve sadece son donanımlarda kullanılabilir.

Evet, bence bu da benim sonucum. DX12 veya (yayınlanmamış) Vulkan için durumun böyle olup olmadığını hazırlıksız biliyor musunuz? Bahsettiğiniz gibi ertelenmiş oluşturma için oldukça büyük uygulamalara sahiptir ve mevcut alternatiflerin hiçbiri şu anda tatmin edici görünmemektedir.
jeremyong

@jeremyong Maalesef, DX12'de karıştırma işlemlerinde herhangi bir değişiklik olduğunu düşünmüyorum. Vulkan hakkında emin değilim ama şaşırırdım; karıştırma donanımı değişmedi. FWIW, üzerinde çalıştığım oyunlarda ertelenmiş çıkartmalar için 3 numaralı mermi çeşidi yaptık ve üst üste binmeyen gruplara ayırmak için geometriyi önceden işledik.
Nathan Reed

Tavsiye için teşekkürler. Ertelenen çıkartmalar tam olarak uyguladığım şey
jeremyong
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.