Почему угол обзора 90 ° / 60 ° по умолчанию является полем обзора FPS по умолчанию?

14

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

fov = 2 * arctan(0.5*screenHeight / distanceEyeScreen);

То есть поле обзора должно соответствовать расстоянию пользователя и размеру экрана.

Во многих FPS значение по умолчанию составляет 90 ° для горизонтального поля зрения или 60 ° для вертикального поля зрения (при условии 16: 9). Одним из примеров является CryEngine. Но для 16: 9 20-дюймового экрана (диагональ видимой области, то есть около 40 см х 25 см), это значение по умолчанию требует, чтобы пользователи смотрели в 20 см от экрана, чтобы получить перспективный вид.

Так что либо я допустил ошибку в своих расчетах, либо должна быть причина, по которой вы намеренно выбрали бы неадекватное значение FoV.

Какова причина по умолчанию FoV 90 ° Гц / 60 ° Верт?

DYP
источник
Я знаю, что более высокие FOVs могут заставить игру чувствовать себя быстрее, когда пейзаж движется . Казалось бы, это выбор дизайна, также зависящий от устройства, на котором вы играете. Какие FPS вы измерили?
Анко
@Anko Что ж, я провел «исследование» и нашел много постов на форумах, в которых говорится, что для разных игр значение FoV по умолчанию составляет 90 ° Гц. Кроме того, я прочитал несколько документов CryEngine и поиграл с FoV в его примере игры.
13
Причина того , почему FOV по умолчанию в любое значение , оно установлено на, то , что она вообще не имеет никакого смысла , чтобы установить значение, которое не является постоянным. Большинство дисплеев не имеют датчиков, показывающих, как далеко находится голова пользователя. Поэтому 90 градусов - это «хорошее предположение». Я полагаю, вы могли бы сказать, что это равносильно тому, что «все наши 20» пользователей экрана должны находиться на расстоянии 20 см от него ». Вы хотите сказать, что хотите уменьшить FOV, потому что большинство пользователей сидят дальше от своих дисплеев? Это делает его слишком увеличенным и вам нужно больше поворачиваться, чтобы увидеть свое окружение. Это делает игру более отстойной для меня
Стивен Лу,
Простой ответ: потому что он чувствует себя достаточно хорошо во время игры и не вносит чрезмерных искажений, как прогрессивно более широкое поле зрения. В любом 3D-редакторе легко поиграть с углами камеры, попробуйте разные значения и убедитесь сами. Непростой ответ: это масонский заговор.
Патрик Хьюз
Связанный: gamedev.stackexchange.com/a/47619/14808
Лоран Кувиду

Ответы:

6

Я думаю, что наличие поля зрения 90 градусов - это то, что кажется естественным, когда вы пытаетесь имитировать «взгляд человеческими глазами». Ваши расчеты будут правильными, если вы будете использовать экран для имитации окна в виртуальный мир, а не от первого лица. Представьте, что вам нужно увидеть мир через 20-дюймовую рамку на расстоянии 80 см от вашей головы ...

кортик
источник
1
Но разве «взгляд из окна в виртуальный мир» не является перспективной проекцией? О, и вы также можете проецировать вещи, «торчащие» из вашего экрана на поверхность экрана.
13
4
В перспективных играх от первого лица наличие очень ограниченного поля зрения может раздражать игровой процесс и мешать иммо-погружению, поскольку вы видите гораздо меньше, чем вы привыкли в реальной жизни. Лично я нахожу что-то намного ниже 90 ° неадекватным. Представьте себе, что вы стоите в углу квадратной комнаты с горизонтальным полем зрения 65 °, что, как кажется, характерно для консольных игр - вы не сможете видеть всю комнату, заставляя вас продолжать смотреть влево и вправо, чтобы поддерживать осознанность. Это
1
Да, конечно. Сделайте это us.123rf.com/400wm/400/400/ronstik/ronstik1112/ronstik111200016/… пальцами и смоделируйте 20- дюймовый экран перед собой (на расстоянии 80 см). Теперь представьте, что это все, что вы могли видеть. Как melak47 указал, что это было бы раздражающим. Отодвиньте этот имитируемый 20-дюймовый экран / рамку теперь на 20 см от вашей головы, и он должен примерно соответствовать вашему реальному полю зрения.
Дирк
3
Действительно, ложная перспектива, вызванная искусственно широким полем зрения, совершенно неестественна, и я лично часто нахожу искажение, которое оно создает, стрессовое и раздражающее. Но все равно бесконечно предпочтительнее пытаться просматривать все через глазок 20–30 °, что подразумевает «реалистичная» перспектива на обычном мониторе. Разговор о туннельном видении!
Ильмари Каронен,
3

