"Привязка" к FPS и "дергание" экрана

FPS (Frames Per Second) - количество обновлений (кадров) экрана в секунду.

"Привязка к FPS" - у меня нет определения этому термину.

"Дергание экрана" - бытовая характеристика скачкообразных движений экранных элементов (далее спрайтов).

Я обратил внимание на ряд замечаний касающихся привязки к FPS и так называемому "дерганию экрана".
Для нашей игры значение FPS может меняться от 10 до 33, причем максимальным (и стандартным) является величина 33. Не потому что мы не умеем больше, а потому что мы решили прогнать beta-версию именно в этом диапазоне.
Эффект "дергания" происходит в результате того, что смещение спрайта за один такт (при FPS=33 1 такт = 1/33=30 мс) производится не на минимальное количество пикселей (чаще всего минимальное количество = 1 пиксель) а на большее. В текущей версии Winplex (0.851) смещение производится на 4 - 8 пикселей (справедливости ради уточню, что базовым смещением является 8 пикселей, при величине спрайта 32, т.е полное смещение спрайта производится в 4 такта), но об этом после.
Так вот насчет неправильности привязки к FPS. Рассмотрим ситуацию: каждые 30 мс (1/33 секунды) программа меняет позицию спрайта, какое значение FPS является минимально достаточным, чтобы синхронно отразить эти изменения на экране? Мы остановились на значении 33. Для нашего частного случая более и не требуется. Хотя можно сделать FPS=66 или FPS=99 и так далее лишь бы кратно 33. Но смысла в этом не вижу никакого, экран будет обновляться вхолостую, т.к. позиция спрайтов за это время не успеет измениться. Отвязаться от FPS, разумеется, можно, но тогда придется синхронизировать FPS с частотой изменения положений спрайта (имеется в виду допустимых изменений). А это все равно привязка к FPS как не назови подобную синхронизацию, (пусть меня поправят, если я не прав, аргументарно конечно). А если не синхронизировать вовсе эти две характеристики то произойдет следующее: экран, обновляясь, часто будет работать вхолостую, наверно это не страшно, зачем ресурсы компьютера экономить ;) , или, что еще хуже, будет пропускать изменения положений, чем хуже компьютер, чем чаще и длительнее пропуски, Pentium II в данном случае будет просто отстойным компьютером, хотя я это и так знаю, сам за таким сижу ;) .
А теперь вернемся к дерганию, а именно к нашему случаю. Как вы думаете, многие ли компьютеры смогут держать FPS >100 при нехитрых действиях небольшого количества спрайтов в режиме 1024 x 768 (этот режим наиболее оптимален для игры в Winplex)? Непросто ответить. Наверно, если неплохой компьютер типа Pentium IV или Athlon 1500 иди Celeron 1800 такая проблема и не встанет. А у всех ли такие компьютеры? Я уверен - далеко не у всех. Все бедность наша :( В нашем офисе (мы занимаемся разработкой программного обеспечения) 10 компьютеров. Я сижу за компьютером Pentium II 433, а мой коллега (а также соавтор Winplex) за компьютером Celeron 700 и это лучший комп в офисе. Ситуация совершенно типичная. Подход к железу коммерческий - принцип "минимальной необходимости". На моем компьютере предел FPS=32 (это при разрешение 800 x 600 в полноэкранном режиме) у Сергея (КитаЯца) FPS=51. Мы поставили на наши машины один из современных, плавных версий Supaplex-а (я знаю три различных версии этой игры от разных авторов). На моем компьютере программа запустилась и встала. Т.е. Мерфи вылупился на меня и ни с места в течение часа, а у Сергея Мерфи двигался со скоростью 1 пиксель в секунду. Справедливости ради хочу сказать что, поставив на домашние компьютеры, мы с удовольствием поюзали эту программу. Насладились графикой и плавностью. Наши домашние компы это Атлоны с частотой более 1000 с акселератором и подсосом (типа мерседесы-ситроены). Видимо эта игра позиционируется на машинах такого класса. Я не хочу обижать или рекламировать автора этой версии. Она имеет место быть, а автор заслуживает уважения (насколько я предпологаю, он один поднимает этот проект, притом в технологии OpenGl. Или не один? Или не в OpenGl? Или не поднимает? ;).
Вернемся к нашей проблеме. Напоминаю - у нас происходит дергание, потому что смещение спрайтов производится на 4-8 пикселей. Так вот это сделано совершенно осознано, с целью охватить наиболее больший парк компьютеров. А вот теперь самое главное: это не конечный вариант нашей программы (версия то beta). В финальной версии появится параметр КОЭФИЦИЕНТ ПЛАВНОСТИ, который можно будет установить в пределах возможностей Вашей машины. А это значит, что движения будут в один пиксель для достаточно мощных машин. Не вижу ни одной причины, чтобы так называемая привязка к FPS помешала этому. Просто в режиме максимальной плавности FPS должен быть равным 33x8=264. А у кого компьютеры похуже будут играть в "дискретном режиме". Хотя я лично дергания никакого не замечаю (теоретически знаю, что он должно быть, но не более того). Привык, наверное?
Успехов
.
С уважением Голосов Вячеслав
Директор по проектированию ЗАО "Тольяттинская электронная компания"
19 февраля 2003г.


Комментарий от Сергея Валерьевича (ака KuTaЯца)

Тэкс…
Своими словами и попроще объясню.
По поводу допустимого FPS мы вели меж собой продолжительную полемику: суть состояла в следущем: как делать игру - чтобы все было супер плавно и красиво, или чтобы было ВСЕМ ДОСТУПНО. Остановились на последнем, т.е Мерфи (ну все прочие объекты в игре) за один ход смещаются на 8 (в режком случае на 4) пикселя за счет чего мы ЗНАЧИТЕЛЬНО разгрузили ЦП и нагузку на видео.
Теперь сыпятся жалобы: "то у вас не плавно", "это у вас дергается"… Тьфу! Сами знаем. Сознательно так сделали. Теперь (для тех кто из вышепреведенной статьи не понял) по поводу никого FPS: поскольку объекты за один ход проходят сразу по 8-4 пикселей большего чем 33 (именно в нашем случае) FPS не требуется, экран будет обновлятся в холостую!!!
Короче, если мы сейчас перепижем смещение объектов на 1 пиксель и завяжем FPS по максимуму, т.е сколько компьютер позволяет, то (извините) количество компьютеров на которых игра будет хоть сколько-то играбельна резко уменьшится. Вот так вот!
И последнее. Будет вам плавность, подождите малость. Мы горячку пороть не будем по двум причинам: программы стараемся не "тяп-ляп" писать, а на это время нужно, и второе (уж извините) проект полностью держится ТОЛЬКО на интузиазме авторов, так что мы больно-то никому ничего не должны и никакие сроки нас не поджимают… Извините. Вот собственно и все. Спасибо и всего хорошего.
PS. Жду комментариев на форуме. Спасибо.

На форум