Чому 90 ° горц / 60 ° верт за замовчуванням поле зору FPS?


14

Наскільки я розумію, вертикальне поле зору має бути налаштоване на:

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

Тобто Поле зору повинно відповідати відстані користувача та розміру екрана.

У багатьох FPS є стандартне значення 90 ° для горизонтального FoV або 60 ° для вертикального FoV (якщо вважати 16: 9). Один із прикладів - CryEngine. Але для екрану 16: 9 20 "(діагональ видимої області, тобто приблизно 40 см х 25 см), це значення за замовчуванням вимагатиме від користувачів очей на 20 см від екрану, щоб отримати перспективне вигляд.

Отже, або я помилився в своїх розрахунках, або повинна бути причина, чому ви спеціально вибрали невідповідне значення FoV.

У чому причина замовчування FoV у 90 ° горц / 60 ° верт?


Я знаю, що більш високі FOV можуть змусити гру відчувати себе швидше, коли декорація рухається . Здавалося б, це вибір дизайну, який також залежить від пристрою, на якому ви граєте. Які FPS ви вимірювали?
Анко

@Anko Ну, я провів "дослідження" і знайшов багато форумів, в яких говорилося про різні ігри, для яких FoV за замовчуванням становить 90 ° горц. Крім того, я прочитав кілька документів CryEngine і пограв з FoV у своїй прикладі гри.
dyp

Причина того , чому FOV по замовчуванням в будь-яке значення , воно встановлено на, то , що вона взагалі не має ніякого сенсу , щоб встановити значення, яка не є постійним. Більшість дисплеїв не мають датчиків, які б вказували, наскільки далеко знаходиться голова користувача. Тому 90 градусів - "гарна здогадка". Я думаю, ви можете сказати, що це рівнозначно "всі наші 20" користувачі екрану повинні сидіти на відстані 20 см від нього ". Ви говорите, що хочете зменшити FOV, оскільки більшість користувачів сидять далі від своїх дисплеїв? Це робить це занадто збільшенням і вам доведеться панірувати більше, щоб побачити ваше оточення. Це робить гру смоктання більше для мене.
Стівен Лу,

Проста відповідь: адже він відчуває себе досить добре під час гри і не вводить надмірних спотворень, як поступово ширші FOV. Зволікатися з кутами камери легко у будь-якому 3D-редакторі, спробуйте різні значення та переконайтесь у цьому самі. Непроста відповідь: це масонська змова.
Патрік Х'юз

Відповіді:


6

Мені здається, що FoV у 90deg - це те, що відчувається природно, коли ти намагаєшся імітувати "дивлячись людськими очима". Ваші розрахунки були б правильними, якби ви використовували екран для імітації вікна у віртуальний світ, а не від першої особи. Зображення, ви б побачили світ через 20-дюймовий кадр на відстані 80 см від голови ...


1
Але хіба "дивлячись через вікно у віртуальний світ", про що таке перспективна проекція? О, і ви також можете проектувати речі, які "стирчать" з вашого екрана на екранній поверхні.
dyp

4
Для перспективних ігор від першої особи наявність дуже обмеженого FoV може викликати роздратування та пошкодження геймплея та занурення в IMO, оскільки ви бачите набагато менше, ніж ви звикли в реальному житті. Особисто я вважаю що-небудь набагато нижче 90 ° неадекватним. Уявіть, що стоїте в кутку квадратної кімнати з горизонтальним FoV 65 °, як здається, звичайним для консольних ігор - ви б не змогли побачити всю кімнату, змушуючи вас тримати погляд ліворуч та праворуч, щоб підтримувати обізнаність. Це призвело б до того, що я

1
Так, звичайно. Зробіть це у нас.123rf.com/400wm/400/400/ronstik/ronstik1112/ronstik111200016/… пальцями та імітуйте 20-дюймовий екран перед собою (на відстані 80 см). Тепер уявіть, що це все, що ви могли бачити. зазначив, що це буде дратувати. Перемістіть цей імітований 20-дюймовий екран / рамку зараз на 20 см від голови, і він повинен приблизно відповідати вашому фактичному полі зору.
Дірк

3
Дійсно, хибна перспектива, спричинена штучно широким полем зору, абсолютно неприродна, і я особисто часто виявляю спотворення, яке воно створює стресовим і дратівливим. Але все ж таки нескінченно бажано намагатись переглянути все через вітрину 20 ° -30 °, що стосується того, що означатиме "реалістична" перспектива на типовому одиночному моніторі. Поговоріть про тунельне бачення!
Ільмарі Каронен

3

Багато ефекту FOV полягає в тому, наскільки швидко ви, здається, рухаєтеся по світу (це все одно з тією ж швидкістю; це суто сприйняття). З занадто широким горизонтальним FOV ви, здається, рухаєтеся дуже швидко, а надто вузьким ви, здається, рухаєтеся дуже повільно. 90 градусів горизонтально виглядає як "солодке місце", і розробник гри може налаштувати бажану швидкість руху для окремих ігор звідти.

Так само буває, що 4 рази 90 градусів - це 360 градусів, що є колом. Якщо встановити горизонтальний FOV так, щоб він чітко відображався на передній / лівий / задній / правий квадранти, мабуть, має сенс.

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

Варто зазначити, що в наш час 90 градусів стає все рідше, в іграх (особливо сучасних FPS) налаштовують дещо нижчу величину - 80 або близько.

Якщо ви хочете скорегувати аспект FOV, ви можете використовувати щось подібне (я не претендую, що це єдиний чи найкращий спосіб, але це відповідає калькулятору FOV на веб- сайті 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

Це дасть вам орієнтовану на аспект горизонтальну FOV, яка підтримує вертикальну FOV незалежно від роздільної здатності та співвідношення сторін.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.