Перейти к содержимому


Всё о разбросе

эксперимент ВБР точность

  • Закрытая тема Тема закрыта
Сообщений в теме: 407

Med433 #201 Отправлено 13 фев 2015 - 19:38

    Старший лейтенант

  • Игроки
  • 44283 боя
  • 2 642
  • Регистрация:
    20.06.2011

*
Популярное сообщение!

В патче 0.9.6 разработчики изменили рассеивание снарядов внутри круга сведения с целью уменьшить количество попаданий без предварительного сведения (вертуханов). Судя по отзывам игроков, некоторые не заметили особых изменений, у других снаряды вообще перестали лететь в цель, у третьих же орудия стали стрелять даже точнее, а количество вертуханов возросло! Что конкретно изменили разработчики, но постеснялись сообщить нам в подробностях, разбираем в этой теме.

 

Для начала выясним, как соотносятся рассеивание снарядов в реальности и в ВоТ. Рассеивание снарядов можно характеризовать числом попаданий на единицу площади. Чем дальше от точки прицеливания, тем меньше плотность попаданий. В реальности, плотность попаданий подчиняется нормальному распределению, пример обстрелянной мишени – на картинке, слева вверху:

 

 

Хотя в центре прицела плотность попаданий максимальна, она лишь незначительно выше, чем в соседних областях. Поэтому в центральной области точки попаданий распределены практически равномерно.

 

При создании кода, отвечающего за рассеивание снарядов в ВоТ, разработчики допустили ошибку. Нормально распределённым оказалось  расстояние до точки прицеливания, а не плотность попаданий. В результате, плотность попаданий в точке прицеливания получилась бесконечной (мишень "До патча 8.6".) Из-за этой Благодаря этой ошибке, на любом танке со сколь угодно большим разбросом можно было вполне успешно играть в снайпера и поражать любые мишени в квадрате отрисовки, вплоть до дальности в 707 метров; на точных пушках  - выцеливать уязвимости на расстояниях в сотни метров; наконец, регулярно попадать не дожидаясь сведения, а лишь наведя центр круга на цель.

 

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

 

Чтобы выяснить, как изменилось рассеивание, я отстрелял несколько тысяч выстрелов в стену, делая скриншот после каждого выстрела. Декаль попадания была заменена на цветную точку, чтобы можно было легко извлечь её координаты. Обстрелянные в разных версиях мишени  показаны на рисунке выше.

 

Уже по приведённому рисунку видно, что с вводом новой точности особенность в центре никуда не исчезла. Для количественного сравнения удобнее смотреть на гистограммы распределений. Поскольку сравнивать бесконечные величины графически не очень-то удобно, смотреть будем на распределение радиуса, а не плотности:

 

 

 

 

На графике представлены распределения снарядов по радиусу в разных версиях ВоТ. Отличие между последними патчами заключается в том, что треть снарядов, летевших «в яблочко», теперь летит в прилегающую область. В старые добрые времена в границу круга летело около четверти снарядов (чёрная кривая). Если эти снаряды перенаправить поближе к центру, где-то в район одной трети радиуса, то получится распределение, весьма похожее  на наше новое распределение в патче 0.9.6.

 

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

 

Дело в том, что отрисовываемый круг сведения приблизительно в два раза больше, чем реальный круг разброса. На скриншоте изображены декали всех попаданий, которые пришлось пережить коровнику на Малиновке и отрисовываемый кружок после полного сведения:

 

 

 

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

 

 

Итог

 

Начиная с патча 0.9.6 танки стреляют чуть менее точно, чем в 0.9.5, но гораздо точнее, чем до патча 0.8.6.

 

В следующем сообщении будет приводиться некоторая техническая информация.


Сообщение отредактировал Med433: 19 фев 2015 - 23:01


StranikS_Scan #202 Отправлено 15 апр 2016 - 21:57

    Капитан

  • Игроки
  • 20085 боев
  • 5 198
  • [MODER] MODER
  • Регистрация:
    14.06.2011

Просмотр сообщенияHellQwer (15 Апр 2016 - 23:26) писал:

Конкретнее можно? Я не видел таких тестов.

 

Углы орудий у моделей уже заданы с учетом того чтобы не попасть в самого себя. Какие тебе тесты нужны? Проверить, что нет ни одного танка с багом? Ну проверяй.



KPOT2338 #203 Отправлено 15 апр 2016 - 22:28

    Майор

  • Игроки
  • 34611 боев
  • 12 151
  • Регистрация:
    10.06.2012

Просмотр сообщенияStranikS_Scan (15 Апр 2016 - 21:57) писал:

 

