Закрытая тема

Тема: BF2: Теория большого рега

  1. #1
    Аватар для Antieverything
    Регистрация
    23.02.2010
    Возраст
    36
    Сообщений
    8,445
    Поблагодарили 7,848 раз(а)
    Вес репутации: 100

    info BF2: Теория большого рега

    BF2 Soldier hitbox

    · BF2: "ТЕОРИЯ БОЛЬШОГО РЕГА" ·




    Предполагалось, что это будет большая статья, всесторонне охватывающая вопрос, однако недавно я обнаружил эти разрозненные забытые мной наброски в закромах форума и понял, что если не опубликовать это "как есть", то они так и сгинут в пыли скрытых разделов...

    Итак, что же такое этот самый "рег", о котором так много говорят?
    На игровом сленге это некий процент засчитанных сервером попаданий в цель (от англ. Hit registration\Hit detection)
    Выражение "хороший рег" говорит о высоком проценте ожидаемых попаданий, в свою очередь "плохой рег", обозначает обратную ситуацию, когда попадание по всем признакам должно было произойти, но этого не случилось.
    Но прежде чем говорить от чего зависит "рег", давайте освежим в памяти баллистику геймплея BF2.

    HITBbf2 scopeX
    BF2 hit

    Хитбокс (hitbox - примитивный каркас модели противника, попадания в который засчитываются* и наносят урон)
    Различные зоны хитбокса имеют разные вполне очевидные показатели урона при попадании, но нам интересна его физика* Многие знают о присутствии bulletdrop (параболической траектории пули), но это отнюдь не главный фактор отклонения в BF2. У каждой единицы оружия есть коэффициент разброса, т.е. расстояние на которое может отклоняться пуля от полета по прямой, значение просчитывается по "формуле девиации" со значениями из "таблицы отклонений" на сервере, в результате мы имеем погрешность, с которой сейчас полетит данная конкретная пуля. И хоть радиус разброса захардкорен в таблице параметров, точка попадания в этих пределах выглядит невероятным рандомом. Этот "рандом" математически предсказуем, из-за чего стало возможно появление "сверхточных" аимботов и все же с точки зрения человеческого восприятия, баллистика в battlefield это нечто ужасное.

    BF2 aim

    Проиллюстрируем на примере прицела снайпера. На рисунке желтым кружком обозначена зона ожидаемого игроком попадания (bulletdrop для простоты понимания учитывать не будем), красным - зона, в любую точку которой пуля может попасть с учетом системы разброса в BF2

    Коэффициент разброса данной модели оружия

    M24   bf2 m24

    ObjectTemplate.deviation.setFireDev 3.5 2 0.5
    ObjectTemplate.deviation.minDev 5
    ObjectTemplate.deviation.setTurnDev 0 0 0 0
    ObjectTemplate.deviation.setSpeedDev 3 0.2 0.2 1
    ObjectTemplate.deviation.setMiscDev 2.5 2.5 0.2
    ObjectTemplate.deviation.devModStand 2
    ObjectTemplate.deviation.devModCrouch 1.5
    ObjectTemplate.deviation.devModLie 0.8
    ObjectTemplate.deviation.devModZoom 0.005



    Так в конфигурационных файлах сервера (и клиента) прописаны параметры "точности" винтовки M24
    Формула расчета отклонения в bf2 имеет упрощенно такой вид (mindev*(mindevmodzoom)+firedev+speeddev+turndev+miscdev)*devmodzoom*stancemod, учитывая множество факторов, влияющих на разброс стрельбы (также см. коментарии к таблице характеристик оружия)

    Посмотреть характеристики остальных боевых единиц игры вы можете в сравнительной таблице оружия Battlefield 2
    Как выглядит "система рандомного разброса" BF2 каждый из нас знает, у многих вызывает правидное негодование
    К вышесказанному стоит прибавить и необходимость "ручного упреждения" винтовки.
    Упреждение - "вынос точки выстрела" при стрельбе по движущейся цели в направлении движения с расчетом по времени движения цели и скорости полета пули.

    bf2 run

    В зависимости от дистанции выстрела в штатной ситуации нужно стрелять в проекции C-E
    Вся "прелесть" ситуации в том, что хитбокс противника не всегда находится там, где он должен быть и можно учесть абсолютно все внутриигровые факторы и все равно сделать промах! Хитбокс может находится и на проекции А

    По факту, анимация попадания на клиенте верна лишь в случае одиночной игры (singleplayer mode, когда клиент = сервер), во всех остальных случаях это лишь неинформативный визуальный эффект отрисованный вашим компьютером. Почему? Вернемся к факторам игрового рега.

    Факторы влияющие на рег

    Давайте сразу к делу, а по ходу будем разбираться "как" и "почему"

    PING / ПИНГ
    BF2 ping
    Пинг (Лаг)- как многие не совсем корректно полагают, и есть единственный виновник плохого "рега", однако по факту пинг это RTT (Round Trip Time) двусторонние задержки по маршруту, они дают понимание лишь о некой "предрасположенности", являясь своеобразной "виртуальной линейкой". Большой пинг часто, но не всегда = "плохой рег". Именно эту задержку компенсирует сервер при перерасчетах, зависеть пинг может от скорости, типа соединения, загруженности каналов на всём маршруте клиент <--> сервер, загруженности машины клиента\сервера. Чем меньше пинг игрока, тем ближе его видение игрового поля к тому как оно выглядит в реальности* и это важный, хотя и субъективный момент.

    Важно! Некоторые узлы могут блокировать SMTP, так же ответ может быть задержан, если SMTP-запросы стоят в низком приоритете обработки. Так например и первое и второе вы можете наблюдать на последних двух узлах по нашему маршруту, включая сам сервер.

    Пакет игровой информации не попадает на сервер сразу , он проходит через множество* промежуточных узлов, каждый из которых является потенциальной угрозой повреждения, или даже полной потери данных

    BF2 udp packet

    UDP (User Datagram Protocol) используется большинством многопользовательских шутеров из-за большей скорости работы, однако особенностью протокола является простая модель передачи данных без упорядочивания и гарантии целостности, подтверждение получения также отсутствуют. Что это значит для нас на практике?
    Возьмем простое и понятное понятие "выстрел" - это всего один пакет, отправленный на сервер, если он не был доставлен, или был поврежден в процессе доставки, сервер о вашем выстреле ничего не знает итд итп Это в очередной раз говорит нам о силе влияния качественного соединения на геймплей.

    Потери пакетов - если они значительны, это практически приговор. Множество точных решающих выстрелов было затеряно в "плохих" узлах на маршрутах до серверов, сотни неразорвавшихся гранат было брошено и бесчисленное множество техники разбито.
    Чем больше потери, тем больше экстраполированных событий в вашем видении игрового поля.
    Без лишних слов, packet loss - злейший враг "рега".

    Джиттер (jitter) - разброс времени прохождения пакета и один из виновников проблем в игре.
    "Ломаный пинг" в подавляющем большинстве случаев сильно портит "рег", также к нему чувствителен и VoIP.

    BER (Bit Error Ratio) - вероятность\частота ошибок, выражается в количестве ошибочных битов от общего числа принятых. Стоит на втором месте в списке основных проблем передачи данных в сетях интернет и нашем реитинге в частности.
    определить процент "битых" пакетов приходящих на сервер вы не сможете (это возможно сделать лишь на стороне самого сервера), все что в ваших силах, при должном уровне знаний,- проанализировать качество входящего трафика, изучив параметры пакетов в подходящем анализаторе.

    Инструментарий

    BF2 pingplotter

    Традиционно одной из лучших утилит для визуализации и анализа в реальном времени остается pingplotter
    Пинг, джиттер, потери пакетов на каждом узле маршрутов, все наглядно и просто в использовании.

    TRACEROUTE / ТРЭЙС
    BF2 tracert
    tracert - определение маршрутов прохождения пакетов, входит в состав ОС Windows
    Не рекомендуется, если есть возможность использовать продвинутые аналоги (как и штатный ping).

    Для статистического сбора информации по потерям и пингу мы рекомендуем эту утилиту, диагностику проводить нужно непосредственно во время "проблем".
    Для сбора статистики за определенный временной промежуток, считаю вывод этой программы одним из самых наглядных.
    Запускайте с правами администратора на Vista/7/8

    Что касается пинга и трэйсроутов непосредственно нашего сервера, всем кто не находится в нашей локальной сети, рекомендую использовать не адрес сервера, а адрес провайдера 94.45.160.5 (u-l.ru) Так вы получите более наглядные результаты.

    Оптимизация настроек интернет-соединения для BF2 малопригодна, поскольку методы и твикеры их использующие нацелены на коррекцию параметров TCP/IP, в основном таких показателей как MTU, RWIN, TTL, MSS и попросту не дадут нам никакого профита. Вообще в Windows 7 и Windows 8 сетевая оптимизация по умолчанию сделана нормально и не требует "доработки".

    Существует вполне себе не абстрактный термин "игровой интернет", который у ряда зарубежных провайдеров является оплачиваемой услугой. Действительно, даже у нас игроки с параметрами и инфраструктурой подключения и маршрутизации близкими к "игровым", имеют явные преимущества перед остальными, играя при прочих равных, на серверах по всему миру*
    Зачастую все эти коллизии приводят к забавным случаям, когда неумелые новички имеют явное превосходство перед опытными бойцами, что является неприятным имбалансным моментом игры.

    Сетевая часть движка BATTLEFIELD
    Ну, в целом разобрались, но я предлагаю пойти дальше и узнать "почему"

    Пропусканая способность канала сервера ограничена, поэтому нецелесообразно отправлять каждому клиенту обновленное состояние при каждом событии внутри игрового пространства.
    Вместо этого сервер с постоянной периодичностью создает снимки "игрового мира" и отправляет их всем клиентам. На доставку пакетов с этой информацией тратится время (пинг), а это значит, что "время клиента" всегда немного отстает от "времени сервера", прибавим к этому аналогичную задержку со стороны клиента и становится ясно, что без принятия каких-то мер играть нормально просто не получится.


    bf2 networking

    Размер UDP пакета в battlefield больше обычного ICMP и больше "эхо пакета" игры, поэтому "игровой пинг" фактически всегда немного больше измеряемого.
    Чем больше игроков тем хуже становится "рег", хотя параметры интернет соединения остались прежними, но размер пакетов стал больше и на их передачу фактически тратится больше времени, клиенту все больше не хватает данных для интерполяции положения противника и начинается активное использование механизма экстраполяции (об интерполяции и экстраполяции вы уже знаете из раздела "Проблемы хитбоксов").
    Если все данные для интерполяции исчерпаны, анимация игрового мира не останавливается, игра пытается предсказать дальнейшие события на основе имеющейся информации, это и есть экстраполяция, после достижения определенных временных границ, дальнейшая отрисовка на клиенте останавливается полностью и выдается сообщение о проблемах с коннектом и еще через некоторое время клиент производит отключение от данного сервера.

    bf2 interpolation extrapolation
    Если соединение успевает восстановиться, модель игрока скачком перемещается в рассчитанные сервером координаты и вновь начинает работать интерполяция.
    В случае плохого канала связи возможна ситуация постоянной работы экстраполяции "малыми порциями", визуально этого даже не видно, но воздействие на "рег" такая ситуация оказывает колоссальное.

    Предсказание ввода.
    Предположим у вас пинг 120, вы жмете "W" и информация об этом уходит на сервер, там она обрабатывается и модель игрока перемещается вперед в игровом пространстве, что и увидят остальные игроки в следующем "снимке игрового мира". Получается, что и сам игрок увидит свое движение более чем через 120мс, и эта задерка будет касаться любых его действий, значительно затрудняя игру. Предсказание ввода на клиенте это способ убрать эту задержку, вместо того, чтобы ждать, пока сервер обновит положение модели, клиентская часть игры просто просчитывает (аналогично серверу) результат движения и перемещает модель на новые координаты немедленно (для сервера игрок все еще находится на старом месте).
    Через 150мс+ с сервера приходит обновленный "снимок игрового мира", предсказанные координаты сравниваются с серверными и при необходимости позиция модели корректируется (что бывает достаточно редко).

    Компенсация задержки
    Скажем игрок сделал выстрел по цели в 12:00:00.00 Это действие было помещено в пакет и отправлено на сервер. Пока данный пакет находился в пути, сервер продолжал просчитывать игровой мир и цель могла изменить свое местоположение. Пакет достиг сервера в 12:00:00.12, однако попадание не засчитается, даже если игрок сделал выстрел "точно в цель".
    Именно эти ошибки и призвана исправлять система компенсация задержки, она хранит историю недавних координат всех объектов и игроков в буфере ~1с и пересчитывает события игрового мира для каждого игрока с учетом его задержки (пинга)

    Автоматический режим огня
    первые 3 пули "считаются как одна", т.е. отправляются в одном пакете, как одиночный выстрел + автоматически просчитанные исходя из характеристик оружия пуля 2 и 3.
    В одиночном режиме каждая пуля является независимым объектом и отсылается отдельным пакетом.

    Теперь вы знаете немного больше, да, игроки не существуют в игровом мире одновременно, однако концепция многопользовательских шутеров подразумевает что это так, поэтому сервер просчитывает некое виртуальное поле, где расхождения реального мира аппроксимируются к единой внутренней системе времени* и погрешности этого сложного механизма могут лишить вас рега.

    Тут еще была "портянка" анализа зависимости успеха игрока в тактических FPS (First Person Shooter - шутер от первого лица) и BF2 в частности, но это все же совсем другая история...

    Немного сумбурно, но если вникнуть, то понимание работы сетевого интерфейса и движка игры в целом поможет вам получать преимущество внутри геймплея.




    Также вам могут быть интересны:

    Правила серверов BF2
    BF2 Вопросы по Учебке
    BF2 APC Testdrive+
    Быстрый переход монитора в режим энергосбережения
    BF2 Заметки по "соло на вертолете"
    BF2 Commanders, Part 1 - Origins
    BF2 how to become a chopper master...
    BF2 Возможности TOW
    BF2 Падает FPS во время записи видео, есть FIX!
    BF2 Креатив
    BF2 DIESoft Lite
    BF Tools: Mumble
    BF2 DIESEL Noobspack v 2.0
    BF2 1.50 Console Unlocker
    BF2 Tools: Battlelauncher 1.5 DE
    BF2 Tools: Alt.Z.Gamer
    DIESEL Image Resizer

  2. 30 сказали спасибо
Закрытая тема

Метки этой темы