- Для PC
- Для Mac
- Для Linux
- ОС: Windows 7 SP1/8/10 (64bit)
- Процессор: 2,2 ГГц
- Оперативная память: 4 Гб
- Видеокарта с поддержкой DirectX версии 10.1: AMD Radeon HD 77XX / NVIDIA GeForce GTX 660. Минимальное поддерживаемое разрешение – 720p.
- Место на жестком диске: 17 Гб
- ОС: Windows 10/11 (64bit)
- Процессор: Intel Core i5 или Ryzen 5 3600 и лучше
- Оперативная память: 16 Гб
- Видеокарта с поддержкой DirectX версии 11 и выше: NVIDIA GeForce 1060 и выше, Radeon RX 570 и выше
- Место на жестком диске: 95 Гб
- Операционная система: Mac OS Big Sur 11.0
- Процессор: Core i5, минимум 2.2GHz (Intel Xeon не поддерживается)
- Оперативная память: 6 Гб
- Видеокарта: Intel Iris Pro 5200 (Mac) или аналогичная видеокарта AMD/Nvidia для Mac (минимальное поддерживаемое разрешение – 720p) с поддержкой Metal
- Место на жестком диске: 17 Гб
- Операционная система: Mac OS Big Sur 11.0
- Процессор: Intel Core i7 (Intel Xeon не поддерживается)
- Оперативная память: 8 Гб
- Видеокарта: Radeon Vega II и выше с поддержкой Metal
- Место на жестком диске: 95 Гб
- Операционная система: Современные дистрибутивы Linux 64bit
- Процессор: Dual-Core 2.4 ГГц
- Оперативная память: 4 Гб
- Видеокарта: NVIDIA GeForce 660 со свежими проприетарными драйверами (не старее 6 месяцев) / соответствующая серия AMD Radeon со свежими проприетарными драйверами (не старее 6 месяцев, минимальное поддерживаемое разрешение - 720p) с поддержкой Vulkan
- Место на жестком диске: 17 Гб
- Операционная система: Ubuntu 20.04 64bit
- Процессор: Intel Core i7
- Оперативная память: 16 Гб
- Видеокарта: NVIDIA GeForce 1060 со свежими проприетарными драйверами (не старее 6 месяцев) / Radeon RX 570 со свежими проприетарными драйверами (не старее 6 месяцев) с поддержкой Vulkan
- Место на жестком диске: 95 Гб
Мы часто сталкиваемся с тем, что игроки не понимают, каким образом реализованы столкновения техники в игровом окружении, особенно при плохом соединении. Поэтому Антон Юдинцев, наш Генеральный директор и ведущий разработчик, посвятил часть своего времени тому, чтобы подробно объяснить, как реализованы физические взаимодействия в нашей игре.
Принцип реализации сетевого взаимодействия (сетевого кода) и физики в War Thunder |
Клиент применяет управляющие воздействия (нажатие кнопок, оси джойстика), передает их на сервер и моделирует физику. Сервер принимает управляющие воздействия и применяет их «в прошлом» (из-за наличия сетевой задержки принятое управляющее воздействие всегда относится к некоторому прошедшему моменту времени). Затем сервер передает клиенту «подтвержденное состояние», т.е. «реальную» позицию.
Также по причине сетевой задержки при поступлении к клиенту она уже относится к прошлому (т. е. является устаревшей для клиента). Поэтому клиент снова применяет все управляющие воздействия (нажатия клавиш управления, оси джойстика), которые были совершены к текущему моменту к полученной «устаревшей» (но единственно реальной, с точки зрения сервера) позиции.
В результате формируется «новая» позиция.
Хотя этот метод может быть сложен для понимания и несомненно требует большого количества вычислительных ресурсов (по сравнению, например, с сетевым кодом Battlefield, который, по сути, работает интерполяцией «в прошедшем времени»), но обеспечивает очень эффективное управление своей техникой на клиенте и сервере при любом отклике.
Эффективность управления в игре может быть действительно очень высока, на уровне офлайнового одиночного режима, т.е. в режиме реального времени, но для этого должны быть соблюдены несколько условий, представленных ниже. |
Стабильный отклик
Как следует из рассмотренного алгоритма, обе стороны, клиент и сервер, полагаются на своевременное получение определенной информации. И если отклик нестабилен, может возникать джиттер. То есть стабильный 100-миллисекундный отклик иногда лучше, чем «усредненные» 50 мс, если фактический разброс времени отклика составляет 10–110 мс. Конечно, игра знает точное время пакета, но визуально поведение при джиттере может быть будет более дерганным.
Приемлемый коэффициент потери пакетов
Именно поэтому лучше играть с проводным подключением, чем по Wi-Fi. Конечно, все данные передаются с определенной избыточностью. Но если будет полностью потеряно окно в 700 мс со всеми управляющими воздействиями клиента, переданными на сервер, они станут уже слишком устаревшими для их повторного применения.
Необходимо помнить, что клиент в игровом мире не один — есть и другие клиенты, которые должны «видеть» позиции остальных игроков и взаимодействовать с ними, поэтому повторное применение управляющих действий за последние, например, 10 секунд недопустимо. В результате произойдет заметная «телепортация» игрока как на сервере, так и на всех остальных клиентах. Однако, если потеря пакетов составляет 3-5%, никаких проблем возникать не должно.
Также следует учитывать, что игровая статистика по потерям пакетов не отражает всех потерь, испытываемых клиентом. Измерения в ней основаны только на «надежном трафике» (трафик с подтвержденной доставкой), поскольку в случае ненадежного трафика нельзя даже точно определить факт потери пакета. Но даже если потери в среднем составляют 5%, это не означает, что не могут быть утеряны, например, все пакеты с управляющими воздействиями (даже если они передаются с избыточностью).
Отсутствует взаимодействие с другими игроками
Разумеется, в игре такого быть не может. Однако большую часть времени (99,9%) никаких взаимодействий не происходит, а 99% всех взаимодействий составляет стрельба. Стрельба — отличный тип взаимодействия (с точки зрения сетевого кода и погружения в игру), поскольку большую часть времени она либо ни к чему не приводит (промахи и рикошеты), либо наносит реальные повреждения. Поэтому некоторая рассинхронизация выглядит приемлемо и не сказывается на погружении (например, в случае небольшой телепортации, если позиция смещалась еще в течение 100 мс после того, как уже 200 мс назад на траектории игрока было нанесено повреждение).
Разумеется, поскольку сетевой код War Thunder работает именно таким образом, игрок видит остальных игроков в экстраполированном времени, т. е. известны их старые позиции, скорость и управляющие воздействия, и уже на их основе предсказываются будущие позиции. Техника в игре очень предсказуема и обладает высокой инертностью, поэтому в большинстве случаев это не создает никаких проблем.
Насколько мне известно, подобный сетевой код был изобретен именно в War Thunder. Отраслевым стандартом для шутеров является отображение каждого клиента с интерполяцией в прошедшем времени (Battlefield, CS), что ставит игроков с высоким откликом в более выгодное положение (а также не работает достаточно эффективно для физических столкновений по очевидным причинам — все движения уже были совершены в прошлом), либо вообще без (дополнительной) интерполяции (Q3), где нужно угадывать время задержки и целиться в противника с упреждением (что также неэффективно в отношении столкновений и ставит игроков с высоким откликом в крайне невыгодное положение).
Есть одно очевидное решение — «тонкий клиент», в котором отображается только то, что передано сервером, а задержки компенсируются (предсказываются) за счет применения всех управляющих действий в «будущем» (т. е. с определенной задержкой). Именно так работают многие MMORPG и некоторые другие игры.
Однако такое решение не подходит для высокоскоростной техники с критическими неуравновешенными состояниями, например самолетов и иногда даже наземной техники (в случае движения с высокой скоростью по наклонной поверхности), т. к. управление становится «вялым», а реагирование — медленным.
Идеального решения для онлайн-игр не существует (конечно, если бы мы могли доверить вычисления клиенту, то столкновения для каждого клиента стали бы намного лучше), однако наше решение крайне эффективно для техники в большинстве из всех возможных состояний. |
Основным и очевидным исключением являются физические столкновения различных единиц техники (в особенности если они управляются игроками), для которых решение не так эффективно.
Расчет столкновений в игровой физике является одной из труднейших задач, но она становится еще более сложной, если пытаться восстановить события, то есть не только корректно рассчитывать столкновения, но и стараться доверять управляющим действиям пользователя (а не его позиции) из прошедшего момента времени (т. е. повторно применять их для последнего временного кадра отклика клиента).
Очевидно, если наблюдать столкновение с точки зрения другого клиента (при просмотре повтора), ситуация становится еще более странной не только потому, что клиент будет повторно применять свои управляющие воздействия уже после фактического столкновения в прошлом, но и потому, что отображается экстраполированная, будущая позиция машины соперника, для которой выполняется ровно то же самое (повторное применение управляющих воздействий на сервере).
В некоторых примерах, на которые нам указывали, столкновение, собственно, было очень вероятным. Иногда танки переворачиваются на ровном месте совершенно без помощи других танков (видео можно найти в Интернете — испытания танков, танковый биатлон и т.п.). Однако «наблюдаемое поведение», ведущее к естественным результатам, может выглядеть совершенно неестественно, отчасти потому что нельзя увидеть, что же произошло на самом деле (на сервере), и отчасти потому что серверу приходится восстанавливать прошлые события (управляющие воздействия) в очень специфических условиях.
В нашей игре сервер широковещательно рассылает позиции, а не управляющие воздействия, и поэтому никто не зависит от «самого медленного» клиента.
Как правило, если у игрока хороший отклик, ему легче ориентироваться и проще целиться. Однако управление собственной машиной не зависит от отклика (зависит только от потери пакетов), за исключением столкновения с другими единицами техники. |
Поскольку управление работает хорошо, а столкновения достаточно редки (фактически не существует хорошего решения для реализаций столкновений в онлайн-играх, кроме принудительно «медленного» с задержками управления или «тонкого клиента»). Он позволяет добиться в целом хорошего пользовательского восприятия и дает возможность участвовать в игре соперникам со всех концов света.
В заключение хотел бы посоветовать держать дистанцию и пытаться избегать случайных столкновений с товарищами по команде. Ведь в реальности это чревато серьезными травмами экипажа и повреждением техники, к какому бы типу она не относилась, и безусловно при этом всегда страдает драгоценная раскраска.
Генеральный директор и ведущий разработчик Gaijin Entertainment Антон Юдинцев
Комментарии (182)
Я конечно всё понимаю, серверная архитектура достаточна сложна, но... убивающиеся об заборы танки не считают это оправданием.
AlikManson_: У меня такое совсем недавно было, немного врезались друг в друга и оба померли.
Не соглашусь, всё же какой-то прогресс есть. Раньше даже в тяжёлых танках можно было убиться об стену на маленькой скорости. Сейчас повреждения экипажа работают более гладко. Совсем курьёзные случаи, когда весь экипаж умирает от одного прикосновения к дереву - уж совсем редкость. Которая, однако, подтверждает, что ещё есть над чем поработать.
War Thunder для меня именно тем и интересен, что в нем стремятся к отражению цифровым кодом реального поведения. Я понимаю, многим нужен простой "пиф-паф, бух-бах" Но есть контингент людей ценящих WT именно за попытки симуляции. Да, многие элементы вызывают улыбку. Но! Я часто читаю в комментах "снаряды так себя не ведут, физика никакая, то не реалистично, это не та". Одна только "настоящая" симуляция пробоя брони, будет настолько емкой, что мощности ваших пк не хватит чтобы визуали...
Опять же, здесь вопрос глубины симуляции. Сам факт пробития и образования осколков гораздо ценнее того, какой они, например, будут формы. То есть их форма влияет на результат поражения врага минимально, значит ею можно пренебречь и учитывать осколок как материальную точку. Это один из множества примеров того, как создается механика игры с большим упором на реализм, но в то же время экономией ресурсов компьютера игрока и сервера. 99,9% боя - перестрелки, соответственно то, на сколько они будут интересны и качественны, крайне важно и на эту механику делается упор. Случаи столкновения происходят гораздо-гораздо реже, что не отменяет их участия в игровом процессе, но во взаимодействии между игроками они, логично, менее критичны. Пока еще не изобрели идеальных и сверхмощных систем и уж тем более идеальных каналов связи, поэтому любой проект - это балансирование между желанием воспроизвести всё и здравым смыслом. :)
Больше того, добавлю, что на примере с танком конкюрор (британская ветка 5 ранг), это фатально, ибо снаряд 128мм, просачивается между стволом и основанием ствола. Выглядит это комично. А на килл камере это выглядит просто ужс, так как болванка не меняясь просачивается в микроскопическую щель.
зировать часть процесса. А игроков которые в первую очередь цепляются за "б.р." или пишут "вот нет баланса" мне откровенно жалко. Баланс на мой взгляд - это возможность уничтожить танком другой. И в WT это есть. Долгой жизни проекту!
Вы просто слишком "узко" мыслите, для тех кто жалуется на "баланс" - баланс, это когда они в одиночку могут противостоять целой вражеской команде, не иначе как благодаря "немецкому скиллу". То что есть пирамида (треугольник если пожелаете) из баланса, геймплея, реалистичности и смещение в одну сторону автоматически понижает другие - для многих граждан это слишком сложно для понимания.
Небось на совках играешь?
Открывайте обсуждение и на форуме, не удобно на сайт постоянно залазить, плюс нет функционала для нормального комментирования. и Только не надо говорить про сложность сбора информации, на данный момент это пятая площадка: ВК, Фейсбук, Форум, Твиттер и теперь ещё сайт. И уж к пятой площадке должны были привыкнуть собирать мнения, даже вторичные, со всех источников.
Так же, будучи уже авторизованным на сайте, сайт не всегда подцепляет аккаунт и пишет "авторизуйтесь". Приходится перелогиниваться. Плюс пользоваться сайтом с телефона крайне неудобно.
это все очень интересно, но телепорты из-за переезда заборчика и смерти экипажа об союзника на респе все-таки надо чинить. разговорами тут не поможешь.
Поддерживаю насчёт видимости!!!
Данная проблема тянется с момента введения "революционной" системы видимости, которая "моделирует" работу танкового экипажа. Лично я репортил об этой проблеме и в 1.55 и в 1.57 (всего 3 репорта), но что-то никто из разработчиков на темы внимания не обращал. Порой создаётся впечатление, что игроки живут отдельно, а разработчики отдельно, у каждого своя игра и своя реальность.
А почему нам эту обьяснялку только теперь повесели,на забугорном форуме она с 20 числа висит,досадно как-то.
keofox когда уберутся все надписи о сбитых критованных с центра экрана? устали вам уже это долбить каждый раз на протяжении года а то и больше.
а на каком ж языке пишет господин Юдинцев, если для русской версии сайта потребовался "перевод" с более ранней англоязычной копии.. :-))))))))))
Не лучше ли отказаться от столь сложного расчета, чтобы избежать проблем, которые видят простые игроки - прилипание, кувырки через плетень, телепорты - ведь это намного бы улучшило восприятие и имидж игры?
Отличная оптимизация явно достигается ещё и тем, что система LOD рисует четкую картинку прямо перед носом даже на максимальных настройках. Это не здОрово.
Такое взаимодействие выгодно в тех самых 99,9% случаев и позволяет, например, играть комфортно игрокам и с 'плохим' интернетом. War Thunder отлично оптимизирован, но оптимизация - это не только соотношение FPS/Графика, но и такие, порой не явные, технологии.
Прошедшее в будущем, экстраполированное на настоящее... Спасибо за внимание! Лекцию Вам прочитал доктор Эммет Браун.
Иногда полезно расширить свой словарный запас, новыми словами. =)
На самом деле очень интересная штука. Если меня ущипнуть, то нервным импульсам нужно время, чтобы дойти до мозга, быть обработанными и получить реакцию. По сути - тот же "ping". Так что мой вскрик будет относится к повреждению тела, полученному в прошедшем времени.
насчёт случайных столкновений,во время спауна часто бывает ситуация когда игрок,материализовавшись,включает круизконтроль и БАМ перед ним спаунится другой танк,происходит столкновение,заминка,может собраться свалка союзной техники,а учитывая горячий нрав геймеров это явление приводит к тимкилу,почему же нельзя ввести 20-ти секундную прозрачность чтобы игроки могли беспрепятственно разъехаться с точки возрождения?
Именно первые 20-30 секунд боя. Начало боя прозрачность, дальше по вашей схеме.
кеофокс,нет никаких сотни вопросов,есть только проблема в начале боя,а по прошествии 20 секунд лютые синхронисты разродятся в две машины на параллельных курсах,алгоритм довольно простой
Если бы всю это простынь оформили бы в видео-формат с начиткой, посмотревших было бы гораздо больше чем прочитавших
эту*
Тут не особо много. Теперь вы знаете больше. Но я передам ваше предложение.
Отправить жалобу