Углы орудий у моделей уже заданы с учетом того чтобы не попасть в самого себя. Какие тебе тесты нужны? Проверить, что нет ни одного танка с багом? Ну проверяй.

Не попасть в себя в нормальных условиях или в предельных7


ВЕРНИТЕ ПРОВИНЦИЮ!!!

http://wotreplays.ru.../NotOneStepBack

Капитальная порезка арты: отрезать ЛБЗ, отобрать G-прицел, убрать попадание в топ-3 в боях 3-5-7, отобрать голду.

Что не делается, всё к лучшему! (с) Cos 700=0.3420


alexxxxx7911 #204 Отправлено 16 апр 2016 - 14:16

    Рядовой

  • Игроки
  • 8405 боев
  • 17
  • [E3DYH] E3DYH
  • Регистрация:
    28.01.2012
Спасибо за информацию.

StranikS_Scan #205 Отправлено 11 май 2016 - 00:59

    Капитан

  • Игроки
  • 20085 боев
  • 5 198
  • [MODER] MODER
  • Регистрация:
    14.06.2011

Разброс и сведение в аркадном и снайперском режимах

по результатом тестов и разбора файлов клиента игры

 

1. Базовый разброс орудий из ТТХ

Каждое орудие в игре имеет в ТТХ такой параметр как радиус разброса снарядов на дистанции 100 метров. Например, для танка Т-34-85 с 85-мм пушкой ЗИС-С-53 этот радиус составляет R0 = 0,42 метра. Это означает, что базовое значение тангенса угла разброса снарядов у такого орудия равно A0 = R0/100 = 0,0042 м/м. Сам угол разброса условно показан на схеме под спойлером.

Схема разброса

 

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

 

2. Реальный разброс орудий в игре

Следует понимать, что реальный разброс орудия в игре всегда отличается от базового из ТТХ, причиной тому являются различные факторы и модификаторы, которые действуют на разброс не только в динамике, когда танк двигается, вращается, стреляет, но даже и в статике, когда танк неподвижен и сведён в одну точку. Вот тут я ранее публиковал формулы, выкладки и цифры для расчета мгновенного разброса орудия, путем разбора алгоритма функции getOwnVehicleShotDispersionAngle из модуля Avatar, которая высчитывает этот разброс непосредственно в клиенте игры. Разберем алгоритм ниже.

 

Формула для мгновенного значения радиуса круга разброса в метрах на произвольной дистанции в любой момент времени имеет следующий вид:

R' = A0 * L * KR', где

КR' = Кэ * Кпоx * КОРЕНЬ( 1 + [ (Кдх*V)^2 + (Кпх*W)^2 + (Квб*Wt)^2 + (Квx)^2 ] * (Км)^2 )

Здесь A0 - базовый тангенс угла разброса орудия [м/м]; L - дистанция от опорной точки пушки до точки, куда указывает маркер прицела [м]; KR' - коэффициент мгновенного возможного максимального разброса; Кэ - коэф. влияния прокачки экипажа; Кпох - коэф., учитывающий повреждение орудия (по умолчанию 1); Км - коэф., учитывающий наличие модуля "Стабилизатор вертикальной наводки" (по умолчанию 1); V и Кдх - скорость движения танка по прямой [м/с] и её учитывающий коэф.; W и Кпх - угловая скорость поворота танка [рад/с] и её учитывающий коэф.; Wt и Квб - угловая скорость поворота башни [рад/с] и её учитывающий коэф.; Квх - коэф. учитывающий отдачу орудия в момент выстрела (по умолчанию 0).

 

Из формулы следует, что на разброс оказывают влияние:

1. Уровень прокачки экипажа, в данном случае только наводчика, и бонусов ему от командира, вентиляции, пайка, плюс перки экипажа;

2. Скорости движения, поворота ходовой и вращения башни;

3. Состояние орудия, целое или повреждено, выстрелило или нет;

4. Наличие стабилизатора вертикальной наводки.

 

Из всех перечисленных факторов в статике, когда танк неподвижен и сведён в одну точку, на разброс влияет только коэф. Кэ, т.е. уровень прокачки наводчика. Рассчитывается этот коэф. по общеизвестной формуле через числа Манекена. Для Т-34-85, упомянутого выше, с полностью прокаченным экипажем без модулей и расходников реальный радиус круга разброса орудия при полном сведении на дистанции 100 метров составляет R = A0 * L * 1/(0,57+0,43*110%/100%) = 0,0042 * 100 / (0,57+0,43*110/100%) = 0,40268 м.

 

