Прицеливание и параллакс

Матчасть

При прицеливании может происходить явление параллакса, которое воспринимается как “скачущий прицел”.

image

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

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

  1. Прицел рисуется, игнорируя баллистику
  2. Прицел рисуется в предполагаемой точке попадания
  3. Рисуется два прицела

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

Ответы на некоторые вопросы

А можно сделать так, чтобы параллакса не было?

Нет в нашей Вселенной. Вот настолько явление параллакса фундаментально.

А вот в других играх такого нет!!!

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

12 лайков

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

например фокусироваться на промежуточных точках пространства между точкой ухода с объекта 1 и точкой прихода на объект 2, чтобы визуально сгладить скачек…

рассчитать расстояние между объектами и путь прицела построить по промежуточным точкам с шагом в пиксель ну или сколько там глазу не заметно, чтобы достичь плавности перехода, чтобы ПРИЦЕЛ не скакал…

3 лайка

Нельзя

Ну вот на картинке ситуация. Если препятствие исчезнет - то что делать?

а как в тундре в рб можно сделать?

1 лайк

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

Спойлер

Безымянный
Безымянный1

2 лайка

Не понял вопрос

Оформляйте предложение тут:
Предложение по развитию игры Crossout

1 лайк

Наверное у вас есть аналитики, которые могут это все продумать и описать в ТЗ, я понятия не имею как у вас устроен процесс разработки)

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

Получается, вы не знаете, как решить это задачу, но вместе с тем “задача выглядит решаемой”

я выше описал же как по-моему в первом приближении можно подступиться к решению задачи

Ну смотрите.
Пусть будет близкий объект (метров 20) и дальняя стена (пусть метров 500 до неё). У вас точка визирования и точка прицеливания на крайнем левом пикселе ближнего объекта. Соответственно, прицел там же и рисуется на объекте.
Допустим, вы смещаете камеру влево на 1 пиксель. Точка визирвания теперь на стене на удалении 500м. Как в этом случае вы предлагаете перемещать прицел и за какое время?

время перемещения вычислять исходя из требования к “плавности движения прицела” это надо определять эмпирически, я не скажу на вскидку про 1мсек\пиксель, замерять надо чтобы глазу было удобно…

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

расстояние есть же, вычислить шаг перемещения можно зная расстояние и “шаг плавности” - делим расстояние на “шаг плавности” - получаем количество шагов (сдвигов в N пикселей) для обеспечения визуальной плавности перемещения прицела.

И какое бы вы требование поставили? Сколько секунд заложили бы на “плавность прицела” ?

Я описал ситуацию, в которой никаких “точек фокуса” нет.

Вы хотите сказать, что я поворачиваю камеру вправо и прицел не обязан следовать за ней по кратчайшему пути?

И какой бы вы выставили шаг плавности?

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

либо нейронку натравить, если у вас есть ДС, они могут решить такую задачу по идее…

можно, как вариант, наколхозить переход до “условного” центра на поверхности объекта считать траекторию прицела, исходя из расстояния до объекта и длины\ширины объекта вычислять количество шагов, но в этом случае перемещение будет чуть более рваным, либо смазанным как мне кажется…

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

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

plavnost

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

Итак, вернемся к моему вопросу. Какое время перевода прицела в глубину вы бы сочли для себя комфортным?

Доли секунды, какие конкретно нужно выяснять опытным путем, как я выше написал, вариантов несколько:

  • Машинным обучением считать, например методом градиентного спуска, в принципе выглядит как задача оптимизации scipy.optimize.minimize.
  • Человека посадить, который вычислит это путем перемещения ползунка количества шагов для разных расстояний затем обобщить и вывести коэффициент.
  • Наколхозить смещение до “условного” центра на поверхности объекта считать траекторию прицела, исходя из расстояния до объекта и длины\ширины объекта вычислять количество шагов, но в этом случае перемещение будет чуть более рваным, либо смазанным как мне кажется…

ничего не делать, прицел то не перемещается… как были координаты его на x1 y1 z1 так там и оставить…