artykuły

Porównanie jakości obrazu w grach – ATI kontra NVIDIA

Lupa – reaktywacja

82
3 sierpnia 2009, 03:35 Mieszko Krzykowski
Temat jakości obrazu i związane z nim wątpliwości wracają za każdym razem, gdy NVIDIA lub AMD wydają nowe sterowniki i twierdzą, że ich zainstalowanie znacząco poprawia wydajność kart graficznych w pewnych grach. Zawsze powstaje pytanie, czy producent nie oszukuje w jakiś sposób i czy te dodatkowe klatki na sekundę wynikają jedynie z wytężonej pracy inżynierów. Postanowiliśmy sprawdzić, jak to wygląda, i porównać jakość obrazu oraz ilość optymalizacji w kilkunastu popularnych grach. Poza tym przyjrzeliśmy się dodatkom oferowanym w sterownikach.

Spis treści

O wygładzaniu krawędzi słów kilka

Wygładzanie krawędzi na dobre zagościło w grach i sercach graczy. Na początku było wiele obaw: czy karty podołają tak skomplikowanemu zadaniu? Teraz nikt się nad tym nie zastanawia i często ta opcja jest włączana „odruchowo”. Okazuje się jednak, że to wcale nie jest taka oczywistość. Producenci prześcigają się w udostępnianiu w sterownikach trybów wygładzania krawędzi. O ile kiedyś wybór był prosty: były dostępne dwie opcje, dwu- i czterokrotne wygładzanie, to teraz jest to wiele bardziej skomplikowane.

Zanim jednak omówimy wariacje na temat wygładzania krawędzi, powiemy krótko, co to jest aliasing i w jaki sposób na ogół się go zwalcza.

Obiekty w scenie 3D są zbudowane z połączonych ze sobą wielokątów (na ogół są to trójkąty). Wielokąty te są opisywane za pomocą współrzędnych ich wierzchołków, a wszystko, co znajduje się pomiędzy wierzchołkami, to czysta matematyka. Problem z tą matematyką polega na tym, że ekran monitora potrafi wyświetlić tylko określoną liczbę pikseli, czyli ma ograniczoną dokładność, a żeby wyświetlić krawędź jakiegokolwiek przedmiotu, potrzeba prawie że nieskończonej dokładności. Aby zrozumieć problem, wystarczy spojrzeć na poniższe rysunki.

Pierwsza ilustracja przedstawia krawędź trójkąta, którą trzeba zrzutować na konkretne piksele. Oczywiście nie jest możliwe, aby monitor wyświetlił połowę piksela na biało, a połowę na żółto. Gdy nie ma żadnych mechanizmów wygładzania krawędzi, za końcową wartość koloru piksela przyjmuje się to, co znajduje się w jego centrum (co oznaczyliśmy jako kropki w centrum kwadratów). Rezultat jest taki, że zamiast linii prostej na ekranie wyświetlają się schodki – zjawisko tak dobrze znane wszystkim, którzy kiedykolwiek grali w jakąkolwiek grę wideo.

Widzimy więc, że aliasing wynika z tego, iż monitor ma ograniczoną rozdzielczość, natomiast świat, który jest na nim wyświetlany, w pewnym sensie ma rozdzielczość... nieskończoną. Wystarczyłoby zwiększyć rozdzielczość monitorów milion razy, stworzyć odpowiednio mocne karty graficzne, zdolne obsłużyć tak wysokie rozdzielczości, i problem aliasingu zniknąłby bezpowrotnie. Prawda, że proste?

Zanim to nastąpi, minie jeszcze trochę czasu, dlatego producenci sprzętu zaczęli kombinować, jak rozwiązać ten problem w inny sposób. Okazuje się, że oko ludzkie jest bardzo łatwo oszukać, i zaczęto to wykorzystywać do tworzenia metod wygładzania krawędzi.