Что касается динамики, то общеизвестно, что разброс в игре увеличивается мгновенно, а вот его уменьшение, т.е. переход от большего значения радиуса R к меньшему происходит экспоненциально с постоянной времени сведения орудия T' [c], эта величина тоже расчётная и определяется как:

T' = T0 * Кэ * Км,

где T0 - базовое значение времени сведения из ТТХ орудия [c]; Кмкоэф., учитывающий наличие модуля "Усиленные приводы наводки" (по умолчанию 1).

 

Рассмотрим как это работает в игре - если вы стоите и сведены, то радиус разброса вашего орудия R совпадает с текущим значением величины R', т.е. R = R'. Если вы начали движение, то величина R' увеличится, а вместе с ней мгновенно возрастет и радиус разброса вашего орудия R. Если же вы остановились, то величина R' мгновенно уменьшится, а вот радиус разброса вашего орудия R в первый момент времени останется прежним, и только с течением времени он уменьшится до актуального значения величины R'. Поэтому реальный разброс в клиенте игры R совпадает с мгновенным значением R' только в установившемся режиме, либо когда танк неподвижен и сведен в одну точку, либо когда танк движется или вращается равномерно с постоянной скоростью.

 

Полное время сведения орудия от разброса R к разбросу R' определяется формулой:

t = T' * ln[R/R'].

 

Теперь проанализируем результаты тестов, которые я сделал для танка Т-34-85 с орудием ЗИС-С-53 в режиме "Боевое обучение". Для вывода в лог различных параметров из клиента игры в реальном времени использовался отдельный мод, по типу Meter Instruments. Под спойлером приведен график изменения во времени радиуса круга реального разброса орудия R на дистанции 100 метров.

График для Т-34-85

 

На графике первые 8 секунд танк был неподвижен и его разброс R при этом полностью совпадал с величиной, которую мы рассчитали ранее. Затем идёт вращение башни сначала влево, затем обратно вправо. И в том и в другом случае разброс увеличивается причем мгновенно до одной и той же величины. После того как вращение прекращается, величина R уменьшается к начальному значению разброса. Используя точки спадающей кривой, я аппроксимировал её зависимость экспонентой и получил экспериментальное уравнение. Погрешность аппроксимации при этом не превысила 0,00003%. Сейчас мы уже можем сравнить постоянную времени T' из экспериментального уравнения с расчётной величиной. Базовое значение постоянной времени сведения орудия из xml-файлов игры для этого танка равно T0 = 3.5 c. Постоянная времени сведения при полностью прокаченном экипаже, без перок, модулей, расходников составляет T' = 3.5 / (0,57+0,43*110/100%) = 3,35570 с, что полностью совпадает с экспериментом. Далее на графике показан разброс при движении по прямой, при объезде препятствия и при боевом развороте танка и башни на противника.

 

В конце хотелось бы раскрыть механизм влияния перок экипажа на разброс орудия в игре. Перки влияют на разброс через величину KR' и делают это только в динамике, происходит это так:

1. Перк "Плавный ход" при его 100% прокачке и с учетом 10%-го бонуса от командира уменьшает коэф. Кдх на 1,1x4%:

Кдх' = Кдх * (1 - 1,1 * 4% / 100%)

2. Перк "Плавный поворот башни" при его 100% прокачке и с учетом 10%-го бонуса от командира уменьшает коэф. Квб на 1,1x7,5%:

Квб' = Квб * (1 - 1,1 * 7,5% / 100%)

 

3. Разброс орудия на сервере

Алгоритмы расчёта круга разброса на сервере и в клиенте игры полностью дублируют друг друга, разница между ними только во времени. Не смотря на то, что нет ни каких официальных подтверждений идентичности этих алгоритмов, нет и каких-либо причин думать, что они как-то различаются. В связи с этим я лично беру их идентичность за аксиому. Для чего нужна копия алгоритма расчета разброса на клиенте? Ответ прост - информация о текущем разбросе орудия танка используется в алгоритме отображения сведения, т.к. размер сведения на клиенте, определяется мгновенным значением тангенса угла разброса орудия.

 

Сервер для синхронизации с ним клиента в начале боя присылает значения коэф. Кэ*Кпох, Кдх, Кпх и Квба затем каждые 100 мс, шлёт клиенту своё мгновенное значение тангенса угла разброса орудия. Под спойлером показан график с кривой разброса Rs(t), построенной по значениям, присылаемым клиенту от сервера. На графике видно, что кривая, соответствующая разбросу на сервере, отстает по времени от кривой разброса, обсчитываемого клиентом R(t)  

График для Т-34-85, 9 мая 2016

 

