| adrenalin | Дата: Среда, 01.05.2013, 12:01 | Сообщение # 1 |
 Сержант
Группа: Администраторы
Сообщений: 25
Статус: Offline
| При подсчете каждого кадра (frame) в движке OrangeBox делается следующее:
while (sleep(N ms)) { while (ShouldRunATick()) { RunATick() } }
Упрощенно это выглядит так:
Каждые N миллисекунд проверить, запустить ли tick. Другими словами, единственное предназначение FPS - это как часто будить сервер для запуска tick. И это время (N ms) может быть 1ms, 5ms, 15ms и т.д., в зависимости от операционной системы, настройки тайминга ядра Linux и т.д.
Т.о. все, что делает FPS - это даёт бОльшую аккуратность в попадании в tick, т.к. каждый tick будет запускаться ближе к своему идеалу. Например, для tick 66 это будет происходить каждые 15ms. Если FPS сервера равен 100, то просыпание будет каждые +/- 10ms, что близко к tick сервера. У вас по прежнему будет tick 66, но с большим разбросом. Например первый tick попадает в FPS, значит следующий будет через 2 FPS, т.е. на 5ms позже. Зато следом опять попадет в tick. Т.о., в данном случае, через каждый tick будет прибавка в пингу в 5ms. Так ли важны эти 5ms еще большой вопрос, т.к. тот же lerp вносит гораздо большую задержку. Можно поставить и FPS 66, что логично, тогда было бы идеальное попадание в tick. К сожалению, это не всегда так, т.к. рассчет FPS тоже не всегда аккуратен и разброс попадания в tick может быть уже до 15ms.
Собственно var показывает как раз эту разницу - время между tick и FPS. Обычно, var не превышает 0,8-6ms. И это именно та прибавка к пингу, котрая зависит от FPS. Конечно, возможно ситуация, когда производительности физического сервера не хватает для просчёта всех tick, тогда они могут пропускаться вовсе, что будет давать гораздо большую задержку, хотя var будет показывать в разумных пределах. В такие моменты надо смотреть на FPS - если он падает до критических значений, ниже tick, значит пропуски могут быть десятки и сотни миллисекунд, что вызовет и ощутимые лаги, и скачки пинга.
Т.о., какой бы FPS вы не ставили, важно, чтобы он был больше и равен tickrate, а var держался на значениях меньше 8ms. Вы всегда можете поэксперементировать со значениями и выбрать оптимальное для себя.
|
| |
|
|