Skocz do zawartości


Uwaga, ta strona używa Cookies
Stosujemy je, aby ułatwić Tobie korzystanie z naszego serwisu. Pamiętaj, że w każdej chwili możesz zmienić ustawienia dotyczące Cookies w ustawieniach swojej przeglądarki internetowej.
Dowiedz się więcej    
Akceptuję
Zdjęcie

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


  • Zaloguj się, aby dodać odpowiedź
1 odpowiedź w tym temacie

#1 Kamil369

Kamil369
  • Bywalec

  • 129 postów

Napisano 05 listopad 2018 - 22:05

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?

Użytkownik Kamil369 edytował ten post 05 listopad 2018 - 22:09

  • 0

#2 Kamil369

Kamil369
  • Autor tematu
  • Bywalec

  • 129 postów

Napisano 11 luty 2019 - 12:22

:<


  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych