Pourquoi 90 ° horz / 60 ° vert est le champ de vision FPS par défaut?

14

Si je comprends bien, le champ de vision vertical doit être ajusté pour:

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

Autrement dit, le champ de vision doit correspondre à la distance et à la taille de l'écran d'un utilisateur.

Dans de nombreux FPS, il existe une valeur par défaut de 90 ° pour le FoV horizontal ou de 60 ° pour le FoV vertical (en supposant 16: 9). Un exemple est CryEngine. Mais pour un écran 16: 9 20 "(diagonale de la zone visible, soit environ 40 cm x 25 cm), cette valeur par défaut obligerait les utilisateurs à avoir les yeux à 20 cm de l'écran afin d'avoir une vue en perspective correcte.

Donc, soit j'ai fait une erreur dans mes calculs, soit il doit y avoir une raison pour laquelle vous choisiriez volontairement une valeur FoV inadéquate.

Quelle est la raison d'un FoV par défaut de 90 ° horz / 60 ° vert?

dyp
la source
Je sais que des FOV plus élevés peuvent rendre le jeu plus rapide lorsque le paysage se déplace . Il semblerait que ce soit un choix de conception, également en fonction de l'appareil sur lequel vous le jouez. Quels FPS avez-vous mesurés?
Anko
@Anko Eh bien, j'ai fait des "recherches" et trouvé beaucoup de messages sur le forum indiquant pour différents jeux que le FoV par défaut était de 90 ° horz. De plus, j'ai lu quelques documents CryEngine et joué avec FoV dans son jeu d'exemple.
dyp
La raison pour laquelle le champ de vision par défaut est quelle que soit la valeur à laquelle il est défini est qu'il n'a généralement aucun sens de définir une valeur qui n'est pas constante. La plupart des écrans n'ont pas de capteurs qui indiquent à quelle distance se trouve la tête de l'utilisateur. Par conséquent, 90 degrés est une "bonne estimation". Je suppose que vous pourriez dire que cela équivaut à dire "tous nos 20" utilisateurs d'écran devraient s'asseoir à 20 cm de lui ". Voulez-vous dire que vous voulez diminuer le champ de vision parce que la plupart des utilisateurs sont plus éloignés de leurs écrans? Cela le rend trop zoomé et tu dois faire plus de panoramique pour voir ce qui
Steven Lu
Réponse simple: car il se sent assez bien en jouant et n'introduit pas de distorsion indue comme le FOV progressivement plus large. Il est facile de jouer avec les angles de caméra dans n'importe quel éditeur 3D, essayez différentes valeurs et voyez par vous-même. Pas une réponse simple: c'est un complot maçonnique.
Patrick Hughes
EN RELATION
Laurent Couvidou

Réponses:

6

Je pense qu'avoir un FoV de 90 degrés est ce qui semble naturel lorsque vous essayez d'imiter «regarder à travers les yeux humains». Vos calculs seraient corrects si vous utilisiez l'écran pour simuler une fenêtre dans un monde virtuel, pas une perspective à la première personne. Image, il faudrait voir le monde à travers un cadre de 20 "à 80 cm de votre tête ...

Poignard
la source
1
Mais «regarder à travers une fenêtre dans un monde virtuel» n'est pas ce qu'est une projection en perspective? Oh, et vous pouvez également projeter des éléments qui «dépassent» de votre écran sur la surface de l'écran.
dyp
4
Pour les jeux à la première personne, avoir un FoV très limité peut être irritant et blesser le gameplay et l'immersion IMO, car vous voyez beaucoup moins que ce à quoi vous êtes habitué dans la vraie vie. Personnellement, je trouve que tout ce qui est bien en dessous de 90 ° est inadéquat. Imaginez-vous debout dans un coin d'une pièce carrée avec un FoV horizontal de 65 °, comme cela semble courant pour les jeux sur console - vous ne pourriez pas voir toute la pièce, vous obligeant à continuer de regarder à gauche et à droite pour rester conscient. Cela me rendrait fou dans la vraie vie :)
1
Oui, Bien sur que c'est ça. Faites-le nous.123rf.com/400wm/400/400/ronstik/ronstik1112/ronstik111200016/… avec vos doigts et simulez un écran de 20 "devant vous (à 80 cm). Imaginez maintenant que c'est tout ce que vous pouvez voir. Comme melak47 souligné, ce serait irritant. Déplacez cet écran / cadre simulé de 20 "maintenant à 20 cm de votre tête et il devrait correspondre à peu près à votre champ de vision réel.
Dirk
3
En effet, la fausse perspective induite par un champ de vision artificiellement large n'est absolument pas naturelle, et je trouve souvent la distorsion qu'elle crée stressante et ennuyeuse. Mais il est toujours infiniment préférable d'essayer de tout voir à travers un judas de 20 ° à 30 °, ce qui impliquerait une perspective "réaliste" sur un seul moniteur typique. Parlez de vision tunnel!
Ilmari Karonen le
3

Une grande partie de l'effet du FOV est sur la vitesse à laquelle vous semblez vous déplacer dans le monde (c'est toujours la même vitesse; c'est purement perceptionnel). Avec un champ de vision horizontal trop large, vous semblerez vous déplacer très rapidement, avec trop étroit, vous semblerez se déplacer très lentement. Un angle de 90 degrés semble être le "point idéal", et le développeur du jeu peut régler la vitesse de déplacement souhaitée pour les jeux individuels à partir de là.

C'est aussi le cas que 4 fois 90 degrés soit 360 degrés, ce qui est un cercle. La configuration du champ de vision horizontal de manière à ce qu'il corresponde parfaitement aux quadrants avant / gauche / arrière / droit semble logique.

Et enfin, il y a le vieux châtaignier de préséance et d'inertie. Je ne sais pas si certains jeux offraient un champ de vision réglable par le joueur avant Quake, mais Quake l'a fait et il était par défaut à 90 degrés horizontal; il est facile d'imaginer que d'autres jeux prennent juste 90 degrés à partir de là.

Il convient de noter que de nos jours, les degrés 90 deviennent de moins en moins courants, les jeux (en particulier les FPS modernes) ayant une valeur légèrement inférieure - aux alentours de 80.

Si vous voulez corriger l'aspect de votre FOV, vous pouvez utiliser quelque chose comme ça (je ne prétends pas que c'est la seule ou la meilleure façon, mais c'est cohérent avec la calculatrice FOV à http://www.emsai.net/projects/widescreen / fovcalc / ; cela suppose un rapport d'aspect de base de 4: 3 (vous pouvez l'ajuster dans l'appel à CalcFovY ci-dessous))

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;
}

Ensuite, appelez-le comme:

// 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

Les fov_x et fov_y calculés peuvent ensuite être branchés dans la matrice de perspective suivante (convention 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

Cela vous donnera un champ de vision horizontal ajusté qui conserve le champ de vision vertical quels que soient la résolution et le rapport d'aspect.

Maximus Minimus
la source