Czy jest możliwe połączenie alfa wielu obiektów renderujących przy użyciu określonej alfa?

9

Powiedzmy, że renderuję cele od 0 do N, a RT 0 ma w czwartym składniku kanał alfa określony przez materiał, maskę lub coś.

Czy jest możliwe, aby sprzętowy kompozytor łączył cele renderowania od 1 do N przy użyciu alfa pierwszego celu renderowania?

Jeremyong
źródło

Odpowiedzi:

5

O ile mi wiadomo, ani DX, ani GL nie mają możliwości ponownego użycia alfa RT 0 do wszystkich operacji mieszania. Niestety nie wydaje się, że jest to coś obsługiwanego przez sprzęt.

Możesz skonfigurować różne tryby mieszania dla każdego celu renderowania lub włączyć mieszanie dla niektórych, a wyłączyć dla innych; Jednak jeśli dla renderowania jest włączone mieszanie, zawsze używa własnej alfa.

Istnieje również tryb o nazwie „mieszanie dwóch źródeł” (patrz dokument DX11 i dokument OGL ), który pozwala określić alfa do mieszania z całkowicie oddzielnym wyjściem z modułu cieniującego piksele, a nie kanałem alfa celu renderowania. Jednak ten tryb działa tylko z jednym celem renderowania na bieżącym sprzęcie.

O ile wiem, jedynymi opcjami mieszania kilku celów renderowania z tą samą alfą są:

  • Wyprowadza tę samą wartość alfa na wszystkie cele renderowania (poświęcając możliwość przechowywania innych wartości w kanale alfa, jak na przykład w odroczonym cieniowaniu).
  • Powtórz renderowanie w osobnym przebiegu dla każdego celu renderowania, stosując mieszanie z dwoma źródłami.
  • Użyj UAV / loadload-store, aby wykonać mieszanie w module cieniującym piksele (działa tylko wtedy, gdy geometria nie nakłada się na siebie w przestrzeni ekranu, ponieważ nie ma ochrony przed warunkami wyścigowymi; prawdopodobnie również trochę powolna).
  • Na sprzęcie, który go obsługuje, widoki rasteryzatora DX11.3 / DX12-Order , NV_fragment_shader_interlock lub INTEL_fragment_shader_ordering (ten ostatni również ujawniony przez procesory graficzne AMD). Są to trzy nazwy tego samego: w zasadzie „sekcja krytyczna” w module cieniującym pikseli, która pozwala na czytanie, modyfikowanie i zapisywanie tekstury atomowo w odniesieniu do innych wywołań modułu cieniującego piksele. Zasadniczo umożliwia dowolne programowalne mieszanie, ale prawdopodobnie jest dość powolne i dostępne tylko na najnowszym sprzęcie.
Nathan Reed
źródło
Tak, myślę, że to też był mój wniosek. Czy wiesz od razu, czy tak jest w przypadku DX12 lub (niepublikowanego) Vulkan? Jak już wspomniałeś, ma dość duże aplikacje do odroczonego renderowania i żadna z istniejących obecnie alternatyw nie wydaje się zadowalająca.
jeremyong,
@jeremyong Przykro mi, nie sądzę, żeby były jakieś zmiany w operacjach mieszania w DX12. Nie jestem pewien co do Wulkanu, ale byłbym zaskoczony; sprzęt do mieszania się nie zmienił. FWIW, w grach, nad którymi pracowałem, zrobiliśmy wariant punktora 3 dla odroczonych kalkomanii i wstępnie przetworzyliśmy geometrię, aby podzielić ją na nie nakładające się grupy.
Nathan Reed,
Gotcha dzięki za rekomendację. Odroczone naklejki są właśnie tym, co
wdrażam