Pull to refresh

Comments 17

а в новой игре с именем «Quake» появятся грубые ошибки, приводящие к тому, что один из игроков может получить преимущество только потому, что у него лучше «железо»
Не помню, как в первой, а во второй кваке поднимать фпс любой ценой — была стандартная практика. В 3 тоже. Правда там это влияло в первую очередь на прыжки.
Прыжки — это тоже боль, но это проблемы другого порядка сложности. В коде Quake Champions ошибка куда тривиальнее и очевиднее.
Вообще я думал что это связано с косяками синхронизации состояний на сервере и клиенте. Наработки Q3 похоже решили проигнорировать. Хотя там и без этого в dev-логах обновлений довольно детские косяки были исправлены.
Да, суть опыта — это не повторять прежних ошибок. Я думаю, что нужно было изучить исходники Q3 и по возможности сделать лучше.
Теперь поговорим о недостатках этого метода. Дело в том, что формула для интегрирования не всегда такая простая, как это могло бы казаться. Могу привести в пример игру S.T.A.L.K.E.R,

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

Правильная формула — вот такая: camera_angles = new_camera_angles. Зачем там вообще сглаживание?

Для эффекта контузии и иллюзии инерции персонажа.

Учет инерции дает формулу равноускоренного движения. Только эту формулу придется применять два раза в обе стороны (первый раз — чтобы найти правильные параметры движения исходя из желаемой конечной точки). Наверное, проще просто ограничить скорость перемещения камеры.

Такое сглаживание должно давать немного другой эффект — эффект резинки, которая дает силу «стягивания», пропорциональную разности двух значений.
А так разве не будет камера рывками двигаться???

Только если двигать мышку рывками.

Да, по поводу "интегрального" вида конкретно этой формулы. Выводится он вот так. Допустим, один и тот же ввод был дан два раза подряд. В таком случае получим новое значение угла new_camera_angles * (k*k + 2*k) + camera_angles * (1 - k) ^ 2. Отсюда видим, что:


  1. под любой шаг времени можно подстроиться сменой k;
  2. коэффициент при старом значении camera_angles возводится в квадрат при удвоении интервала времени.

Отсюда методом внимательного взгляда получаем формулу того же вида, но которую уже не надо вручную подстраивать под разные интервалы времени:


float k = pow(k0, dt);
camera_angles = new_camera_angles * (1-k) + camera_angles * k;

Осталось подобрать k0 по ощущениям. Ну, или его можно вычислить как exp(1-k, 1/dt0), где dt0 — эталонный интервал времени (замерять на железе разработчиков игры).


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

да, я помню, что там должно было быть что-то экспоненциальное, а в какую сторону — забыл.
Автору спасибо, было познавательно.
UFO just landed and posted this here
Название игры "Quake" раньше было синонимом чего-то крутого, высокотехнологичного и идеального. И в голову не могло придти, что через какую-то пару десятков лет и камня на камне не останется от былого превосходства, а в новой игре с именем "Quake" появятся грубые ошибки, приводящие к тому, что один из игроков может получить преимущество только потому, что у него лучше "железо".

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

Sign up to leave a comment.

Articles