Skocz do zawartości

Pogadanka o double/triple buffer i ogólnie o optymalnych ustawieniach


Recommended Posts

Cześć,

Chciałbym spróbować rozłożyć na czynniki pierwsze cztery kombinacje

 

1.vsync+double buffer

2.vsync + triple buffer

3.no vsync

 

i określić wady, zalety każdej z nich i zalecane zastosowania.

 

Jest to temat w którym jest wyjątkowy bałagan w internecie, gdyż ludzie powtarzają zasłyszane WNIOSKI. I jedni mówią, że triple buffer zmniejsza lag inni że zwiększa. A to nie jest nawet całe spektrum problemu.

 

Prosiłbym o używanie umówionych określeń, by uniknąć nieporozumień:

 

Odświeżanie - ilość klatek, którą wyświetla monitor (nie zmienia się)

Framerate - ilość klatek na sekundę generowanych przez GPU bez ograniczeń(zmienia się co sekundę)

Frametime - tyle zajęło naszemu GPU wygenerowanie aktualnej klatki (zmienia się co kilka milisekund)

dFramerate = 1/frametime (zmienia się co kila milisekund)

Lag - łączny czas od rozpoczęcia generowania klatki do wyświetlenia jej na monitorze. Zakładam, że w momencie rozpoczęcia generowania jest aktualna. Pomijam inne czynniki, gdyż występują w każdej konfiguracji. Jednak byłoby dobrze jeśli ktoś umiałby wymienić je.

stuttering- dla uproszczenia podepnę pod to wszystkie rodzaje braku płynności

 

1.vsync+double buffer

 

Chyba najprostszy scenariusz. Jeśli GPU dFramerate > odświeżanie, to lag zawsze wynosi 1/odświeżanie. Jeśli wyniesie mniej to monitor musi wyświetlić zawartość tego samego bufora drugi raz co powoduje potężny stuttering

 

2. vsync + triple buffer

 

Jeśli GPU dFramerate > odświeżanie to GPU generuje klatkę do 2 bufora, a potem zabiera się za następną do trzeciego bufora. Jeśli wciąż monitor nie zakończył cyklu to GPU zapisuje do drugiego bufora itd.

Zatem GPU pracuje z pełną mocą cały czas, chociaż może zależy od implementacji? 

Monitor wykorzystuje najnowszą pełną klatkę. 

Przy dframerate 70 frametime wynosi 0,015 ms, ale czy jest to maxymalny lag? GPU może zacząć renderować klatkę w dowolnym momencie odświeżania.Jeśli zacznie ją przykładowo o t = 2ms :t należy do <0 ; 16,(6)> to przy dframerate 70 monitor 

nie wyświetli jej zatem będzie musiał wyświetlić poprzednią. Oznaczałoby to lag 16,(6)+ 15 - 2 = 29,(6) ms ! Zupełnie inaczej by było, gdyby dframerate > 2* odświeżanie. Niemożliwe byłoby wtedy rozpoczęciu renderu w poprzednim cyklu, a więcej niż co druga klatka by przepadała. Przy framerate 130 jeśli dobrze policzyłem to co siedem klatek zamiast jednej odrzucalibyśmy dwie. Maksymalny lag wynosiłby 1/65 ms co daje średni lag 2 razy mniejszy niż double buffered vsync, ale za to ZMIENNY, co przełożyłoby się na zmienną "prędkość" celownika podczas Vconst myszy. Na ile to przeszkadza w grze trudno powiedzieć. Również może być to różnie zaimplementowane i raz być tak jak ja sobie wyobrażam a raz np. po zapełnieniu 2 buforów GPU odpoczywa, albo co gorsza monitor rysuje poprzedni bufor, co ma tylko taki plus, że jak dframerate raz zejdzie poniżej 60fps ma w zapasie jedną klatkę. Mi się wydaje nie warte ciągłego lagu.

 

3.no vsync

GPU wypełnia bufor i przykładowo dla gry pokroju cs go generuje  3,4 klatki zanim zamienia się buforami z monitorem. Monitor otrzymuje 0,4 klatki o wieku 0,4*dframetime i 0,6 klatki o wieku poprzedniego dframetime + 0,4*dframetime.

Można również ograniczyć framerate w grze albo za pomocą np. programu Riva Tuner. Ale to chyba nie eliminuje tearingu i zwiększa lag. Oczywiście dla użytkowników, którzy mają problem z temperaturami i hałasem to jest sensowna opcja, aczkolwiek chyba nie jest to lepsza opcja niż Vsync double. Jak się to wszystko ma jeśli mamy do czynienia w monitorem o wysokim odświeżaniu? A może tylko freesync/gsync a reszta to szajs?

 

Jak widać nie bardzo umiem sobie to ułożyć, a temat mi się wydaje ciekawy i może warto go zrozumieć.  Jakie konfiguracje są dobre przy danych framerate/odświeżaniu/gatunku gry? Czekam na Wasze opinie.

 

 

PS. Ajj. Nie dodałem tagów. Da się jeszcze?

Edytowane przez Kamil369
Link to post
Share on other sites
  • 3 miesiące temu...

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Odpowiedz w tym wątku...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...