Под вторым спойлером, аналогичные кривые, но для танка Е-100 из примера в конце поста, которые были сняты в марте 2015 года. На них кривая сервера Rs(t) в некоторых местах даже чуть опережает по времени кривую клиента R(t).

График для Е-100, 22 марта 2015

 

4. Связь между кругом разброса и кругом сведения

Один из наиболее интересных вопросов из механики игры, это вопрос о связи между кругом сведения и реальным кругом разброса снарядов на экране монитора. Многие думают, что это один и тот же круг. Увы, но эти два круга имеют совершенно разные диаметры и ни когда не совпадают друг с другом. Причина этому проста. У большинства настильных орудий круг разброса весьма мал, что делает его использование в игре не очень комфортным. По этой причине, разработчики игры сделали сведение в разы большего диаметра чем круг разброса, а логику его отображения подчинили визуальному удобству игроков. Независимо от того какое у вас разрешение экрана, какой режим, аркадный или снайперский, сведение всегда отображается четко и комфортно. По этой причине, можно утверждать, что задача круга сведения в игре, это не отображение разброса снарядов, а визуализация состояния орудия и его наводчика, целое, поврежденное, свелся наводчик или сводится, здоров он или контужен и т.д. Рассмотрим как получается сведение в клиенте игры. Для этого мне пришлось разобрать класс _FlashGunMarker в модуле control_modes. Условно все расчеты можно разбить на два этапа.

 

1. На первом этапе через различные матрицы высчитывается диаметр круга разброса орудия в пикселях экрана. Его расчет приближенно можно описать следующей формулой:

Dp = R * Кp * Zoom * ScreenWidth / CameraToMarker,

где R - мгновенное значение радиуса круга разброса орудия в точке прицеливания [м]; Zoom - кратность зума в снайперском режиме (в аркадном всегда 1); ScreenWidth - ширина экрана [пикc.]; CameraToMarker - дистанция от точки, в которой расположена камера игрока, до точки, куда указывает маркер прицела [м]; Кp - эмпирический коэффициент.

 

Коэффициент Кp зависит в основном только от кратности зума и поддается аппроксимации суммой двух экспонент с погрешностью не превышающей 0,0086% по следующей формуле:

Кр = 1,1458 - 0,5098*exp(-1,8393*Zoom) - 0,0211*exp(-0,3371*Zoom).

Экспериментальные точки и график кривой Кp(Zoom) приведены под спойлером. Эксперименты проводились для окон с разрешениями 1280x800, 1600x900 и 1902x985 пикс. при различных зумах и дальностях наведения орудия. Установлено, что приведенная выше формула справедлива только при ширине окна равной 1280 пикс и большего размера, а для окон меньшего размера, например 1024x768 пикс. значения коэф. будут несколько иными, в сторону его увеличения.

Кривая Кр

 

2. На втором этапе вычисляется размер квадрата сведения в пикселях Hp, в котором оно впоследствии и отрисовывается на экране монитора, делается это так:

Hp = 2,3*10  если Dp <= 10 пикс.

         2,3*Dp  если 10 < Dp < 300 пикс.

         2,3*300  если Dp >= 300 пикс.

Здесь 10 и 300 пикс. - это минимально и максимально допустимые размеры визуального круга разброса, заданные непосредственно в файлах игры; 2,3 - эмпирический коэф., найденный опытным путем.

 

Из формулы видно, что в игре есть визуальные ограничения на размеры круга сведения. При достижении этих ограничений круг сведения перестает быть связанным с реальным кругом разброса. Коэф. 2,3 найден опытным путем, через замеры круга сведения при разных разрешениях экрана и разных зумах. Также следует обратить внимание, что диаметр круга сведения всегда несколько больше квадрата, в котором он отрисован, однако на практике этой разницей можно пренебрегать, ввиду её малости.

Квадрат сведения

 

5. Оценка реального круга разброса орудия по скриншотам

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

1. Обвести сведение на скриншоте квадратом и замерить длину его стороны Hp в пикселях.

2. Вычислить в пикселях диаметр круга разброса как Dp = Hp / 2,3.

3. Если величина окажется равной 10 пикс. или 300 пикс., то значит сведение достигло своей визуальной границы и сказать по скриншоту каков именно был реальный круг разброс увы не удастся, в остальных случаях Dp будет этим кругом.

4. Для пересчета его радиуса в метры используем формулу R = Dp * CameraToMarker / (Кp * Zoom * ScreenWidth).

 

Ниже показан пример такого расчета для Т-34-85 из режима "Боевое обучение". Танк находится на дистанции примерно 100 метров от бункера и сведен на его стену, кратность снайперского прицела x30. Разрешение экрана 1600x900. Для выполнения вспомогательных замеров использовался мой мод Meter Instruments

