StranikS_Scan Опубликовано: 15 апреля, 2016 Игроки 6 412 публикации 20 179 боёв Поделиться Опубликовано: 15 апреля, 2016 15 Апр 2016 - 23:26 пользователь HellQwer сказал:Конкретнее можно? Я не видел таких тестов. Углы орудий у моделей уже заданы с учетом того чтобы не попасть в самого себя. Какие тебе тесты нужны? Проверить, что нет ни одного танка с багом? Ну проверяй. >>> Гипотезы о подкрутках настолько же реальны, насколько смогли в игру те, кто их выдумал <<< Ссылка на комментарий
KPOT2338 Опубликовано: 15 апреля, 2016 Игроки 21 791 публикация 38 623 боя Поделиться Опубликовано: 15 апреля, 2016 15 Апр 2016 - 21:57 пользователь StranikS_Scan сказал: Углы орудий у моделей уже заданы с учетом того чтобы не попасть в самого себя. Какие тебе тесты нужны? Проверить, что нет ни одного танка с багом? Ну проверяй.Не попасть в себя в нормальных условиях или в предельных7 Что не делается, всё к лучшему! (с) Cos 700=0.3420, Cos 850=0.0872Кто нибудь привяжите его руки к подлокотникам, и клавиатуру у него заберите. И вообще любое устройство с которого можно печатать. (с) kojot7Введите уже артприцел для всей техники Ссылка на комментарий
anonym_JeyPgMsKuDSF Опубликовано: 16 апреля, 2016 Игроки 18 публикаций 8 796 боёв Поделиться Опубликовано: 16 апреля, 2016 Спасибо за информацию. Ссылка на комментарий
StranikS_Scan Опубликовано: 10 мая, 2016 Игроки 6 412 публикации 20 179 боёв Поделиться Опубликовано: 10 мая, 2016 (изменено) Разброс и сведение в аркадном и снайперском режимахпо результатом тестов и разбора файлов клиента игры 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 2,3*Dp если 10 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%. Изменено 11 мая, 2016 пользователем StranikS_Scan 27 >>> Гипотезы о подкрутках настолько же реальны, насколько смогли в игру те, кто их выдумал <<< Ссылка на комментарий
anonym_prvu9rSvc3J0 Опубликовано: 11 мая, 2016 Игроки 3 194 публикации 46 157 боёв Автор Поделиться Опубликовано: 11 мая, 2016 10 Май 2016 - 23:59 пользователь StranikS_Scan сказал: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 Опубликовано: 11 мая, 2016 Игроки 4 567 публикаций 66 143 боя Поделиться Опубликовано: 11 мая, 2016 (изменено) Классный гайд!!!! Супер! Некоторые неточности или спорные моменты:Пользователь сказал:Начальная точка этого угла располагается в точке крепления орудия к башне. Это опорная точка орудия, в неё помещается камера игрока, когда он переходит в снайперский режим. Нужно заметить, что "точка крепления" - это точка качания орудия, а не точка пересечения орудия с башней. Это может быть не всем очевидно. Часто бывает, что точка качания орудия находится внутри башни, а не на границе брони. Это точка начала расчетной траектории снаряда, а совпадает ли она с точкой вылета видимого трассера - это ещё вопрос. Пользователь сказал:В то время как дистанции между танками, например в механики маскировки и обзора, меряются между опорными точками корпусов. Для справки: опорные точки корпусов находятся на нижней плоскости модели танка, на уровне касания земли гусеницами, в центре танка. Для танков, умеющих вращаться вокруг своей оси, данная опорная точка находится на этой оси вращения. Фактически, эту точку можно рассматривать как координаты (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 как у танков. Но у арты и границы сведения в клиенте просчитываются точно, с изменением формы круга на неровной поверхности. Изменено 11 мая, 2016 пользователем Galaxy_Plus 9 05 мар 2020 - 18:14 пользователь Corspe сказал: Любые изменения в игре призваны повысить комфорт. Мы делаем все возможное, чтобы максимальное количество игроков были довольны. Так было, есть и будет. Ссылка на комментарий
StranikS_Scan Опубликовано: 11 мая, 2016 Игроки 6 412 публикации 20 179 боёв Поделиться Опубликовано: 11 мая, 2016 (изменено) 11 Май 2016 - 16:01 пользователь Med433 сказал:Зачем нужен переменный коэффициент Kp, если он всегда примерно равен единице? В приближенных расчетах им можно пренебрегать. В точных расчетах от него отказаться не получится. Что касается реализации в клиенте, то там весь расчет строиться на матричных операциях, которые и порождают таков вот коэффициент при замене этих операций на алгебраические формулы. Ниже под спойлером код функции, которая эти операции проводит, с моими комментариями. def update(self, pos, dir, sizeVector, relaxTime, collData): ... m = Math.Matrix() m.setTranslate(pos) Это матрица позиции центра круга сведения size = sizeVector[0] Это радиус круга разброса в метрах idealSize = sizeVector[1] aspectRatio = GUI.screenResolution()[0] * 0.5 Ширина экрана в пикселях / 2 currentSize = _calcScale(m, size) * aspectRatio Это круг разброса в пикселях экрана ... def _calcScale(worldMat, size): Функция для перевода круга разброса из метров в пиксели sr = GUI.screenResolution() aspect = sr[0] / sr[1] Соотношение сторон экрана proj = BigWorld.projection() wtcMat = Math.Matrix() wtcMat.perspectiveProjection(proj.fov, aspect, proj.nearPlane, proj.farPlane) Матрица перспективной проекции левой руки wtcMat.preMultiply(BigWorld.camera().matrix) Умножаем на матрицу камеры wtcMat.preMultiply(worldMat) Умножаем на матрицу позиции маркера прицела pointMat = Math.Matrix() pointMat.set(BigWorld.camera().matrix) Матрица камеры transl = Math.Matrix() transl.setTranslate(Math.Vector3(size, 0, 0)) Матрица с радиусом круга разброса в метрах pointMat.postMultiply(transl) Умножаем матрицу камеры на матрицу с радиусом круга разброса в метрах pointMat.postMultiply(BigWorld.camera().invViewMatrix) Умножаем результат на обратную матрицу камеры p = pointMat.applyToOrigin() Извлекаем вектор с координатами x,y,z pV4 = wtcMat.applyV4Point(Math.Vector4(p[0], p[1], p[2], 1)) Возвращает вектор с суммой координат x,y,z матрицы wtcMat и точки p oV4 = wtcMat.applyV4Point(Math.Vector4(0, 0, 0, 1)) pV3 = Math.Vector3(pV4[0], pV4[1], pV4[2]).scale(1.0 / pV4[3]) Масштабируем на 1/pV4[3] oV3 = Math.Vector3(oV4[0], oV4[1], oV4[2]).scale(1.0 / oV4[3]) Масштабируем на 1/oV4[3] return math.fabs(pV3[0] - oV3[0]) + math.fabs(pV3[1] - oV3[1]) Сумма двух расстояний Пользователь сказал:Это точка начала расчетной траектории снаряда, а совпадает ли она с точкой вылета видимого трассера - это ещё вопрос. Они совершенно не совпадают, трассер строиться, условного говоря, от дульного тормоза пушки (элемент модели _GunFire) или от конца пушки, если дульного тормоза нет. Изменено 11 мая, 2016 пользователем StranikS_Scan 1 >>> Гипотезы о подкрутках настолько же реальны, насколько смогли в игру те, кто их выдумал <<< Ссылка на комментарий
anonym_prvu9rSvc3J0 Опубликовано: 11 мая, 2016 Игроки 3 194 публикации 46 157 боёв Автор Поделиться Опубликовано: 11 мая, 2016 11 Май 2016 - 14:53 пользователь StranikS_Scan сказал: В приближенных расчетах им можно пренебрегать. В точных расчетах от него отказаться не получится. Что касается реализации в клиенте, то там весь расчет строиться на матричных операциях, которые и порождают таков вот коэффициент при замене этих операций на алгебраические формулы. Ниже под спойлером код функции, которая эти операции проводит, с моими комментариями. def update(self, pos, dir, sizeVector, relaxTime, collData): ... m = Math.Matrix() m.setTranslate(pos) Это матрица позиции центра круга сведения size = sizeVector[0] Это радиус круга разброса в метрах idealSize = sizeVector[1] aspectRatio = GUI.screenResolution()[0] * 0.5 Ширина экрана в пикселях / 2 currentSize = _calcScale(m, size) * aspectRatio Это круг разброса в пикселях экрана ... def _calcScale(worldMat, size): Функция для перевода круга разброса из метров в пиксели sr = GUI.screenResolution() aspect = sr[0] / sr[1] Соотношение сторон экрана proj = BigWorld.projection() wtcMat = Math.Matrix() wtcMat.perspectiveProjection(proj.fov, aspect, proj.nearPlane, proj.farPlane) Матрица перспективной проекции левой руки wtcMat.preMultiply(BigWorld.camera().matrix) Умножаем на матрицу камеры wtcMat.preMultiply(worldMat) Умножаем на матрицу позиции маркера прицела pointMat = Math.Matrix() pointMat.set(BigWorld.camera().matrix) Матрица камеры transl = Math.Matrix() transl.setTranslate(Math.Vector3(size, 0, 0)) Матрица с радиусом круга разброса в метрах pointMat.postMultiply(transl) Умножаем матрицу камеры на матрицу с радиусом круга разброса в метрах pointMat.postMultiply(BigWorld.camera().invViewMatrix) Умножаем результат на обратную матрицу камеры p = pointMat.applyToOrigin() Извлекаем вектор с координатами x,y,z pV4 = wtcMat.applyV4Point(Math.Vector4(p[0], p[1], p[2], 1)) Возвращает вектор с суммой координат x,y,z матрицы wtcMat и точки p oV4 = wtcMat.applyV4Point(Math.Vector4(0, 0, 0, 1)) pV3 = Math.Vector3(pV4[0], pV4[1], pV4[2]).scale(1.0 / pV4[3]) Масштабируем на 1/pV4[3] oV3 = Math.Vector3(oV4[0], oV4[1], oV4[2]).scale(1.0 / oV4[3]) Масштабируем на 1/oV4[3] return math.fabs(pV3[0] - oV3[0]) + math.fabs(pV3[1] - oV3[1]) Сумма двух расстояний Они совершенно не совпадают, трассер строиться, условного говоря, от дульного тормоза пушки (элемент модели _GunFire) или от конца пушки, если дульного тормоза нет. Для точных расчётов нужна точная формула. Раз для больших увеличений получается константа, значит, интуитивно, приближённая формула получается заменой (арк)синусов и тангенсов на простой угол (типа sin x ~ x). Кстати, (1/50)*(180/Pi) = 1.145915590261647, что довольно близко к числу в твоей таблице на картинке. 1 Ссылка на комментарий
StranikS_Scan Опубликовано: 11 мая, 2016 Игроки 6 412 публикации 20 179 боёв Поделиться Опубликовано: 11 мая, 2016 (изменено) 11 Май 2016 - 18:03 пользователь Med433 сказал:Для точных расчётов нужна точная формула. Раз для больших увеличений получается константа, значит, интуитивно, приближённая формула получается заменой (арк)синусов и тангенсов на простой угол (типа sin x ~ x). Кстати, (1/50)*(180/Pi) = 1.145915590261647, что довольно близко к числу в твоей таблице на картинке. Это уже вы тут сами соображайте, что в реальности скрывается за этими матричными формулами, я устал на них глядеть )))) Пользователь сказал:Более того, по экспериментам StranikS-а похоже, что разработчики этим коэффициентом задают не видимый круг сведения, а невидимый КВАДРАТ сведения, а штрихи сведения вписывают в него уже как получится, не привязываясь к точному радиусу этого круга. Поэтому и получалось, что радиус круга сведения немного "плавал" по экспериментальным данным. Именно так. Тут надо понимать, один очень важный момент, весьма часто то, что мы считаем "великим замыслом" в реальности оказывается всего лишь стечением самых обычных жизненных обстоятельств. Квадрат сведения тому пример. Дело в том, что сведение отрисовывается в SWF скриптом геометрически, т.е. черточки сведения вырисовываются математически по алгоритму, написанному на AS, который вписывает их в квадрат. Технически это вполне обыденно для векторной графики флэша, но тем, кто не знаком с этими технологиями догадаться будет практически не возможно. Поэтому цифра 2,3 как и Kp, что Мед выше смотрит, это сугубо экспериментальные вещи, которыми я пытался заменить более сложные операции, так как далеко не все их я могу разобрать и понять. Пользователь сказал:И заметим, что у арты, в отличие от танков, артприцел реализован с коэффициентом кругов сведения и разброса 1.0, а не 2.3 как у танков. Но у арты и границы сведения в клиенте просчитываются точно, с изменением формы круга на неровной поверхности. Да, именно так. У арты все один в один должно быть. В файлах клиента у неё сведение имеет свой отдельный класс и там нет таких преобразований как выше. Поэтому я ни его не стал тут про неё писать, про неё можно написать отдельно. Изменено 11 мая, 2016 пользователем StranikS_Scan >>> Гипотезы о подкрутках настолько же реальны, насколько смогли в игру те, кто их выдумал <<< Ссылка на комментарий
anonym_prvu9rSvc3J0 Опубликовано: 11 мая, 2016 Игроки 3 194 публикации 46 157 боёв Автор Поделиться Опубликовано: 11 мая, 2016 (изменено) StranikS_Scan сказал:1. На первом этапе через различные матрицы высчитывается диаметр круга разброса орудия в пикселях экрана. Его расчет приближенно можно описать следующей формулой:Dp = R * Кp * Zoom * ScreenWidth / CameraToMarker, Я бы запрогал так: Dp = R * ScreenWidth / (CameraToMarker * Tan(AngleView / Zoom)), AngleView - угол обзора при единичном зуме. UPDKp = 0.5730/tan(0.5/zoom)/zoomнеплохое приближение, моя думать, я прав. Изменено 11 мая, 2016 пользователем Гость 1 Ссылка на комментарий
AngerSkyLink Опубликовано: 11 мая, 2016 Игроки 1 755 публикаций 115 995 боёв Поделиться Опубликовано: 11 мая, 2016 А подскажите, плз, когда сведение клиентского арт-прицела закончилось, круг неподвижен, а совмещенный с ним серверный прицел все еще сужается, кому верить? Когда заканчивается полное сведение? Возможно ли, что снаряд вылетит за пределы клиентского круга сведения, если серверный еще не закончил сведение? Ссылка на комментарий
anonym_prvu9rSvc3J0 Опубликовано: 11 мая, 2016 Игроки 3 194 публикации 46 157 боёв Автор Поделиться Опубликовано: 11 мая, 2016 11 Май 2016 - 15:29 пользователь ssAnger сказал:А подскажите, плз, когда сведение клиентского арт-прицела закончилось, круг неподвижен, а совмещенный с ним серверный прицел все еще сужается, кому верить? Когда заканчивается полное сведение? Возможно ли, что снаряд вылетит за пределы клиентского круга сведения, если серверный еще не закончил сведение? Да, на арте только с серверным прицелом нужно играть, иначе постоянно будут снаряды вылетать. Довольно часто полностью сведённый круг разлетается от зажатия ПКМ (фиксация ствола). Этот баг не фиксят уже чёрт знает сколько лет. Причём с отключённым серверным прицелом этого не видно. Ссылка на комментарий
AngerSkyLink Опубликовано: 11 мая, 2016 Игроки 1 755 публикаций 115 995 боёв Поделиться Опубликовано: 11 мая, 2016 11 Май 2016 - 16:33 пользователь Med433 сказал:Да, на арте только с серверным прицелом нужно играть, иначе постоянно будут снаряды вылетать. Довольно часто полностью сведённый круг разлетается от зажатия ПКМ (фиксация ствола). Этот баг не фиксят уже чёрт знает сколько лет. Причём с отключённым серверным прицелом этого не видно.Выходит, что расчет сведения на сервере и клиенте выполняются независимо друг от друга, и причем по-разному, тогда это очевидный баг. И интересно, как тогда техподдержка прокомментировала бы скриншот/реплей, где снаряд попадает за видимый на экране круг сведения... Ссылка на комментарий
anonym_prvu9rSvc3J0 Опубликовано: 11 мая, 2016 Игроки 3 194 публикации 46 157 боёв Автор Поделиться Опубликовано: 11 мая, 2016 11 Май 2016 - 15:46 пользователь ssAnger сказал:Выходит, что расчет сведения на сервере и клиенте выполняются независимо друг от друга, и причем по-разному, тогда это очевидный баг. И интересно, как тогда техподдержка прокомментировала бы скриншот/реплей, где снаряд попадает за видимый на экране круг сведения... Она бы порекомендовала использовать серверный прицел. Вот то, что он разлетается от фиксации ствола - это баг. И я подозреваю, что его не фиксят из балансных соображений Ссылка на комментарий
StranikS_Scan Опубликовано: 11 мая, 2016 Игроки 6 412 публикации 20 179 боёв Поделиться Опубликовано: 11 мая, 2016 11 Май 2016 - 18:46 пользователь ssAnger сказал:Выходит, что расчет сведения на сервере и клиенте выполняются независимо друг от друга, и причем по-разному, тогда это очевидный баг. И интересно, как тогда техподдержка прокомментировала бы скриншот/реплей, где снаряд попадает за видимый на экране круг сведения... Это не баг, это такая технология. На сервере свой прицел. На клиенте свой прицел. Оба обсчитываются не зависимо друг от друга, но периодически синхронизируются. То что между ними всегда есть разница во времени - это естественно. >>> Гипотезы о подкрутках настолько же реальны, насколько смогли в игру те, кто их выдумал <<< Ссылка на комментарий
StranikS_Scan Опубликовано: 11 мая, 2016 Игроки 6 412 публикации 20 179 боёв Поделиться Опубликовано: 11 мая, 2016 Пользователь сказал:AngleView - угол обзора при единичном зуме. Это получается FOV - телесный угол обзора камеры? >>> Гипотезы о подкрутках настолько же реальны, насколько смогли в игру те, кто их выдумал <<< Ссылка на комментарий
anonym_prvu9rSvc3J0 Опубликовано: 11 мая, 2016 Игроки 3 194 публикации 46 157 боёв Автор Поделиться Опубликовано: 11 мая, 2016 11 Май 2016 - 15:55 пользователь StranikS_Scan сказал: Это получается FOV - телесный угол обзора камеры? Не телесный, а плоский. Возможно, вместо Tan(AngleView / Zoom) должно быть 2*Tan(AngleView / (2*Zoom)). Ссылка на комментарий
StranikS_Scan Опубликовано: 11 мая, 2016 Игроки 6 412 публикации 20 179 боёв Поделиться Опубликовано: 11 мая, 2016 11 Май 2016 - 19:00 пользователь Med433 сказал:Не телесный, а плоский. Возможно, вместо Tan(AngleView / Zoom) должно быть 2*Tan(AngleView / (2*Zoom)). Попробуем. Надо только с FOV замутить. >>> Гипотезы о подкрутках настолько же реальны, насколько смогли в игру те, кто их выдумал <<< Ссылка на комментарий
anonym_prvu9rSvc3J0 Опубликовано: 11 мая, 2016 Игроки 3 194 публикации 46 157 боёв Автор Поделиться Опубликовано: 11 мая, 2016 zoom Kp fitted_Kp1 1.049719551 1.0497208351262 1.122178261 1.1221709029594 1.139996250 1.1400001458628 1.144425201 1.14444016381816 1.145535207 1.14554909378630 1.145799209 1.14581353072640 1.145882098 1.14585951726750 1.145899216 1.145880802216 Kp = a/tan(b/zoom)/zoom;a = 0.570267860007;b = 0.497651263569; Всё-таки в пятом знаке различаются. 1 Ссылка на комментарий
StranikS_Scan Опубликовано: 11 мая, 2016 Игроки 6 412 публикации 20 179 боёв Поделиться Опубликовано: 11 мая, 2016 Запилил мод DispersionCircle. Пробуйте. http://i.imgur.com/ovM0yvV.jpg 5 >>> Гипотезы о подкрутках настолько же реальны, насколько смогли в игру те, кто их выдумал <<< Ссылка на комментарий
Рекомендованные публикации