Онлайн всего: 1
Гостей: 1
Пользователей: 0
Работаем с FPS
![http://megatorrents.org/forum/photos/09041017081591560_f11_0.jpg](http://megatorrents.org/forum/photos/09041017081591560_f11_0.jpg) Если Вы более подробно ознакомитесь с деталями относительно этих 1000
FPS серверов, Вы обнаружите, что информация, которую сообщают
провайдеры не достаточно понятна, а иногда и сомнительная. Иногда они
пытаются создать впечатление, что их серверы в некотором роде
"сертифицированы" на 1000 ФПС или такой ФПС "гарантирован", не сообщая
при этом, что же на самом деле за этим стоит. Мы можем предположить,
что эта "фишка" была "изобретена" самими провайдерами игровых серверов
или это просто выражение чьего-либо субъективного мнения. Действительно
ли сервера, которые работают на 1000 ФПС, позволяют играть более плавно
и увеличивают точность попаданий? Нет, потому что они просто не могут!
В теории.
Все события на серверах CS:S или CS1.6 скалькулированы по кадрам. Все
положения, направления и скорости в один и тот же дискретный момент
времени собраны все в один кадр. Кадр здесь значит то же самое, что и
статическая картинка в видеофильме, поставленном на паузу. Чем больше
кадров в секунду рассчитывает сервер, тем более точные его данные. При
1000 ФПС (FPS - Frames Per Second - Кадров в секунду (пер. с
английского)) сервер считывает "мир” (или "среду") на скорости один
кадр в одну миллисекунду. При 100 ФПС сервер рассчитывает "мир” на
скорости один кадр в 10 миллисекунд. Пока, на данном этапе,
словосочетание "более точный" еще применимо к серверу … но только пока
рассматривается один лишь сервер по себе. На практике же это
оказывается бесполезно для клиента.
На практике.
Безусловно необходимо принимать так же во внимание и клиента (игрока).
Сервер может рассчитывать свой "мир" на 1000 ФПС. Это всего-лишь одна
миллисекунда на рассчитанный кадр. На другом конце провода игроки не
получают обновления на такой большой скорости, а на скорости
значительно ниже. Насколько они быстро могут получать обновления
задается переменной tickrate ("тикрейт"). Обычно тикрейт может
составлять 33, 66 или 100, для высокопроизводительных серверов. Сервер
замораживает свой "мир" на каждый "тик", а затем решает какому клиенту
эту картинку передать. Но сервер не посылает всю имеющуюся у него
информацию. Он посылает только изменения к последнему обновлению среды.
Величина параметра "тикрейт" определяет как часто данные об обновлении
среды будут посылаться игрокам. Таким образом, клиент получает только
100 кадров за одну секунду при тикрейте сервера, равным 100. С другой
стороны, клиент тоже посылает команды. Здесь тикрейт опять определяет
как часто сервер будет получать кадры или команды от клиентов. Это
опять будет только 100 команд или кадров в одну секунду.
Вот
в этом месте, как раз и рушатся «воздушные замки». Зачем серверу
просчитывать свою среду каждую миллисекунду, если он получает команды
от игроков только раз в 10 миллисекунд!? Все серверы просчитывают свою
среду со старыми на 90% данными все время. Если еще взять в расчет
различные задержки, которые влияют на скорость, с которой клиенты
посылают команды на сервер, и то, что сервер сервер ставит эти команды
потом в очередь, 500, 600 или тем более 1000 ФПС на сервере не имеет
абсолютно никакого смысла. Сервер работает с данными, которые уже
устарели на 50, а то и более, миллисекунд. В это время много могло
измениться, в том числе и некоторые входные данные на стороне игрока
(например движение мышкой). Поэтому сервер должен прогнозировать
события - он должен угадать что игрок собирается сделать в следующий
момент. Этот прогноз может сильно отличаться от тех движений, которые
игрок на самом деле совершает … с точностью до 1000 кадров в секунду.
Не важно какой именно ФПС на сервере — 333 или 1000! Неправильный
прогноз так и будет неправильным прогнозом. При 1000 ФПС прогноз только
становится «более точно неправильным».
Вы можете задать
вопрос - "Но что если сервер делает правильный прогноз?” Действительно,
если сервер правильно предсказывает положение игрока, то это лучше — но
только для сервера! Никак не для клиента. Оба движка, как для CS:S так
и для CS1.6 запрограммированы с предположением о том, что серверное и
клиентское время синхронизированы. Серверное время определяет время у
всех клиентов. Поэтому сервер сохраняет так называемое «время кадра»
для каждого сделанного кадра. На хороших Linux (или Windows 2008)
серверах он делает это раз в миллисекунду. Клиент использует время
кадра, которое он получает для каждого обновления, как свое
собственное. На 1000 ФПС сервере с тикрейтом 100 игрок должен получать
обновления в которых время кадра различается на 10 миллисекунд. Даже
если сервер определил положение игрока корректно, 1-ой или 2-ух
миллисекунд задержки во времени получения пакета от сервера к клиенту
достаточно, чтобы данные «устарели». Итак опять, не важно какой ФПС на
сервере - 333 или 1000. Более того, задержки как правило бывают
значительно больше чем 1 или 2 миллисекунды (как правило, от 10 до 30),
если игрок сидит не в серверной комнате ;).
|
Категория: Статьи CS 1.6 | Добавил: p0ps (27.01.2012)
|
Просмотров: 468
| Рейтинг: 0.0/0 |
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
|
Топ файловиков
| | Репутация: 0 Пол: Мужчина Файлов: 170 | |
| | Репутация: 71 Пол: Мужчина Файлов: 170 | |
| | Репутация: 41 Пол: Мужчина Файлов: 90 | |
| | Репутация: 0 Пол: Мужчина Файлов: 64 | |
|