Пример расчёта

 

По скриншоту строим квадрат сведения и находим длину его стороны Hp = 509 пикс. Затем вычисляем диаметр круга разброса Dp = 221 пикс. и строим его. Теперь определим его радиус в метрах и сравним с величиной DisRadius, отображаемой модом. Дистанцию от камеры до маркера возьмём из мода, это параметр GunToMarker на скриншоте. По формуле получаем R = 221 * 100 / (Кp(30) *30 * 1600) =  0,40183 м. Правильным является значение, показываемое модом на экране это DisRadius = 0,40269 м. Как видим, погрешность оценки реального круга разброса через картинку с кругом сведения в нашем примере не превысила 0,22%.


Сообщение отредактировал StranikS_Scan: 11 май 2016 - 13:43


Med433 #206 Отправлено 11 май 2016 - 14:01

    Старший лейтенант

  • Игроки
  • 44283 боя
  • 2 642
  • Регистрация:
    20.06.2011

Просмотр сообщенияStranikS_Scan (10 Май 2016 - 23:59) писал:

1. На первом этапе через различные матрицы высчитывается диаметр круга разброса орудия в пикселях экрана. Его расчет приближенно можно описать следующей формулой:

Dp = R * Кp * Zoom * ScreenWidth / CameraToMarker,

где R - мгновенное значение радиуса круга разброса орудия в точке прицеливания [м]; Zoom - кратность зума в снайперском режиме (в аркадном всегда 1); ScreenWidth - ширина экрана [пикc.]; CameraToMarker - дистанция от точки, в которой расположена камера игрока, до точки, куда указывает маркер прицела [м]; Кp - эмпирический коэффициент.

 

Коэффициент Кp зависит в основном только от кратности зума и поддается аппроксимации суммой двух экспонент с погрешностью не превышающей 0,0086% по следующей формуле:

Кр = 1,1458 - 0,5098*exp(-1,8393*Zoom) - 0,0211*exp(-0,3371*Zoom).

Экспериментальные точки и график кривой Кp(Zoom) приведены под спойлером. Эксперименты проводились для окон с разрешениями 1280x800, 1600x900 и 1902x985 пикс. при различных зумах и дальностях наведения орудия. Установлено, что приведенная выше формула справедлива только при ширине окна равной 1280 пикс и большего размера, а для окон меньшего размера, например 1024x768 пикс. значения коэф. будут несколько иными, в сторону его увеличения.

 

Зачем нужен переменный коэффициент Kp, если он всегда примерно равен единице?

 


Galaxy_Plus #207 Отправлено 11 май 2016 - 14:13

    Старший лейтенант

  • Игроки
  • 62311 боев
  • 3 772
  • Регистрация:
    19.09.2010

Классный гайд!!!! Супер!

 

Некоторые неточности или спорные моменты:

Цитата

Начальная точка этого угла располагается в точке крепления орудия к башне. Это опорная точка орудия, в неё помещается камера игрока, когда он переходит в снайперский режим.

 Нужно заметить, что "точка крепления" - это точка качания орудия, а не точка пересечения орудия с башней. Это может быть не всем очевидно. Часто бывает, что точка качания орудия находится внутри башни, а не на границе брони. Это точка начала расчетной траектории снаряда, а совпадает ли она с точкой вылета видимого трассера - это ещё вопрос.

 

Цитата

В то время как дистанции между танками, например в механики маскировки и обзора, меряются между опорными точками корпусов.

 Для справки: опорные точки корпусов находятся на нижней плоскости модели танка, на уровне касания земли гусеницами, в центре танка. Для танков, умеющих вращаться вокруг своей оси, данная  опорная точка находится на этой оси вращения. Фактически, эту точку можно рассматривать как координаты (x;y;z) всего танка.

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

 

Напомню ещё кое-что из общих сведений о реализации разброса в игре , которые нужно знать для адекватного понимания общей картины игрового разброса:

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

 

2. Форма конуса разброса не остается с круглым поперечным сечением при изгибе его из-за гравитации, как думают некоторые. Такова математика разброса из-за того, что разработчики не меняют случайно ещё и скорость вылета снаряда, как это есть в реале, а только угол вылета относительно оси ствола. Особенно наглядно это видно на арте на предельных дальностях, где круг разброса сплющивается в отрезок.

 

3. Распределение разброса попаданий в игре и близко не нормальное (не Гауссово). Оно очень сильно отличается от нормального распределения острым бесконечным пиком плотности в центре, в отличие от конечного "Гауссового колокольчика". В игре сделана сильно повышенная вероятность попадания вдали по сравнению с использованием нормального распределения при таких же ТТХ орудий. 

 

