Frames Per Second, Explained

Dzisiaj zajmujemy się jednym z najczęściej zadawanych pytań, które widzimy na temat gier PC: ile klatek na sekundę potrzebujesz? Czy powinieneś działać z taką samą częstotliwością odświeżania, jak maksymalna częstotliwość odświeżania monitora, powiedzmy 60 FPS na monitorze 60 Hz, czy też jest korzyść z uruchamiania gier z dużo wyższą częstotliwością odświeżania, niż twój monitor może wyświetlić, powiedzmy 500 FPS?

Aby odpowiedzieć na to pytanie, musimy porozmawiać trochę o tym, jak procesor graficzny i wyświetlacz współpracują ze sobą, by wysyłać klatki do twoich gałek ocznych, oraz jak działają technologie takie jak Vsync.

Ale najważniejsze jest to, że uruchamianie gier przy ekstremalnie wysokiej liczbie klatek na sekundę, znacznie przekraczającej częstotliwość odświeżania twojego monitora, doprowadzi do bardziej responsywnych wrażeń w grach, z niższym postrzeganym opóźnieniem wejścia. To jest odpowiedź na pytanie dla tych, którzy nie chcą czekać do końca. Teraz porozmawiajmy o tym, dlaczego.

Editor’s Note: Ten felieton został pierwotnie opublikowany 2 sierpnia 2018 roku. Jest tak samo istotny i aktualny dzisiaj, jak wtedy, więc odbiliśmy go w ramach naszej inicjatywy #ThrowbackThursday.

Załóżmy, że mamy monitor ze stałą częstotliwością odświeżania 60 Hz. Innymi słowy, monitor aktualizuje swój wyświetlacz co 1/60 sekundy, czyli co 16,7 ms. Podczas uruchamiania gry nie ma gwarancji, że GPU jest w stanie wyrenderować każdą klatkę w dokładnie 16,7 milisekund. Czasem może to zająć 20ms, czasem 15ms, a czasem 8ms. Taka jest zmienna natura renderowania gry na GPU.

Z tą zmienną szybkością renderowania, istnieje wybór sposobu, w jaki każda wyrenderowana klatka jest przekazywana do monitora. Może przekazać nową klatkę do wyświetlacza zaraz po jej całkowitym wyrenderowaniu, co powszechnie znane jest jako uruchamianie gry z „Vsync” lub wyłączoną synchronizacją pionową, lub może poczekać, aż wyświetlacz będzie gotowy do odświeżenia przed wysłaniem nowej klatki, co znane jest jako „Vsync on”.

Vsync off

Używanie pierwszej metody, Vsync off, powoduje rozrywanie. Dzieje się tak, ponieważ wyświetlacz nie może aktualizować całego obrazu natychmiast, zamiast tego aktualizuje go linia po linii, zwykle od góry wyświetlacza do dołu. Podczas tego procesu nowa ramka może stać się gotowa z GPU, a ponieważ nie używamy Vsync, ramka jest natychmiast wysyłana do wyświetlacza. W rezultacie, w połowie odświeżania, monitor otrzymuje nowe dane i aktualizuje pozostałe linie na wyświetlaczu o te nowe dane. Zostajesz wtedy z obrazem, w którym górna połowa ekranu jest z poprzedniej ramki, a dolna połowa jest z nowej, świeżo dostępnej ramki.

Tearing

Zależnie od wyświetlanej zawartości, ten podział między nowymi i starymi ramkami w jednym odświeżeniu prezentuje się jako rozdarcie, lub widoczna linia między starymi i nowymi ramkami. Zazwyczaj jest to najbardziej zauważalne w szybko poruszających się scenach, gdzie jest duża różnica między jedną klatką a następną.

Choć wyłączenie Vsync prowadzi do rozdzierania, ma ono tę zaletę, że wysyła ramkę do wyświetlacza tak szybko, jak kończy się jej renderowanie, co zapewnia niskie opóźnienia między GPU a wyświetlaczem. Zachowaj to w pamięci na później.

Vsync włączony

