FPS – 30fps a 60fps – czy widzimy różnicę? Tak!

Czy 60 klatek na sekundę to wyraźnie więcej niż 30? A może człowiek nie widzi więcej niż 24 klatek na sekundę? W skrócie – 60 klatek da lepszy efekt niż 30, a 120 da lepszy niż 60. W szczegółach to nieco bardziej skomplikowane.

Lot testowy na potrzeby tego artykułu - ładna ta sceneria, prawda? Za darmo dają!

Lot testowy na potrzeby tego artykułu – ładna ta sceneria, prawda? Za darmo dają!

Co ludzie mówią

Zacznijmy od inspiracji, czyli tego co ludzie wypisują na forach. Dyskusja o FPSach powtarza się raz po raz i zwykle kończy tym samym – z jednej strony pada zdanie „człowiek widzi tylko 24 klatki na sekundę i większej liczby nie zauważa”, a z drugiej – gracze dzielą się doświadczeniem, które jednoznacznie pokazuje, że 60 jest jednak lepsze niż 30. Czasami pojawia się jeszcze porównanie z obrazem telewizyjnym (teoretycznie ok. 24 lub 25 klatek). Też nie do końca trafione.

Punkt odniesienia – ile klatek w kinie, telewizji i na monitorze

24, 25 czy może 48, 50, a nawet 72?

Kino – 24. A może 48? 72?

Trochę historii. Klasyczne (czytaj – historyczne) projektory wyświetlały 24 klatki na sekundę. Uznano, że obraz wyświetlony na ekranie 24 razy na sekundę wystarczy, by widoczna była płynność ruchu. Jednak 24 projekcje na sekundę wyraźnie migotały. Szybko projektory zmodyfikowano. Obrotowa migawka wyświetlała każdą klatkę na ekranie dwa lub trzy razy. Efekt – wrażenie animacji nadal budowały 24 klatki filmu, ale wyświetlano je 48 lub 72 razy.

Telewizja – 24 /25 / 30. A może 48 / 50 / 60?

Telewizja przejęła z kina format 24 klatek, zmodyfikowany później do 25 i 30. Pojawił się ten sam problem – jak wyświetlić obraz, który nie będzie migotał? Technicznie nie było możliwe wyświetlenie całego obrazu dwukrotnie (w kinie sprawę załatwiała mechaniczna migawka, w telewizji sterowanie obrazem nie było już takie proste). Dla uniknięcia migotania zastosowano przeplot – przy każdym odświeżeniu obrazu zmieniano jedynie co drugą linię. W ten sposób tak obraz, który korzystał z 24 klatek wyświetlał się na ekranie 48 razy na minutę. Zmiana co drugiej linii powoduje charakterystyczne rozmazanie obrazu kiedy zatrzymamy odtwarzanie. Obserwowany efekt daje wrażenie płynności i nie migocze.

Monitor

Wyświetlacze kinowe i telewizyjne (kineskopowe) mają wspólną cechę – wyświetlają obraz określoną liczbę razy na sekundę. Między klatkami obraz jest czarny (w przypadku CTR może być przytłumiony lub niemal czarny). Monitor LCD wyświetla obraz cały czas, zmieniając jedynie wyświetlane klatki. To eliminuje zupełnie problem migotania. Pozostaje płynność klatkowania.

Tu jednak pojawia się druga różnica. Obraz kinowy jest gotowy (każda klatka jest fizycznie wyświetlana z taśmy filmowej). Obraz telewizyjny jest idealnie dopasowany do możliwości sprzętu. W obu przypadkach – każda klatka (w telewizorze – co druga linia każdej klatki) jest gotowa w ściśle określonym momencie i jest wyświetlona przez ściśle określony czas. Z monitorem jest inaczej.

Przygotowywanie obrazu a wyświetlanie obrazu