4. Снаряды в игре являются самостоятельными объектами, хоть и без размеров. После выстрела они обретают самостоятельную жизнь и летят по траектории независимо от танка по тактам сервера, которые равны 0.1 сек.

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

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

 

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

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

 

6. Траектория в игре рассчитывается как парабола, то есть, без учета сопротивления воздуха. Сила гравитации у всех танковых снарядов реальная 9.81 м/c^2, а у артиллерии разная и примерно на порядок больше танковых. Поэтому траектории артиллерии в игре на порядок короче реальных. Из-за дискретности тактов сервера 0.1сек, фактическая траектория снарядов в игре является ломанной линией, углы которой лежат на расчетной точной параболе.

 

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

А главный метод балансировки разброса в геймплее под укороченные дистанции боя - это настройка динамических параметров разброса - от выстрела, от движения, от поворота, и визуализация этих параметров путем ввода понятия "СВЕДЕНИЕ".

 

Уже обсуждалось игроками, является ли понятие "сведение" реально существующим. Ответ "ДА". 

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

 

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

Суть сведения - это зрительное отображение меняющейся от ситуации вероятности попадания в цель.

 

Из этого следует, что сведению не обязательно иметь объективное абсолютное значение, как это сделано для понятия "круг разброса", кстати, зрительно игроку обычно не отображаемому, за исключением арты, и то не во всех ситуациях.

Игроку нужно принять решение - когда стрелять, индикатор сведения служит именно этой цели, а не формально отображает какие-то объективные параметры механики игры.

 

Как написал StranikS_Scan , разработчики отображают в стандартном прицеле круг сведения примерно в 2.3 раза больше,  чем объективно существующий, но неотображаемый  игроку круг разброса, реально характеризующий игровую функцию плотности вероятности для разброса попаданий.

Почему такое значение? Из соображений эстетики и удобства игроков. И оно действительно весьма удобно. 

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

 

Итого, коэффициент 2.3 увеличенного круга сведения - это элемент дизайна игры, подобранный из соображений комфортности отображения для игроков, а не из объективных параметров игровой механики.

 

Более того, по экспериментам StranikS  похоже, что разработчики этим коэффициентом задают не видимый круг сведения, а невидимый КВАДРАТ сведения, а штрихи сведения вписывают в него уже как получится, не привязываясь к точному радиусу этого круга. Поэтому и получалось, что радиус круга сведения немного "плавал" по экспериментальным данным.

 

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

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

 

И заметим, что у арты, в отличие от танков, артприцел реализован с коэффициентом кругов сведения и разброса 1.0, а не 2.3 как у танков. Но у арты и границы сведения в клиенте просчитываются точно, с изменением формы круга на неровной поверхности.

 


Сообщение отредактировал Galaxy_Plus: 11 май 2016 - 15:02


StranikS_Scan #208 Отправлено 11 май 2016 - 15:53

    Капитан

  • Игроки
  • 20085 боев
  • 5 198
  • [MODER] MODER
  • Регистрация:
    14.06.2011

Просмотр сообщенияMed433 (11 Май 2016 - 16:01) писал:

Зачем нужен переменный коэффициент Kp, если он всегда примерно равен единице?

 

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

 

Spoiler

 

Цитата

Это точка начала расчетной траектории снаряда, а совпадает ли она с точкой вылета видимого трассера - это ещё вопрос.

 

Они совершенно не совпадают, трассер строиться, условного говоря, от дульного тормоза пушки (элемент модели _GunFire) или от конца пушки, если дульного тормоза нет.


Сообщение отредактировал StranikS_Scan: 11 май 2016 - 16:07


Med433 #209 Отправлено 11 май 2016 - 16:03

    Старший лейтенант

  • Игроки
  • 44283 боя
  • 2 642
  • Регистрация:
    20.06.2011

Просмотр сообщенияStranikS_Scan (11 Май 2016 - 14:53) писал:

 

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

 

Spoiler

 

 

Они совершенно не совпадают, трассер строиться, условного говоря, от дульного тормоза пушки (элемент модели _GunFire) или от конца пушки, если дульного тормоза нет.

 

Для точных расчётов нужна точная формула. Раз для больших увеличений получается константа, значит, интуитивно, приближённая формула получается заменой (арк)синусов и тангенсов на простой угол (типа sin x ~ x). Кстати, (1/50)*(180/Pi) = 1.145915590261647, что довольно близко к числу в твоей таблице на картинке.

 


StranikS_Scan #210 Отправлено 11 май 2016 - 16:11

    Капитан

  • Игроки
  • 20085 боев
  • 5 198
  • [MODER] MODER
  • Регистрация:
    14.06.2011