Innym sposobem wyświetlania obrazu jest Vsync włączony. W tym przypadku, zamiast wysyłać nową klatkę natychmiast do wyświetlacza, GPU przesuwa każdą wyrenderowaną klatkę do bufora. Pierwszy bufor jest używany do przechowywania ramki, nad którą aktualnie pracuje, a drugi bufor jest używany do przechowywania ramki, którą aktualnie pokazuje wyświetlacz. W żadnym momencie podczas odświeżania drugi bufor nie jest aktualizowany, więc wyświetlacz pokazuje tylko dane z jednej w pełni wyrenderowanej klatki, a w rezultacie nie dostajemy tearingu od aktualizacji w połowie odświeżania.

Vsync on, a closer look

Jedynym punktem, w którym drugi bufor jest aktualizowany, jest okres między odświeżeniami. Aby to zapewnić, GPU czeka po zakończeniu renderowania klatki do momentu, gdy wyświetlacz ma się odświeżyć. Następnie tasuje bufory, rozpoczyna renderowanie nowej klatki i proces się powtarza. Czasami proces ten może obejmować wiele buforów, zanim ramka dotrze do wyświetlacza, ale jest to ogólna istota działania Vsync.

Gdy twój układ GPU jest zbyt wolny, by wyrenderować ramkę… następuje zacinanie się

W przypadku Vsync występują dwa problemy. Po pierwsze, jeśli szybkość renderowania Twojego układu GPU jest zbyt niska, by nadążyć za częstotliwością odświeżania wyświetlacza – powiedzmy, że jest on zdolny do renderowania z prędkością 40 FPS na wyświetlaczu 60 Hz – wtedy układ GPU nie wyrenderuje pełnej klatki na czas, by zdążyć przed rozpoczęciem odświeżania wyświetlacza, więc klatka jest powtarzana. Powoduje to zacinanie się obrazu, ponieważ niektóre klatki są wyświetlane tylko raz, a inne dwa razy.

Vsync włączony: 60Hz wyświetlacz, 200 FPS

Drugi problem pojawia się, gdy twój procesor graficzny jest bardzo szybki i z łatwością jest w stanie wyrenderować klatkę w przedziale częstotliwości odświeżania. Powiedzmy, że może renderować z prędkością 200 FPS, tworząc nową klatkę co 5 ms, z wyjątkiem tego, że używasz wyświetlacza 60 Hz z oknem odświeżania 16,7 ms.

Przy włączonej funkcji Vsync, Twój GPU ukończy następną klatkę do wyświetlenia w 5 ms, a następnie odczeka 11,7 ms przed wysłaniem klatki do drugiego bufora, aby wyświetlić ją na monitorze i rozpocząć następną klatkę. To dlatego z włączonym Vsync, najwyższa częstotliwość odświeżania jaką uzyskasz odpowiada częstotliwości odświeżania twojego monitora, jako że GPU jest zasadniczo „zablokowane” do renderowania nie szybciej niż częstotliwość odświeżania.

Teraz to w tym momencie jest wiele zamieszania.

Często słyszymy rzeczy w stylu „zablokowanie GPU do odświeżania mojego monitora za pomocą Vsync jest świetne, ponieważ jeśli renderuje szybciej niż częstotliwość odświeżania, te klatki są marnowane, ponieważ monitor nie może ich pokazać, a wszystko co dostaję to rozrywanie”. Wiele osób wskazuje na oszczędność energii dzięki użyciu Vsync; twój GPU nie musi pracować tak ciężko, nie ma żadnych korzyści z działania przy liczbie klatek wyższej niż częstotliwość odświeżania monitora, więc działaj przy zablokowanych FPS i oszczędzaj trochę energii.

Możemy zobaczyć, dlaczego ludzie mogliby dojść do tego wniosku i jest w tym trochę prawdy, ale ogólnie nie jest to dokładne. A powodem tego jest to, że nie bierzesz pod uwagę czasu w jakim przetwarzane są dane wejściowe i jak długo zajmuje im zmaterializowanie się na ekranie.

Vsync on including input

