Tại sao 90 ° horz / 60 ° vert lại là Trường nhìn FPS mặc định?


14

Theo tôi hiểu, Trường nhìn dọc nên được điều chỉnh thành:

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

Nghĩa là, Trường nhìn phải khớp với khoảng cách và kích thước màn hình của người dùng.

Trong nhiều FPS, có giá trị mặc định là 90 ° cho foV ngang hoặc 60 ° cho foV dọc (giả sử 16: 9). Một ví dụ là CryEngine. Nhưng đối với màn hình 16: 9 20 (đường chéo của vùng nhìn thấy, tức là khoảng 40 cm x 25 cm), giá trị mặc định này sẽ yêu cầu người dùng phải rời mắt khỏi màn hình 20 cm để có được góc nhìn chính xác.

Vì vậy, tôi đã phạm sai lầm trong tính toán của mình hoặc phải có lý do tại sao bạn chọn giá trị foV không phù hợp trên mục đích.

Lý do cho một foV mặc định là 90 ° horz / 60 ° vert là gì?


Tôi biết rằng FOV cao hơn có thể làm cho trò chơi cảm thấy nhanh hơn khi khung cảnh di chuyển . Nó dường như là một sự lựa chọn thiết kế, cũng phụ thuộc vào thiết bị bạn đang chơi trên đó. Những gì FPS bạn đã đo?
Anko

@Anko Vâng, tôi đã thực hiện một số "nghiên cứu" và tìm thấy rất nhiều bài đăng trên diễn đàn nêu rõ các trò chơi khác nhau mà foV mặc định là 90 ° horz. Thêm vào đó, tôi đã đọc một số tài liệu CryEngine và chơi xung quanh với FoV trong trò chơi mẫu của nó.
dyp

Các lý do tại sao các FOV là mặc định cho bất kỳ giá trị nó được thiết lập để, là nó thường làm cho không có ý nghĩa để đặt một giá trị không phải là hằng số. Hầu hết các màn hình không có cảm biến cho biết đầu của người dùng cách xa bao xa. Do đó, 90 độ là một "dự đoán tốt". Tôi cho rằng bạn có thể nói nó tương đương với việc nói "tất cả người dùng màn hình 20" của chúng tôi nên ngồi cách nó 20 cm ". Bạn có nói rằng bạn muốn giảm FOV vì hầu hết người dùng ngồi cách xa màn hình của họ không? và bạn phải xoay xung quanh nhiều hơn để xem môi trường xung quanh. Điều đó làm cho một trò chơi hấp dẫn hơn đối với tôi.
Steven Lu

Câu trả lời đơn giản: bởi vì nó cảm thấy đủ tốt trong khi chơi và không đưa ra sự biến dạng không đáng có như FOV ngày càng rộng hơn. Loay hoay với các góc máy ảnh dễ dàng trong bất kỳ trình chỉnh sửa 3D nào, hãy thử các giá trị khác nhau và tự mình xem. Câu trả lời không đơn giản: đó là một âm mưu của người thợ máy.
Patrick Hughes

Câu trả lời:


6

Tôi nghĩ rằng có một foV 90deg là điều tự nhiên khi bạn cố gắng bắt chước 'nhìn qua mắt người'. Tính toán của bạn sẽ chính xác nếu bạn sử dụng màn hình để mô phỏng một cửa sổ vào một thế giới ảo, không phải là góc nhìn người thứ nhất. Hình ảnh bạn sẽ phải nhìn thế giới qua một khung hình 20 "cách đầu bạn 80cm ...


1
Nhưng không phải là "nhìn qua cửa sổ vào một thế giới ảo" tất cả những gì về một viễn cảnh? Ồ, và bạn cũng có thể chiếu những thứ "dính" màn hình lên bề mặt màn hình.
dyp