Najprostszą metodą jest supersampling. Idea jego działania jest prosta. Dla każdego piksela na ekranie wybieramy na przykład cztery subpiksele, przetwarzamy je na nowo i na koniec wyliczamy średnią wartość ich kolorów, która będzie wartością koloru piksela wyświetlanego na ekranie. W praktyce oznacza to tyle, że przy supersamplingu czterokrotnym (czyli gdy chcemy mieć cztery próbki na pojedynczy piksel) obraz jest renderowany, jakby miał cztery razy większą rozdzielczość (dwa razy wyższy i dwa razy szerszy obraz), a na końcu „ściskany” do rozmiarów docelowych. Czyli jeśli przy rozdzielczości 1280×800 włączy się supersampling czterokrotny, to karta graficzna renderuje obraz o rozdzielczości 2560×1600 i tuż przed wysłaniem do monitora zmniejsza go do 1280×800 przez policzenie średniej z kolorów czterech sąsiadujących ze sobą pikseli.

Cały proces przedstawia powyższa ilustracja. Proces ten można bardzo łatwo zasymulować. Wystarczy zrobić zrzut ekranu w grze w rozdzielczości na przykład 800×600, następnie powtórzyć to w rozdzielczości 1600×1200 i zmniejszyć obraz do rozdzielczości 800×600. Przeprowadziliśmy taki eksperyment w grze Prince of Persia. Jest to duże uogólnienie, ale w dużej mierze pokazuje, o co w tym wszystkim chodzi.

Widzimy, że krawędzie zostały wygładzone. Problemem jest jednak to, że cały proces jest bardzo „kosztowny” – karta wykonuje praktycznie cztery razy więcej pracy, bo każdy subpiksel jest traktowany jak oddzielny piksel, który przechodzi przez wszystkie etapy renderowania, dla każdego z subpikseli jest pobierana próbka tekstury, zostaje też użytych znacznie więcej zasobów, bo trzeba przechowywać cztery razy więcej pikseli.

Na szczęście jest możliwe osiągnięcie bardzo zbliżonego efektu znacznie niższym kosztem. Wystarczy użyć multisamplingu – podstawowej metody wygładzania krawędzi w dzisiejszych grach. Na pierwszy rzut oka ta metoda jest bardzo podobna do supersamplingu. Także tu są pobierane dodatkowe próbki wewnątrz piksela. Różnica polega jednak na tym, że wszystkie z analizowanych subpikseli mają ten sam kolor co centrum bazowego piksela. Po co więc są pobierane dodatkowe próbki, skoro wszystkie subpiksele mają ten sam kolor, i w jaki sposób jest podejmowana decyzja o ostatecznym kolorze danego piksela?

Z każdym pikselem oprócz informacji o jego kolorze są powiązane informacje o jego wartości Z. Wartość Z określa „głębokość” danego piksela na ekranie – czyli mówi, co jest przed, a co za (na przykład że piksel odpowiedzialny za kolor krzesła jest bliżej postaci niż piksele składające się na ścianę za tym krzesłem). Wybierane przy multisamplingu subpiksele mają swoją własną wartość Z liczoną oddzielnie dla każdej próbki – czyli wszystkie subpiksele mają ten sam kolor, ale inną wartość Z. Na podstawie wartości Z tych subpikseli jest sprawdzane, czy należą one do tego samego trójkąta, czy nie, i ile subpikseli znajduje się na krawędzi wielokąta.

Przypuśćmy, że są pobierane cztery próbki na piksel (włączamy w grze czterokrotne wygładzanie krawędzi). Gdy używamy multisamplingu, to wszystkie cztery subpiksele mają wartość koloru obliczoną dla środka piksela, ale liczy się dla nich wartości Z i okazuje się, że w naszym testowym pikselu trzy próbki znajdują się na krawędzi trójkąta, a jedna poza nią, co daje współczynnik 3:1. Jest to informacja, że kolor bazowy powinien otrzymać 75% swojej intensywności, i w ten sposób po odpowiednim mieszaniu kolorów osiągana jest ostateczna barwa piksela. Jest to duże uproszczenie, bo ten proces może być przeprowadzany na setki sposobów, różniących się efektywnością. W każdym razie zalety są spore. Co prawda nadal trzeba przechowywać cztery razy więcej informacji o pikselach i zwiększa się ilość przesyłanych danych, jednak zamiast liczyć za każdym razem obraz o cztery razy większej rozdzielczości i dla każdego subpiksela liczyć od początku wartość jego koloru, sprawdza się tylko wartość Z subpikseli, co da się zrobić bardzo szybko. Na dodatek, gdy wszystkie cztery subpiksele leżą w obrębie tego samego trójkąta, nie są wykonywane nadmiarowe obliczenia. W przypadku supersamplingu, nawet gdy subpiksele są tego samego koloru, za każdym razem ich kolor jest liczony na nowo. To spore marnotrawstwo mocy obliczeniowej, szczególnie gdy patrzymy się na ścianę, która przeważnie składa się z dwóch dużych trójkątów pokrytych tą samą teksturą. Jednak wadą multisamplingu jest to, że nie rozwiązuje on problemu aliasingu tekstur. W końcu nie tylko na granicach wielokątów występują krawędzie, które mogą ulec aliasingowi – bardzo często również tekstury mają krawędzie czy linie, które mogą zostać „poschodkowane”. Na szczęście różne metody filtrowania tekstur radzą sobie z tym znakomicie. Coraz bardziej zaawansowane sposoby wykonywania multisamplingu sprawiają, że jesteśmy coraz bliżej „darmowego” wygładzania krawędzi. Przy supersamplingu, który jest metodą czysto „siłową”, spadek wydajności jest stały, i do tego bardzo duży.

Tutaj pojawiają się różnice w sposobie uzyskiwania wygładzania krawędzi przez różnych producentów. Jedną z podstawowych jest miejsce, z którego są pobierane próbki – a ma to bardzo duży wpływ na skuteczność wygładzania krawędzi, co demonstrują poniższe obrazki.

Pierwsze dwie ilustracje pokazują, co się dzieje, gdy użyje się standardowej metody wyboru miejsc pobierania próbek, a dwie następne – jak można to łatwo rozwiązać. Przy użyciu standardowej metody dobierania próbek (OGAAang. Ordered Grid Anti-aliasing), w której próbki są umiejscawiane na siatce, często dochodzi do sytuacji, gdy ostateczny kolor piksela zostaje określony bardzo nieprecyzyjnie. Wystarczy jednak tę siatkę obrócić, aby poprawić skuteczność wygładzania krawędzi (RGAA – ang. Rotated Grid Anti-aliasing). Oczywiście nie zastąpi to zwiększenia liczby próbek i subpikseli, ale okazuje się, że w praktyce pozwala to znacznie poprawić jakość czterokrotnego wygładzania krawędzi. W wyższych trybach często stosuje się losowe punkty pobierania próbek. Różni producenci przyjmują trochę inne założenia przy wyborze miejsc pobierania próbek, co prezentują poniższe ilustracje, pochodzące z programu DX9FSAAViewer.

Poza tym AMD i NVIDIA starają się przekonać do siebie za pomocą różnych dodatkowych rodzajów wygładzania krawędzi. Na przykład obaj producenci oferują specjalny tryb poprawiający jakość wygładzania przy przezroczystych teksturach. AMD nazywa to Adaptive Anti-aliasing, a NVIDIA – Transparency Anti-aliasing. Problem z przezroczystymi teksturami i multisamplingiem wynika z tego, że przy multisamplingu pobierana jest w danym pikselu tylko jedna próbka tekstury dla danego wielokąta. Przeważnie jest to zaleta multisamplingu, jednak przy przezroczystych teksturach okazuje się to wadą, ponieważ subpiksele nie „wiedzą”, czy wskazują na przezroczystą część tekstury, czy nie. Jeśli w środku piksela akurat znajduje się nieprzezroczysta część tekstury, to wszystkie subpiksele będą miały wynikający z tego kolor, nawet jeśli cała reszta piksela jest przezroczysta. W skrajnym przypadku z kropki może się zrobić kwadrat. Obaj producenci stosują podobnie działające rozwiązanie: jeśli w danym pikselu mamy do czynienia z wielokątem pokrytym przezroczystą teksturą, to jest do niego stosowany supersampling. Dzięki temu każdy subpiksel ma właściwą wartość koloru i „wie”, czy znajduje się na przezroczystej czy nieprzezroczystej części tekstury, ale jak powiedzieliśmy, nie przychodzi to za darmo.

Do omówienia pozostały techniki CFAA (ang. Custom Filter Anti-aliasing) oraz CSAA (ang. Coverage Sample Anti-aliasing). Pierwsza jest tworem AMD, druga – NVIDI-i.