Aby wyjaśnić dlaczego tak jest, spójrzmy na wykres Vsync on, ale nałóżmy na niego dane wejściowe z myszy i klawiatury, które są zazwyczaj zbierane co 1ms. Użyjmy również tego samego przykładu, w którym mamy układ GPU zdolny do renderowania przy 200 FPS i wyświetlaczu 60 Hz.

Z Vsync i prostym systemem buforowania, w tym uproszczonym wyjaśnieniu, układ GPU zaczyna renderować klatkę odpowiadającą wejściom myszy, gdy tylko je otrzyma, w czasie 0. Następnie potrzebuje 5ms na wyrenderowanie ramki i czeka kolejne 11.7ms zanim wyśle ją do bufora wyświetlacza.

Wyświetlacz następnie potrzebuje trochę czasu na otrzymanie ramki do wyrenderowania i fizycznie aktualizuje wyświetlacz linia po linii z tą informacją.

Vsync na włączeniu wejścia

Nawet w najlepszym przypadku, patrzymy na opóźnienie co najmniej 16.7ms pomiędzy twoim wejściem a tym, kiedy wyświetlacz może zacząć pokazywać ci wyniki tego wejścia.

Gdy uwzględnimy opóźnienie wejścia na wyświetlacz, czas przetwarzania przez CPU i tak dalej, opóźnienie między wejściem a odświeżaniem ekranu może z łatwością przekroczyć 50ms.

Vsync off włączając wejście, 60Hz wyświetlacz, 200 FPS

Przyjrzyjrzyjrzyjrzyjmy się teraz wykresowi Vsync off. GPU renderuje nieprzerwanie, niezależnie od tego, kiedy wyświetlacz jest odświeżany, potrzebując 5 ms na przekształcenie danych wejściowych w kompletną klatkę. Wyświetlacz może wtedy natychmiast rozpocząć wyświetlanie tej nowej klatki, choć może to być tylko jej część. W rezultacie opóźnienie pomiędzy wejściem użytkownika do gry, a momentem, w którym wyświetlacz może rozpocząć wyświetlanie wyników tego wejścia, zmniejsza się z 16,7 ms do zaledwie 5 ms. I nie będzie żadnych dodatkowych buforów w rzeczywistych implementacjach; to jest tak szybkie jak to, plus input lag twojego monitora.

I tu właśnie dostajesz przewagę. W tym przykładzie, praca przy 200 FPS z wyłączonym Vsync na monitorze 60 Hz zmniejsza opóźnienie wejściowe do 5ms, podczas gdy z włączonym Vsync, opóźnienie to wynosi co najmniej 16.7ms, jeśli nie więcej.

Nawet jeśli wyświetlacz nie jest w stanie wyświetlić wszystkich 200 klatek na sekundę w całości, to co wyświetla co 1/60 sekundy jest produkowane z wejścia znacznie bliższego w czasie do tej klatki.

To zjawisko, oczywiście, odnosi się również do monitorów o wysokiej częstotliwości odświeżania. Przy 144 Hz, na przykład, będziesz w stanie zobaczyć o wiele więcej klatek w każdej sekundzie, więc otrzymasz płynniejsze i bardziej responsywne doświadczenie. Ale praca przy 200 FPS z wyłączonym Vsync zamiast 144 FPS z włączonym Vsync nadal da Ci różnicę między 5ms a nawet 7ms opóźnienia na wejściu.

Teraz, gdy mówimy o różnicach w milisekundach, prawdopodobnie zastanawiasz się, czy faktycznie możesz zauważyć tę różnicę w grach.

Zależnie od rodzaju gry, w którą grasz, różnica może być od bardzo zauważalnej, do żadnej różnicy. Szybka gra, taka jak CS: GO, działająca z prędkością 400 FPS na monitorze 60 Hz, z opóźnieniem wejściowym w najlepszym przypadku około 2,5 ms, będzie znacznie lepiej reagować na ruchy myszy niż ta sama gra z prędkością 60 FPS i opóźnieniem 16,7 ms (lub większym).

