почему только 60 кадров в секунду действительно плавные в cocos2d?

Наверняка уже спрашивали, но нигде не могу найти...

В видеоленде 24 кадра в секунду и все, что выше, плавно. Cocos2d кажется плавным только при 60 кадрах в секунду или, может быть, немного меньше. Все, что находится между 30 и 50, определенно не является гладким, счетчик кадров в секунду не кажется точным ...

Почему это? Или только у меня такая ситуация?


person yurki    schedule 11.12.2012    source источник


Ответы (2)


На самом деле есть несколько причин такого поведения, и это не только cocos2d, но и эффект, наблюдаемый в любом игровом движке в средах с вертикальной синхронизацией (VSYNC) включен. На iOS VSYNC всегда включен, на ПК у вас обычно есть возможность отключить его, чтобы улучшить частоту кадров, если она постоянно ниже частоты монитора за счет разрыв экрана. Обычно ЖК-дисплеи, такие как устройства iOS, обновляют свой дисплей с частотой 60 Гц, обеспечивая максимальную скорость 60 кадров в секунду.

Cocos2D 1.x по умолчанию использует класс CADisplayLink для обновлений, Cocos2D 2.x использует исключительно CADisplayLink. CADisplayLink синхронизирует обновления с частотой обновления экрана. Это означает, что уведомление отправляется, когда экран закончил рисовать свое содержимое.

Когда вы получаете 60 кадров в секунду, все в порядке. Но если игре не удается вовремя отрендерить кадр для рендеринга 60 кадров в секунду, она получит следующее обновление только после завершения следующего обновления экрана. Это эффективно уменьшает частоту кадров вдвое, как только частота кадров падает чуть ниже 60 кадров в секунду — или, другими словами, как только ваш цикл обновления и рендеринга занимает больше 16,666 миллисекунд. Это означает, что вы можете иметь только дискретные частоты кадров 60, 30, 20 и 15 кадров в секунду (60, разделенные на 1, 2, 3 и 4) на iOS с обновлениями CADisplayLink.

Эффект весьма заметен, потому что частота кадров, которая колеблется между 60, 30, 20 и 15 кадрами в секунду — даже всего на долю секунды — не кажется плавной, главным образом потому, что она такая неустойчивая — неустойчивость — это то, что мы замечаем как «негладкое». ". Если это влияет на вашу игру, вы можете обнаружить, что ограничение частоты кадров до 30 кадров в секунду на самом деле сделает игру более плавной. У вас также есть больше времени для обновления и рендеринга между кадрами.

Стабильность частоты кадров фильма 24 кадра в секунду считается «плавной», но режиссеры также научились избегать сцен, в которых ограниченная частота кадров становится слишком очевидной. Например, они чертовски избегают того, что очень часто делают игры: прокрутки вбок, то есть бокового движения камеры или бокового движения объектов, проходящих мимо камеры.

Вы удивитесь, насколько плавнее могут быть фильмы, когда посмотрите «Хоббита» — это первый блокбастер, который идет со скоростью 48 кадров в секунду. Вы сразу заметите, насколько более «настоящими» и «живыми» стали персонажи фильма. Чтобы составить представление, посмотрите этот неофициальный трейлер фильма "Хоббит" со скоростью 48 кадров в секунду.

То, что cocos2d отображает в виде кадров в секунду, не является точным представлением переключения с 60 на 30, а затем на 20 и 15 кадров в секунду, а является средней частотой кадров в течение нескольких кадров. Поэтому, когда cocos2d печатает «45 кадров в секунду», это означает, что половину времени игра отображала 30 кадров в секунду, а другую половину — 60 кадров в секунду за последние пару кадров.

person LearnCocos2D    schedule 12.12.2012
comment
как всегда кладезь полезной информации. спасибо - person YvesLeBorg; 12.12.2012
comment
ой, пропустил ваш ответ на мгновение :). действительно очень познавательно, спасибо! - person yurki; 28.01.2013

Две основные проблемы.

Во-первых, это соответствие частоте обновления дисплея — все остальное, и вы получаете нерегулярное движение, которое глаз / мозг хорошо замечает. По крайней мере, быть кратным ему.

Во-вторых, размытие в движении. Фильм/видео имеет тенденцию иметь размытие движения, которое вводит зрителя в заблуждение, заставляя видеть непрерывное движение.

person JasonD    schedule 11.12.2012
comment
Я вижу, это имеет смысл. Но настольные мониторы также часто имеют частоту обновления 60 Гц. Я не могу припомнить, чтобы замечал проблемы с настольными играми, у которых fps ниже 50. Может быть, я ошибаюсь... Это что-то типичное для iphone? - person yurki; 12.12.2012
comment
Настольные мониторы обычно немного выше, чем в наши дни. Кроме того, некоторые более дешевые ЖК-дисплеи будут немного размытыми. В остальном ничего особенного не происходит. - person JasonD; 12.12.2012
comment
Я заметил мерцание на мониторах с частотой 60 Гц. - person user739711; 12.12.2012
comment
Настольные игры со скоростью 50 кадров в секунду будут более плавными, если VSYNC отключен. Это мерцание могло быть вызвано разрывом экрана, вызванным отключением VSYNC. - person LearnCocos2D; 12.12.2012