2012-12-11 31 views
8

Najprawdopodobniej zostało już zadane, ale nie mogę go nigdzie znaleźć ...dlaczego tylko 60 fps naprawdę gładko w cocos2d?

W wideopolu 24 fps i wszystko powyżej jest płynne. Wydaje się, że Cocos2d jest gładki tylko wtedy, gdy ma 60 klatek na sekundę, a może nieco mniej. Wszystko pomiędzy 30 i 50 z pewnością nie jest płynne, licznik fps nie wydaje się dokładny ...

Dlaczego tak jest? A może tylko ja mam taką sytuację?

Odpowiedz

25

Istnieje kilka przyczyn tego zachowania, a nie tylko efekt cocos2d, ale efekt widoczny w dowolnym silniku gry w środowiskach z włączoną wersją vertical synchronization (VSYNC). W systemie iOS VSYNC jest zawsze włączony, na komputerach zazwyczaj można go wyłączyć, aby poprawić liczbę klatek na sekundę, jeśli stale spadają one poniżej wskaźnika monitora kosztem screen tearing. Zazwyczaj wyświetlacze LCD, takie jak urządzenia z systemem iOS, aktualizują swój wyświetlacz z częstotliwością 60 Hz, co pozwala uzyskać maksymalnie 60 klatek na sekundę.

Cocos2D 1.x domyślnie używa aktualizacji CADisplayLink, Cocos2D 2.x używa wyłącznie oprogramowania CADisplayLink. CADisplayLink powoduje synchronizację aktualizacji z częstotliwością odświeżania ekranu. Oznacza to, że powiadomienie jest wysyłane, gdy ekran zakończy rysowanie jego zawartości.

Po uzyskaniu 60 fps wszystko jest w porządku. Ale jeśli gra nie jest w stanie wyrenderować klatki na czas, aby wyświetlić 60 klatek na sekundę, otrzyma kolejną aktualizację dopiero po zakończeniu następnego odświeżania ekranu. Skutecznie zmniejsza to o połowę liczbę klatek na sekundę, gdy ilość klatek na sekundę spadnie poniżej 60 fps - lub innymi słowy, gdy tylko zakończy się cykl renderowania aktualizacji o więcej niż 16.666 milisekund. Oznacza to, że możesz mieć tylko dyskretne klatek na sekundę 60, 30, 20 i 15 fps (60 podzielone przez 1, 2, 3 i 4) na iOS z aktualizacjami CADisplayLink.

Efekt jest dość zauważalny, ponieważ liczba klatek na sekundę, która waha się między 60, 30, 20 i 15 klatek na sekundę - nawet na ułamek sekundy - nie jest gładka, głównie dlatego, że jest niestabilna - niestałość jest tym, co zauważamy jako "nie gładki". Jeśli gra ma na to wpływ, może się okazać, że ograniczenie klatek do 30 klatek na sekundę sprawi, że gra będzie wyglądać gładko. Masz również więcej czasu na aktualizację & renderowania elementów między klatkami.

To niezmienność klatek filmu 24 klatki na sekundę, która jest pomyślana jako "płynna", ale także reżyserzy filmowi nauczyli się unikać scen, w których ograniczona liczba klatek na sekundę staje się zbyt oczywista. Na przykład, unikają oni jak cholera tego, co gry robią bardzo często: przewijaj się na boki, tj. Ruchy kamery w bok lub ruch obiektów na boki przechodzący przez kamerę.

Będziesz zaskoczony, jak płynne filmy mogą się przydać podczas oglądania filmu Hobbit - to pierwszy film, który można obejrzeć z prędkością 48 klatek na sekundę. Od razu zauważysz, o ile bardziej "prawdziwe" i "realistyczne" postacie w filmie są. Aby uzyskać wrażenie, sprawdź to unofficial 48 fps The Hobbit trailer.

Co cocos2d wyświetla jako fps nie jest dokładną reprezentacją przełącznika z 60 na 30 do 20 i 15 fps, ale na średnią liczbę klatek na kilka klatek.Dlatego, gdy cocos2d drukuje "45 fps", oznacza to połowę czasu, gdy gra wyświetla 30 fps, a druga połowa z 60 fps w ciągu ostatnich kilku klatek.

+1

jak zawsze, skarbnica przydatnych informacji. thks. – YvesLeBorg

+1

zapomniałeś 20fps (60/3) – Sebastian

+0

ah, oczywiście ... zaktualizowałeś – LearnCocos2D

2

Dwa główne problemy.

Najpierw dopasowuje się częstotliwość odświeżania wyświetlacza - cokolwiek innego i dostajesz nieregularny ruch, który jest dobry w wykrywaniu oka/mózgu. Przynajmniej znajduj się w wielokrotności tego.

Po drugie jest motion-blur. Film/wideo ma tendencję do poruszania się, co oszukuje widza do ciągłego ruchu.

+0

Rozumiem, to ma sens. Ale monitory stacjonarne często mają również częstotliwość odświeżania 60 hz. Nie mogę sobie przypomnieć, że miałem problemy z grami komputerowymi, które mają niższą liczbę klatek na sekundę niż 50. Może się mylę ... Czy jest to coś typowego dla iPhone'a? – yurki

+0

Monitory biurkowe są zwykle nieco wyższe niż te dni. Plus niektóre tańsze wyświetlacze LCD nieco się rozmazują. W przeciwnym razie nic szczególnego się nie dzieje. – JasonD

+0

Zauważyłem migotanie z monitorami 60Hz – user739711