AMD wpadło wymyśliło CFAA przy projektowaniu Radeonów HD 2900 XT. Firma uznała wtedy, że wygładzanie krawędzi nie powinno być wykonywane przez wyspecjalizowane jednostki, a raczej przez jednostki cieniowania, dzięki czemu twórcy gier mogliby dostosować sposób wygładzania krawędzi do swoich potrzeb. Filtry miały posłużyć jako demonstracja słuszności takiego podejścia. Użytkownicy kart AMD mają teraz dostęp do dwóch podstawowych filtrów: Narrow Tent i Wide Tent. Główna różnica pomiędzy wygładzaniem z filtrami i bez nich polega na tym, że w przypadku zwykłego wygładzania subpiksele są wybierane jedynie wewnątrz pojedynczego piksela. Gdy w grę wchodzą filtry, to przy określaniu ostatecznej barwy piksela liczą się również subpiksele pochodzące z sąsiednich pikseli.

Poza tym możemy wybrać tryb Edge Detect. Polega on na tym, że specjalny algorytm wykrywa, czy w obrębie danego piksela znajduje się krawędź – jeśli tak, to pobierane są dodatkowe próbki, aby lepiej określić wyjściowy kolor piksela. Wpływ tych wszystkich dodatkowych funkcji omawiamy w dalszej części artykułu.

Trochę więcej uwagi należy poświęcić wynalazkowi NVIDI-i, ponieważ jest on wykorzystywany w sposób, który może niezorientowanych użytkowników wprowadzać w błąd. Najpierw powiemy krótko, czym jest Coverage Sample Anti-aliasing.

Na początek dwa fragmenty slajdów:

Jeśli uważnie śledziliście wcześniejsze wywody, to powinniście rozumieć, o co chodzi na tych slajdach. ;) Ale wyjaśnimy to. Multisampling umożliwił to, że dla pojedynczego piksela pobierana jest tylko jedna próbka tekstury i wynik obliczeń jednostki cieniowania, zamiast liczenia wszystkiego od nowa dla każdego subpiksela. Mimo to każdy subpiksel nadal ma własną wartość Z, własne informacje związane z buforem znaczeń (ang. stencil) i przechowuje informacje o kolorze. NVIDIA w CSAA poszła jeszcze dalej: stworzyła tryb wygładzania krawędzi, w którym tylko niektóre próbki zawierają informacje związane z buforami Z i znaczeń i mają kolor, a część próbek jest „oszukana”. „Oszukane” próbki mają za zadanie jedynie informować o tym, czy są przykryte fragmentem jakiegoś trójkąta, czy nie, i wskazywać na odpowiedni kolor „prawdziwego” subpiksela z listy. Te dodatkowe subpiksele pomagają w dokładniejszym określeniu, ile procent piksela jest pokryte przez fragment jednego trójkąta, a ile przez fragment drugiego. Dzięki temu jest możliwe osiągnięcie efektu 16-krotnego multisamplingu za pomocą czterech subpikseli zawierających informacje o kolorze i zawartości buforów Z i znaczeń oraz 12 próbek pokrycia (ang. coverage samples). Końcowa jakość obrazu różni się niewiele od tego, co zapewniłby typowy 16-krotny multisampling, natomiast jest zużywana zacznie mniejsza ilość pamięci i w związku z tym przesyłana jest znacznie mniejsza ilość danych.

A gdzie to całe zamieszanie i wprowadzanie w błąd?

A tutaj:

NVIDIA umożliwia w sterownikach włączenie trybów CSAA zaraz obok normalnych trybów MSAA. Pytanie: które z trybów widocznych na liście to tryby MSAA, a które to CSAA? Otóż tryby MSAA są oznaczone jako 2x, 4x i... 8xQ. Wszystkie inne pozycje to tryby CSAA. Tryb oznaczony jako 8x to tak naprawdę czterokrotny multisampling z dodatkowymi czterema próbkami pokrycia. Tryb 16x to czterokrotny multisampling z 12 próbkami pokrycia, a tryb 16xQ to ośmiokrotny multisampling z dodatkowymi ośmioma próbkami pokrycia. Ilu z Was myślało, że pozycja oznaczona jako 8x to multisampling taki sam jak tryb 8x wybierany w ustawieniach gier albo sterownikach AMD? Widać, że NVIDIA jest pewna swego i uważa, że jej własne tryby wygładzania krawędzi zapewniają na tyle wysoką jakość, że można je oznaczyć tak jak zwykłe tryby wykorzystujące multisampling. Czy słusznie, czy nie – o tym w dalszej części artykułu.