4
Đối với các trò chơi góc nhìn người thứ nhất, việc có một foV rất hạn chế có thể gây khó chịu và làm tổn thương trò chơi và nhập vai IMO, vì bạn thấy ít hơn nhiều so với bạn đã quen với cuộc sống thực. Cá nhân, tôi thấy bất cứ điều gì dưới 90 ° không đầy đủ. Hãy tưởng tượng bạn đứng trong một góc của một căn phòng hình vuông có foV ngang 65 ° dường như là phổ biến đối với các trò chơi trên bàn điều khiển - bạn sẽ không thể nhìn thấy toàn bộ căn phòng, buộc bạn phải nhìn sang trái và phải để duy trì nhận thức. Điều đó sẽ khiến tôi phát điên trong cuộc sống thực :)

1
Vâng, tất nhiên nó được. Làm điều này với chúng tôi.123rf.com/400wm/400/400/ronstik/ronstik1112/ronstik111200016/ bằng ngón tay của bạn và mô phỏng màn hình 20 "trước mặt bạn (cách 80cm). Bây giờ hãy tưởng tượng đó là tất cả những gì bạn có thể thấy. Như melak47 chỉ ra, điều đó sẽ gây khó chịu. Di chuyển màn hình / khung mô phỏng 20 "này cách đầu bạn 20 cm và nó sẽ phù hợp với tầm nhìn thực tế của bạn.
Dirk

3
Thật vậy, viễn cảnh sai lầm gây ra bởi một góc nhìn rộng giả tạo là hoàn toàn không tự nhiên, và cá nhân tôi thường thấy sự biến dạng mà nó tạo ra căng thẳng và khó chịu. Nhưng vẫn cực kỳ thích hơn là cố gắng xem mọi thứ thông qua lỗ nhìn trộm 20 ° -30 °, đó là về quan điểm "thực tế" trên một màn hình duy nhất điển hình sẽ ngụ ý gì. Nói về tầm nhìn đường hầm!
Ilmari Karonen

3

Rất nhiều tác dụng của FOV là tốc độ di chuyển của bạn trên thế giới nhanh như thế nào (nó vẫn có cùng tốc độ; đây hoàn toàn là sự cảm nhận). Với FOV quá rộng, dường như bạn sẽ di chuyển rất nhanh, với quá hẹp dường như bạn sẽ di chuyển rất chậm. Ngang 90 độ dường như là "điểm ngọt" và nhà phát triển trò chơi có thể điều chỉnh tốc độ di chuyển mong muốn cho từng trò chơi từ đó.

Cũng có trường hợp 4 lần 90 độ là 360 độ, đó là một vòng tròn. Thiết lập FOV ngang để nó ánh xạ độc đáo vào các góc phần tư trước / trái / sau / phải xuất hiện có ý nghĩa.

Và cuối cùng là hạt dẻ cũ của ưu tiên và quán tính. Tôi không chắc liệu có trò chơi nào cung cấp FOV do người chơi điều chỉnh trước Quake không, nhưng Quake đã làm và nó được mặc định là 90 độ theo chiều ngang; thật dễ dàng để tưởng tượng các trò chơi khác chỉ cần chọn 90 độ từ đó.

Điều đáng chú ý là ngày nay 90 độ đang trở nên ít phổ biến hơn, với các trò chơi (FPS đặc biệt hiện đại) có giá trị thấp hơn một chút - trong hoặc khoảng 80.

Nếu bạn muốn chỉnh sửa khía cạnh FOV của mình, bạn có thể sử dụng cái gì đó như thế này (Tôi không giả vờ đó là cách duy nhất hoặc tốt nhất, nhưng nó phù hợp với máy tính FOV tại http://www.emsai.net/projects/widescreen / fovcalc / ; điều này giả định tỷ lệ khung hình cơ bản là 4: 3 (bạn có thể điều chỉnh điều đó trong lệnh gọi tới CalcFovY bên dưới))

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

Sau đó gọi nó như:

// 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 và fov_y được tính toán sau đó có thể được cắm vào ma trận phối cảnh sau (quy ước 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

Điều này sẽ cung cấp cho bạn một FOV ngang được điều chỉnh theo khía cạnh, duy trì FOV dọc không phân biệt độ phân giải và tỷ lệ khung hình.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.