Просмотр сообщенияMed433 (11 Май 2016 - 18:03) писал:

Для точных расчётов нужна точная формула. Раз для больших увеличений получается константа, значит, интуитивно, приближённая формула получается заменой (арк)синусов и тангенсов на простой угол (типа sin x ~ x). Кстати, (1/50)*(180/Pi) = 1.145915590261647, что довольно близко к числу в твоей таблице на картинке.

 

Это уже вы тут сами соображайте, что в реальности скрывается за этими матричными формулами, я устал на них глядеть ))))

 

Цитата

Более того, по экспериментам StranikS  похоже, что разработчики этим коэффициентом задают не видимый круг сведения, а невидимый КВАДРАТ сведения, а штрихи сведения вписывают в него уже как получится, не привязываясь к точному радиусу этого круга. Поэтому и получалось, что радиус круга сведения немного "плавал" по экспериментальным данным.

 

Именно так. Тут надо понимать, один очень важный момент, весьма часто то, что мы считаем "великим замыслом" в реальности оказывается всего лишь стечением самых обычных жизненных обстоятельств. Квадрат сведения тому пример. Дело в том, что сведение отрисовывается в SWF скриптом геометрически, т.е. черточки сведения вырисовываются математически по алгоритму, написанному на AS, который вписывает их в квадрат. Технически это вполне обыденно для векторной графики флэша, но тем, кто не знаком с этими технологиями догадаться будет практически не возможно. Поэтому цифра 2,3 как и Kp, что Мед выше смотрит, это сугубо экспериментальные вещи, которыми я пытался заменить более сложные операции, так как далеко не все их я могу разобрать и понять.

 

 

Цитата

И заметим, что у арты, в отличие от танков, артприцел реализован с коэффициентом кругов сведения и разброса 1.0, а не 2.3 как у танков. Но у арты и границы сведения в клиенте просчитываются точно, с изменением формы круга на неровной поверхности.

 

Да, именно так. У арты все один в один должно быть. В файлах клиента у неё сведение имеет свой отдельный класс и там нет таких преобразований как выше. Поэтому я ни его не стал тут про неё писать, про неё можно написать отдельно.


Сообщение отредактировал StranikS_Scan: 11 май 2016 - 16:21


Med433 #211 Отправлено 11 май 2016 - 16:22

    Старший лейтенант

  • Игроки
  • 44283 боя
  • 2 642
  • Регистрация:
    20.06.2011

Просмотр сообщенияStranikS_Scan писал:

1. На первом этапе через различные матрицы высчитывается диаметр круга разброса орудия в пикселях экрана. Его расчет приближенно можно описать следующей формулой:

Dp = R * Кp * Zoom * ScreenWidth / CameraToMarker,

 

Я бы запрогал так:

 

Dp = R * ScreenWidth / (CameraToMarker * Tan(AngleView / Zoom)),

 

AngleView - угол обзора при единичном зуме.

 

UPD

Kp = 0.5730/tan(0.5/zoom)/zoom

неплохое приближение, моя думать, я прав.


Сообщение отредактировал Med433: 11 май 2016 - 16:37

 


ssAnger #212 Отправлено 11 май 2016 - 16:29

    Лейтенант

  • Игроки
  • 81177 боев
  • 1 683
  • Регистрация:
    16.09.2012
А подскажите, плз, когда сведение клиентского арт-прицела закончилось, круг неподвижен, а совмещенный с ним серверный прицел все еще сужается, кому верить? Когда заканчивается полное сведение? Возможно ли, что снаряд вылетит за пределы клиентского круга сведения, если серверный еще не закончил сведение?

Med433 #213 Отправлено 11 май 2016 - 16:33

    Старший лейтенант

  • Игроки
  • 44283 боя
  • 2 642
  • Регистрация:
    20.06.2011

Просмотр сообщенияssAnger (11 Май 2016 - 15:29) писал:

А подскажите, плз, когда сведение клиентского арт-прицела закончилось, круг неподвижен, а совмещенный с ним серверный прицел все еще сужается, кому верить? Когда заканчивается полное сведение? Возможно ли, что снаряд вылетит за пределы клиентского круга сведения, если серверный еще не закончил сведение?

 

Да, на арте только с серверным прицелом нужно играть, иначе постоянно будут снаряды вылетать. Довольно часто полностью сведённый круг разлетается от зажатия ПКМ (фиксация ствола). Этот баг не фиксят уже чёрт знает сколько лет. Причём с отключённым серверным прицелом этого не видно.

 