Большое влияние FOV на то, как быстро вы, кажется, двигаетесь по миру (это все та же скорость; это чисто восприятие). При слишком широком горизонтальном поле зрения вы будете двигаться очень быстро, а при слишком узком - очень медленно. Горизонтальный угол в 90 градусов кажется «сладкой точкой», и разработчик игры может настроить желаемую скорость движения для отдельных игр оттуда.

Это также тот случай, когда 4 раза 90 градусов - это 360 градусов, то есть круг. Настройка горизонтального поля зрения так, чтобы он хорошо соответствовал передним / левым / задним / правым квадрантам, имеет смысл.

И, наконец, старый каштан старшинства и инерции. Я не уверен, предлагали ли какие-либо игры регулируемый игроком FOV до Quake, но Quake сделал, и он по умолчанию установил 90 градусов по горизонтали; Легко представить, что другие игры просто поднимаются оттуда на 90 градусов.

Стоит отметить, что в настоящее время 90 градусов становятся все менее распространенными, при этом игры (особенно современные FPS) устанавливаются на несколько более низкое значение - в пределах или около 80.

Если вы хотите скорректировать аспект вашего поля зрения, вы можете использовать что-то вроде этого (я не претендую на то, что это единственный или лучший способ, но это согласуется с калькулятором поля зрения на http://www.emsai.net/projects/widescreen / fovcalc / ; предполагается, что относительно базового соотношения сторон 4: 3 (вы можете изменить это при вызове CalcFovY ниже))

float CalcFovX (float fov_y, float width, float height)
{
    float   a;
    float   y;

    if (fov_y < 1) fov_y = 1;
    if (fov_y > 179) fov_y = 179;

    y = height / tan (fov_y / 360 * M_PI);
    a = atan (width / y);
    a = a * 360 / M_PI;

    return a;
}

float CalcFovY (float fov_x, float width, float height)
{
    float   a;
    float   x;

    if (fov_x < 1) fov_x = 1;
    if (fov_x > 179) fov_x = 179;

    x = width / tan (fov_x / 360 * M_PI);
    a = atan (height / x);
    a = a * 360 / M_PI;

    return a;
}

Тогда назовите это как:

// you should use #define of const instead of magic numbers here, which are just here for illustration purposes in this sample
fov_y = CalcFovY (playerAdjustableFOV, 4, 3); // this is your base aspect that adjusted FOV should be relative to
fov_x = CalcFovX (fov_y, width, height); // this is your actual window width and height

Вычисленные значения fov_x и fov_y могут быть затем включены в следующую матрицу перспективы (соглашение OpenGL):

1.0f / tan (DEG2RAD (fov_x) * 0.5f),
0,
0,
0,
0,
1.0f / tan (DEG2RAD (fov_y) * 0.5f),
0,
0,
0,
0,
(zFar + zNear) / (zNear - zFar),
-1,
0,
0,
(2.0f * zFar * zNear) / (zNear - zFar),
0

Это даст вам горизонтальное поле зрения с коррекцией аспекта, которое поддерживает вертикальное поле зрения независимо от разрешения и соотношения сторон.

Максимус Минимус
источник