W obu przypadkach wyświetlacz pokazuje nową klatkę tylko 60 razy na sekundę, więc nie będzie to tak płynne, jak w przypadku 144 Hz lub 240 Hz. Ale różnica w opóźnieniach wejściowych jest ogromna; praca z prędkością 400 FPS pozwala na przesyłanie danych wejściowych do wyświetlacza prawie 7 razy szybciej, jeśli nie więcej. Wypróbuj to sam, a na pewno poczujesz różnicę w szybkości reakcji.

I nie wyciągnęliśmy tego wyjaśnienia znikąd, w rzeczywistości Nvidia zna ograniczenia Vsync w zakresie opóźnień wejściowych, dlatego zapewnia alternatywę o nazwie Fast Sync (alternatywa AMD nazywa się Enhanced Sync). Ta technika synchronizacji wyświetlania jest jak połączenie Vsync on i Vsync off, dając to co najlepsze z obu światów.

Fast Sync działa poprzez wprowadzenie dodatkowego bufora do potoku Vsync on, zwanego buforem ostatniego renderowania. Pozwala to układowi GPU na kontynuowanie renderowania nowych klatek do bufora wstecznego, przechodząc po zakończeniu do bufora ostatnio renderowanego. Następnie podczas odświeżania wyświetlacza, ostatni renderowany bufor jest przesuwany do bufora przedniego, do którego ma dostęp wyświetlacz.

Fast Sync / Enhanced Sync

Zaletą tego rozwiązania jest to, że GPU nie czeka już po ukończeniu klatki na odświeżenie wyświetlacza, jak to ma miejsce w przypadku włączonego Vsync. Zamiast tego, GPU kontynuuje renderowanie klatek, więc gdy wyświetlacz uzyskuje dostęp do klatki na początku okresu odświeżania, klatka ta została wyrenderowana bliżej okna odświeżania. Zmniejsza to opóźnienia na wejściu. Jednak w przeciwieństwie do wyłączonego Vsync, Fast Sync dostarcza ukończoną ramkę do wyświetlacza na początku każdego odświeżania, zamiast po prostu wypychać ramkę do wyświetlacza natychmiast, i to właśnie ta technika eliminuje tearing.

Fast Sync działa tylko wtedy, gdy częstotliwość odświeżania jest wyższa niż częstotliwość odświeżania wyświetlacza, ale udaje się zapewnić bardziej responsywne wrażenia z gry bez tearingu. I oczywiście AMD ma odpowiednik o nazwie Enhanced Sync.

Mam nadzieję, że to wyjaśnienie rozwieje niektóre z waszych pytań na temat tego, dlaczego uruchamianie gier powyżej maksymalnej częstotliwości odświeżania monitora zapewnia bardziej responsywne wrażenia w grach i dlaczego możliwość uruchamiania gier z wyższą częstotliwością odświeżania jest zawsze zaletą, nawet jeśli może się wydawać, że wasz monitor nie może tego wykorzystać.

Jedna ostatnia uwaga: nie omawialiśmy tutaj technologii synchronizacji adaptacyjnej, takich jak G-Sync i FreeSync, a to dlatego, że mówiliśmy głównie o uruchamianiu gier powyżej maksymalnego odświeżania, gdzie synchronizacja adaptacyjna nie ma zastosowania. Istnieje wiele różnych metod synchronizacji, ale synchronizacja adaptacyjna różni się znacznie od Vsync i Fast Sync, o których mówiliśmy, i przynajmniej w tej dyskusji nie jest istotna.

Dalsza lektura
  • Najlepsze monitory dla graczy
  • FreeSync 2 wyjaśnione
  • Najlepsze karty graficzne 2018
Skróty zakupowe
  • Radeon RX 570 na Amazon, Newegg
  • Radeon RX 580 na Amazon, Newegg
  • GeForce GTX 1060 6GB na Amazon
  • GeForce GTX 1070 Ti na Amazon, Newegg
  • GeForce RTX 2070 na Amazon, Newegg
  • GeForce RTX 2080 na Amazonie, Newegg
  • GeForce RTX 2080 Ti na Amazonie, Newegg

Kredyt masztowy: Photo by Jakob Owens

.

Articles

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.