Dlaczego niektóre gry używają jakiegoś wzorca ditheringu zamiast tradycyjnej alfa dla przejrzystości?

24

Ostatnio widziałem niektóre gry 3D (np . :), które GTA IVużywają pewnego rodzaju uporządkowanego ditheringu do symulacji przezroczystości / alfa.

Wielokąty nie są przezroczyste jak zwykle, ale zamiast tego renderują teksturę ditheringu, która stopniowo zmienia się z lewej na prawą, aby symulować przezroczystość:

wprowadź opis zdjęcia tutaj

Efekt nie jest nieprzyjemny, ale raczej zaskakujący na początku (w porównaniu z tradycyjnym mieszaniem alfa)

Z wyjątkiem wizualnego efektu estetycznego, jaki wywołuje, czy jest jakiś powód, dla którego niektóre gry to robią (lepsza wydajność, oszczędność przepustowości lub coś innego, o czym nie myślę)?

Szukałem w Internecie, ale nie znalazłem nic na temat tej techniki.

tigrou
źródło
Prawdopodobnie po prostu przyszedł ze stylem sztuki pikseli.
MichaelHouse
@ Byte56 Pixel art style? GTA IV? Co?
Nathan Reed
@NathanReed Heh, nie w GTA IV. OP wspomina, że ​​ostatnio widział to w grach.
MichaelHouse
1
Uważam tę technikę za przyjemniejszą niż mieszanie się alfa, gdy blaknące obiekty 3D zbliżają się zbyt blisko bliskiej płaszczyzny.
Andreas,

Odpowiedzi:

27

Jest to dość powszechne podejście do przejrzystości w grach wykorzystujących odroczone cieniowanie. Właściwa przezroczystość w ogóle nie działa dobrze z odroczonym cieniowaniem, ponieważ tylko dane jednej powierzchni (głębokość, normalny wektor, kolor itp.) Mogą być przechowywane w każdym pikselu, a odpowiednia przezroczystość obejmuje nakładanie się wielu powierzchni na piksel, z których każda wymaga niezależnego oświetlenie.

Silniki gier radzą sobie z tym na kilka sposobów:

  • Użyj cieniowania do przodu (ewentualnie ze zredukowanym modelem oświetlenia) dla przezroczystych powierzchni i odroczonego cieniowania dla nieprzezroczystych powierzchni. Przezroczyste powierzchnie należy narysować osobnym przejściem z sortowaniem od tyłu do przodu.
  • Użyj ditheringu, bardziej znanego jako stippling lub przezroczystość drzwi i ekranu, który działa z odroczonym cieniowaniem, ponieważ daje tylko jedną powierzchnię na piksel. Działa to szczególnie dobrze w przypadku przejść LOD, ponieważ zwykle kończą się one w ustalonym czasie, ograniczając czas, przez jaki widoczne jest stippling. Nie działa zbyt dobrze, powiedzmy, szklane okna w budynku.
  • Możliwe jest również użycie stippling, ale następnie zastosowanie rozmycia postprocesowego, które rekombinuje piksele, co daje przybliżenie odpowiedniej przezroczystości. Volition robi to w Saints Row the Third (i być może także w niektórych swoich innych grach) pod nazwą „ wywnioskowane oświetlenie ”. Może to wyglądać całkiem ładnie, ale rozmycie po procesie jest drogie.
  • Oczywiście istnieją wszystkie metody przezroczystości niezależne od kolejności , chociaż nie znam żadnej gry, która ich używa. Do tej pory są one przeznaczone tylko dla demonstracji technologii.

Można również zastosować kombinację tych podejść, np. Cieniowanie do przodu w przypadku szklanych okien i stippling dla przejść LOD.

Warto również zauważyć, że niektóre gry używają stippling do miękkich cieni. Jest to kompromis w zakresie wydajności; ładniejsze cienie wymagają większej liczby próbek tekstury w module cieniującym piksele, co zajmuje więcej czasu, ale można uzyskać dobre wyniki, używając mniejszej liczby próbek i losowo przesuwając ich pozycje. Przesunięcie losowe powoduje efekt stippling.

Nathan Reed
źródło
nie wiedziałem o technice odroczonego cieniowania (wyjaśnione tutaj: en.wikipedia.org/wiki/Deferred_shading ). Mówią również o możliwych problemach z alfa. Teraz ma sens. Dzięki za odpowiedź
tigrou
0

Jest to prosty kompromis wydajności. Mieszanie alfa wymaga odczytu z bieżącego bufora kolorów, podczas gdy ten rodzaj roztrząsania jest tylko do zapisu (lub oczywiście tylko do odrzucenia).

Możliwe jest połączenie tej techniki z multisamplingiem, który jest wówczas nazywany „ alfa” dla pokrycia .

sam hocevar
źródło
O jakim „kompromisie wydajności” mówisz? Wczesne Z wyłącza się, jeśli użyjesz odrzucenia w shaderze. Mieszanie odbywa się na sprzęcie i jest szybkie.
Tara,
Właśnie przetestowałem go w silniku na właściwej scenie w wysokiej rozdzielczości: włączenie lub wyłączenie mieszania dla WSZYSTKIEJ geometrii nie spowodowało żadnej różnicy w wydajności. Odpowiedź Nathana Reeda jest poprawna, ponieważ dithering jest zwykle używany w odroczonym renderowaniu.
Tara,