ssAnger #214 Отправлено 11 май 2016 - 16:46

    Лейтенант

  • Игроки
  • 81177 боев
  • 1 683
  • Регистрация:
    16.09.2012

Просмотр сообщенияMed433 (11 Май 2016 - 16:33) писал:

Да, на арте только с серверным прицелом нужно играть, иначе постоянно будут снаряды вылетать. Довольно часто полностью сведённый круг разлетается от зажатия ПКМ (фиксация ствола). Этот баг не фиксят уже чёрт знает сколько лет. Причём с отключённым серверным прицелом этого не видно.

Выходит, что расчет сведения на сервере и клиенте выполняются независимо друг от друга, и причем по-разному, тогда это очевидный баг. И интересно, как тогда техподдержка прокомментировала бы скриншот/реплей, где снаряд попадает за видимый на экране круг сведения...



Med433 #215 Отправлено 11 май 2016 - 16:51

    Старший лейтенант

  • Игроки
  • 44283 боя
  • 2 642
  • Регистрация:
    20.06.2011

Просмотр сообщенияssAnger (11 Май 2016 - 15:46) писал:

Выходит, что расчет сведения на сервере и клиенте выполняются независимо друг от друга, и причем по-разному, тогда это очевидный баг. И интересно, как тогда техподдержка прокомментировала бы скриншот/реплей, где снаряд попадает за видимый на экране круг сведения...

 

Она бы порекомендовала использовать серверный прицел. Вот то, что он разлетается от фиксации ствола - это баг. И я подозреваю, что его не фиксят из балансных соображений :hiding:

 


StranikS_Scan #216 Отправлено 11 май 2016 - 16:53

    Капитан

  • Игроки
  • 20085 боев
  • 5 198
  • [MODER] MODER
  • Регистрация:
    14.06.2011

Просмотр сообщенияssAnger (11 Май 2016 - 18:46) писал:

Выходит, что расчет сведения на сервере и клиенте выполняются независимо друг от друга, и причем по-разному, тогда это очевидный баг. И интересно, как тогда техподдержка прокомментировала бы скриншот/реплей, где снаряд попадает за видимый на экране круг сведения...

 

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

StranikS_Scan #217 Отправлено 11 май 2016 - 16:55

    Капитан

  • Игроки
  • 20085 боев
  • 5 198
  • [MODER] MODER
  • Регистрация:
    14.06.2011

Цитата

AngleView - угол обзора при единичном зуме.

 

Это получается FOV - телесный угол обзора камеры?



Med433 #218 Отправлено 11 май 2016 - 17:00

    Старший лейтенант

  • Игроки
  • 44283 боя
  • 2 642
  • Регистрация:
    20.06.2011

Просмотр сообщенияStranikS_Scan (11 Май 2016 - 15:55) писал:

 

Это получается FOV - телесный угол обзора камеры?

 

Не телесный, а плоский. Возможно, вместо Tan(AngleView / Zoom) должно быть 2*Tan(AngleView / (2*Zoom)).

 


StranikS_Scan #219 Отправлено 11 май 2016 - 20:22

    Капитан

  • Игроки
  • 20085 боев
  • 5 198
  • [MODER] MODER
  • Регистрация:
    14.06.2011

Просмотр сообщенияMed433 (11 Май 2016 - 19:00) писал:

Не телесный, а плоский. Возможно, вместо Tan(AngleView / Zoom) должно быть 2*Tan(AngleView / (2*Zoom)).

 

Попробуем. Надо только с FOV замутить. 



Med433 #220 Отправлено 11 май 2016 - 22:01

    Старший лейтенант

  • Игроки
  • 44283 боя
  • 2 642
  • Регистрация:
    20.06.2011

zoom        Kp                        fitted_Kp

1      1.049719551    1.049720835126
2      1.122178261    1.122170902959
4      1.139996250    1.140000145862
8      1.144425201    1.144440163818
16    1.145535207    1.145549093786
30    1.145799209    1.145813530726
40    1.145882098    1.145859517267
50    1.145899216    1.145880802216

 

Kp = a/tan(b/zoom)/zoom;

a = 0.570267860007;

b = 0.497651263569;

 

Всё-таки в пятом знаке различаются.


 


StranikS_Scan #221 Отправлено 12 май 2016 - 01:12

    Капитан

  • Игроки
  • 20085 боев
  • 5 198
  • [MODER] MODER
  • Регистрация:
    14.06.2011

Запилил мод DispersionCircle. Пробуйте.

 







Читать еще на тему: эксперимент, ВБР, точность

Количество пользователей, просматривающих этот форум: 1

0 пользователей, 0 гостей, 0 анонимных