Strona:
GacorZobacz profil
Poziom ostrzeżenia: 0%
Gacor2009.08.03, 04:24
-2#1
Jaki ty view distance stosowałeś to testując? Na NVIDII to klimatyzator prześwituje, a na ATI kosz czego nie raczyłeś zauważyć. Czy ty w ogóle sprawdzałeś ustawienia gry przed robieniem tych screenów?
szczupak90Zobacz profil
Poziom ostrzeżenia: 0%
szczupak902009.08.03, 06:47
Całe te porównanie może i wykaże jakieś różnicę, ale na screenach. Podczas rozgrywki myślę, że mało kto zawraca tym sobie głowę.
wuzetkowiecZobacz profil
Poziom ostrzeżenia: 0%
wuzetkowiec2009.08.03, 07:38
Pytanko do kumatych w temacie sterów ATI: jak wymusić działanie V-Sync w trybie 2D? Szybkie sceny podczas odtwarzania jakiegoś filmu(np youtube) w przeglądarce, gry otwarte w oknie na pulpicie itp, powodują błędy wyświetlanego obrazu typowe dla braku V-Sync. Ma ktoś pomysł, jak sobie z tym poradzić?
SwordOfUltimateZobacz profil
Poziom ostrzeżenia: 0%
SwordOfUltimate2009.08.03, 08:01
AMD FTW!!!

ale wysyp artow ostatnio
MacBirdieZobacz profil
Poziom ostrzeżenia: 0%
MacBirdie2009.08.03, 08:36
Mimo że artykuł można podsumować stwierdzeniem, że nie ma żadnych znaczących różnic w generowanej grafice, to podoba mi się z tego względu, że porusza nieco bardziej istotne kwestie, niż możliwości podkręcania o kolejny megaherc, mianowicie jakość. O niej wielu zdaje się zapominać. Dziękować, dziękować.
marc99Zobacz profil
Poziom ostrzeżenia: 0%
marc992009.08.03, 08:38
-2#6
Czyli aby było uczciwie, to przy testach wydajności, AF dla ATI ustawiamy o oczko niżej i porównujemy wydajność przy tej samej jakości obrazu?
Janke5Zobacz profil
Poziom ostrzeżenia: 0%
Janke52009.08.03, 08:39
tak z ciekawości... ile trwało przygotowanie tego arta? :)
rodziny nie ucierpiały przy tym? :E

wuzetkowiec @ 2009.08.03 07:38  Post: 285819
Pytanko do kumatych w temacie sterów ATI: jak wymusić działanie V-Sync w trybie 2D? Szybkie sceny podczas odtwarzania jakiegoś filmu(np youtube) w przeglądarce, gry otwarte w oknie na pulpicie itp, powodują błędy wyświetlanego obrazu typowe dla braku V-Sync. Ma ktoś pomysł, jak sobie z tym poradzić?

mam to samo, ale już się przyzwyczaiłem, mimo wszystko czekam na rozwiązanie tego problemu
KujtekZobacz profil
Poziom ostrzeżenia: 0%
Kujtek2009.08.03, 08:49
Uffff, przeczytałem, super, żebyście aby nie schodzili z ilością bo jakość jest ok :)
krzysiakZobacz profil
Poziom ostrzeżenia: 0%
krzysiak2009.08.03, 09:01
szczupak90 @ 2009.08.03 06:47  Post: 285818
Całe te porównanie może i wykaże jakieś różnicę, ale na screenach. Podczas rozgrywki myślę, że mało kto zawraca tym sobie głowę.

Jak nie zawraca jak zawraca :E Zapomniałeś o Sulac0...pewnie zaraz tu wpadnie i podważy wszystko co złe po stronie nV i dobre po stronie ATi/AMD :P
kanon7Zobacz profil
Poziom ostrzeżenia: 0%
kanon72009.08.03, 09:25
-3#10
GTA IV - Filtrowanie anizotropowe 2x, 4x, 8x, 16x i 16xHQ
Czy ktoś może mi to wytłumaczyć, przecież było mówione że GTA IV nie ma jakiego kol wiek wygładzania krawędzi a tu jest do 16 ???
Zaloguj się, by móc komentować
1