90°horz / 60°vertがデフォルトのFPS視野を反転するのはなぜですか?


14

私の知る限り、垂直視野は次のように調整する必要があります。

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

つまり、視野はユーザーの画面の距離と画面のサイズに一致する必要があります。

多くのFPSでは、水平FoVのデフォルト値は90°、垂直FoVのデフォルト値は60°です(16:9と仮定)。1つの例はCryEngineです。ただし、16:9 20インチ画面(可視領域の対角、つまり約40 cm x 25 cm)の場合、このデフォルト値では、ユーザーが視点を正確に見るために画面から20 cm目を見る必要があります。

そのため、計算を間違えたか、不適切なFoV値を意図的に選択する理由があるに違いありません。

90°horz / 60°vertのデフォルトFoVの理由は何ですか?


高いFOVを使用すると、風景がを通過するときにゲームが速く感じることがあります。それは、あなたがそれをプレイしているデバイスにも依存する、設計上の選択のように思えます。どのFPSを測定しましたか?
アンコ

@Ankoまあ、私はいくつかの「研究」を行い、デフォルトのFoVが90°horzであるさまざまなゲームについて述べている多くのフォーラム投稿を見つけました。さらに、CryEngineのドキュメントをいくつか読んで、そのサンプルゲームでFoVをいじりました。
dyp

理由 FOVはそれがに設定されているどのような値にデフォルトである理由については、それは一般的に一定でない値を設定しても意味がありませんということです。ほとんどのディスプレイには、ユーザーの頭がどれだけ離れているかを示すセンサーがありません。したがって、90度は「良い推測」です。「20人すべてのスクリーンユーザーは、20cm離れている必要がある」というのと同じだと思うかもしれません。そして、あなたはあなたの周りを見て周り、よりパンお奨めのゲームが私のためにもっと吸う作ること。。
スティーブン・呂

簡単な答え:プレイ中に十分な感触があり、FOVが徐々に広くなるように過度の歪みが生じないためです。カメラアングルをいじるのは、どの3Dエディターでも簡単です。さまざまな値を試してみて、自分で確認してください。単純な答えではありません:それはフリーメーソンの陰謀です。
パトリックヒューズ

回答:


6

FoVが90度であることは、「人間の目を通して見る」ことを模倣しようとするときに自然に感じるものだと思います。画面を使用して、一人称視点ではなく、仮想世界へのウィンドウをシミュレートする場合、計算は正しいでしょう。頭から80cm離れた20インチのフレームを通して世界を見る必要がある画像...


1
しかし、「窓から仮想世界を覗く」ことは、透視投影のすべてではありませんか?ああ、また、画面から「突き出ている」ものを画面の表面に投影することもできます。
dyp

4
一人称視点のゲームの場合、FoVが非常に限られていると、実際の生活で慣れているよりもはるかに少ないため、ゲームプレイや没入IMOを刺激し、傷つける可能性があります。個人的には、90°をはるかに下回るものは不十分だと思います。コンソールゲームではよくあるように、水平FoVが65°の正方形の部屋の角に立っていることを想像してください。それは実際の生活で私を

1
はい、もちろんです。これはus.123rf.com/400wm/400/400/ronstik/ronstik1112/ronstik111200016/…指で行い、目の前(80cm離れた)にある20 インチの画面をシミュレートします。このシミュレートされた20インチのスクリーン/フレームを頭から20cm離すと、実際の視野とほぼ一致するはずです。
ダーク

3
実際、人為的に広い視野によって引き起こされる誤った遠近感は完全に不自然であり、私は個人的にしばしばそれがストレスと迷惑を作成す​​る歪みを見つける。ただし、20〜30度ののぞき穴を通してすべてを表示することは、通常の単一のモニターの「現実的」な視点が意味するものであるため、依然として無限に望ましいものです。トンネルビジョンについて話してください!
イルマリカロネン

3

FOVの効果の多くは、世界を移動する速度に影響します(それでも同じ速度です。これは純粋に知覚的です)。水平FOVが広すぎると、非常に速く移動するように見え、狭すぎると、非常に遅く移動するように見えます。90度の水平は「スイートスポット」のように見え、ゲーム開発者はそこから個々のゲームの望ましい移動速度を調整できます。

また、90度の4倍が360度、つまり円である場合もあります。フロント/レフト/バック/ライトクアドラントにうまくマッピングされるように水平FOVをセットアップすることは理にかなっています。

そして最後に、優先順位と慣性の古い栗があります。Quakeの前にプレイヤーが調整可能なFOVを提供するゲームがあったかどうかはわかりませんが、Quakeは提供し、デフォルトで水平90度になりました。他のゲームがそこから90度だけ上昇するのを想像するのは簡単です。

ゲーム(特に現代のFPS)がわずかに低い値(80前後)に設定されている現在、90度は一般的ではなくなっていることに注意してください。

FOVをアスペクト補正したい場合は、このようなものを使用できます(これが唯一または最良の方法であるとは言いませんが、http: //www.emsai.net/projects/widescreenのFOV計算機と一致しています/ 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が維持されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.