To co przyjmujemy jako „klatkowanie” lub „FPSy” gry to szybkość renderowania poszczególnych klatek przez komputer. Celowo stosuję potoczne pojęcie „klatkowanie”, a nie częstotliwość. I tak klatkowaniem nazywam ilość klatek renderowanych co sekundę. Częstotliwość to oznaczenie liczby cykli w jednostce czasu. Na czym polega różnica? Klatkowanie nie jest cykliczne. 30 klatek na sekundę oznacza, że tyle udało się wygenerować w sekundę. Nic nam nie mówi o czasie renderowania klatki numer 1, numer 10 i numer 30. Czasy mogły być dla poszczególnych klatek zupełnie różne. Oczywiście dłuższy lub krótszy czas renderowania oznacza dłuższe lub krótsze wyświetlanie poprzedniej klatki. I tu już można dostrzec problem, ale te różnice są potęgowane przez ekran.

W optymalnych warunkach na klasycznym 60-hercowym monitorze przy 30fps każda klatka powinna wyświetlić się dwukrotnie. I powinna być wyświetlona przez 33 milisekundy (2 razy po 16,(6)ms).

To teraz rozważmy nawet minimalne różnice w klatkowaniu. Niech jedna z klatek renderuje się 34 milisekundy (co po uśrednieniu daje 29 fps). Jeśli klatka nie będzie gotowa w momencie wyświetlenia obrazu – trzeci raz wyświetlona zostanie poprzednia. I tak jedna klatka pozostanie na ekranie przez 50 milisekund. 50 milisekund odpowiada już tylko 20 klatkom na sekundę.

Opisany przypadek dotyczy tylko minimalnego odstępstwa od idealnego czasu renderowania, a w niesprzyjających okolicznościach zobaczymy skoki płynności między 20 a 30 klatkami na sekundę. To jest różnica widoczna, a różnice czasu przygotowywania kolejnej klatki mogą być wyższe. Jeśli czas przygotowania klatki przekroczy 50ms – przepadnie nam 66 milisekund. Odpowiednik animacji o częstotliwości 15 klatek na minutę. To mniej niż te mniej płynne nieme filmy sprzed stu lat.

Więcej klatek – lepiej

To co nam daje lepsze klatkowanie? W większości przypadków przekłada się na lepsze realne klatkowanie.

Wyżej opisałem sytuację minimalnego opóźnienia przy 30fps – powodowało faktyczny spadek (na pojedynczych klatkach) do 20fps. Weźmy więc sytuację, w której mamy 40fps. Ile będzie realnie? W optymalnej sytuacji część klatek wyświetli się przez 33 milisekundy. Pozostałe przez 17 milisekund. Efekt wizualny – takie zmiany mogą być dostrzeżone, ale nie powinien to być efekt uciążliwy. Cały czas pozostaniemy powyżej 24 klatek, które w teorii mają dawać płynną animację ruchu.

Jeśli obraz będzie generowany nieoptymalnie – zapas jest spory. Przy 40fps każda klatka powinna być generowana maksymalnie 25 milisekund aby nie powodowała opóźnień. Przy dwóch klatkach wyświetlanych przez 33ms – 7 milisekund pozostaje w zapasie. Niemal dwukrotne wydłużenie generowania jakiejś klatki zmieści się poniżej 50 milisekund. Więc w takiej sytuacji zobaczymy klatkę przez 3 odświeżenia monitora. Czyli będziemy w sytuacji, która przy 30fps zdarza się bardzo często i którą można nazwać dobrą. Tutaj to będzie sytuacja zła.

Jeśli to samo rozważanie powtórzymy dla 60fps – sytuacja będzie jeszcze lepsza. Teoretycznie jedna klatka będzie odpowiadała jednemu odświeżeniu monitora. W praktyce – niektóre będą generowane wolniej i wyświetlą się z opóźnieniem. Co będzie przypominało wyświetlanie przy 40fps. Dalej – kwestia niezauważalna.

120 fps i więcej. Opłaca się czy nie? Hipotetycznie 120fps pozwoli utrzymać realne 60fps w niemal każdej sytuacji.

Jeszcze więcej? Im więcej fps tym mniejsza zmiana. I tym bardziej nietypowa sytuacja jest potrzebna, żeby zmianę zaobserwować.

120Hz? 144Hz? – wpływ na płynność

Powyższe rozważania dotyczą monitora 60Hz. A co jeśli zwiększyć częstotliwość monitora? Obraz będzie, w specyficznej sytuacji, bardziej płynny ze względu na skrócenie czasu wyświetlania każdej klatki. W opisanym przykładzie 30fps optymalnie każda klatka byłaby wyświetlana nadal przez 33 milisekundy (4 odświeżenia na monitorze 120Hz, 5 odświeżeń na 144Hz). Różnica byłaby widoczna przy dłuższym renderowaniu klatki. Przy 60Hz minimalne wydłużenie sięgało 17ms. Przy 120Hz – minimalne opóźnienie to 8,3ms. Przy 144Hz to mniej niż 7ms.

Wyświetlanie klatki poprzedzającej klatkę generowaną przez 34ms:

  • 60Hz – 50ms (odpowiednik 20 klatek na sekundę)
  • 120Hz – 42ms (odpowiednik 24 klatek na sekundę)
  • 144Hz – 40ms (odpowiednik 25 klatek na sekundę)

Różnica? Moim zdaniem wyraźna. Ale pomaga w specyficznej sytuacji. Nie pomoże jeśli czas renderowania klatek jest bardziej zróżnicowany.

Vertical Sync i FreeSync

Dwa rozwiązania, które wpływają na komfort. Idea ta sama, wykonanie diametralnie różne.

Vertical Sync

Synchronizacja pionowa, czyli w uproszczeniu – dopasowanie klatkowania do odświeżania monitora. W idealnym wykonaniu dla 60Hz utrzymujemy 60fps i każde odświeżenie jest powiązane z jedną klatką. W wykonaniu nieco uproszczonym – 60Hz synchronizujemy z 30fps i na każde dwa odświeżenia przypada jedna wygenerowana klatka.

W teorii – rozwiązanie idealne, ponieważ już 30 klatek powinno zapewnić pełną płynność odtwarzania. W praktyce (w tych grach, które sprawdzałem) V-Sync przy 30 klatkach wygląda wyraźnie mniej płynnie niż V-Sync przy 60fps. Podejrzewam, że V-Synch przy 30fps podlega w jakimś stopniu tym samym problemom, które opisałem wyżej. Może tylko z mniejszymi tolerancjami.

FreeSync

Dowolna synchronizacja wygląda znaczne ciekawiej. Dowolna, czyli odświeżenia widoku będą dopasowane do czasu generowania kolejnych klatek. Nie testowałem tego rozwiązania, więc nie mogę powiedzieć jaki dokładnie jest jego wpływ na płynność.

Podsumowanie – im więcej klatek tym lepiej, choć nie zawsze widać poprawę

24 klatki na sekundę wystarczają w kinie i w telewizji*. Tego nie można przenosić na ekrany LCD w skali 1 do 1, ponieważ mechanika wyświetlania obrazu jest inna i faktycznie nasze oko widzi 72 obrazy (kino) lub 50 / 60 obrazów (TV) na sekundę. Z przerwami. Wrażenie z oglądania obrazu wyświetlanego ciągle może być inne (i moim zdaniem jest na korzyść większej wrażliwości na brak płynności).

Drugi wniosek – więcej klatek nie musi oznaczać wyraźnej różnicy. 30 klatek i 40 klatek może w odbiorze robić dokładnie takie samo wrażenie – jeśli te klatkowania są dobrane prawidłowo. Jeśli nie – może się okazać, że zmienna długość poszczególnych klatek jest uciążliwa.

* – akurat w telewizji sporo się w ostatnich latach zmienia, więc to co wcześniej opisałem pasuje raczej do telewizji oglądanej na kineskopowym telewizorze. W przypadku ekranów LCD – pojawia się parę dodatkowych kwestii, które nie są przedmiotem tego tekstu.