Neden 90 ° yatay / 60 ° dikey varsayılan FPS Görüş Alanıdır?


14

Anladığım kadarıyla, dikey Görüş Alanı şu şekilde ayarlanmalıdır:

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

Yani, Görüş Alanı bir kullanıcının ekranla olan mesafesine ve boyutuna uymalıdır.

Birçok FPS'de, yatay FoV için varsayılan 90 ° veya dikey FoV için 60 ° değer vardır (16: 9 olduğu varsayılır). Bir örnek CryEngine'dir. Ancak 16: 9 20 "ekran (görünür alanın köşegenliği, yani yaklaşık 40 cm x 25 cm) için bu varsayılan değer, perspektif olarak doğru bir görünüm elde etmek için kullanıcıların ekrandan 20 cm gözlerine sahip olmasını gerektirir.

Yani ya hesaplamalarımda bir hata yaptım ya da bilerek yetersiz bir FoV değeri seçmenizin bir nedeni olmalı.

Varsayılan 90 ° yatay / 60 ° dikey FoV'un nedeni nedir?


Yüksek FOV'ların manzara ilerledikçe bir oyunu daha hızlı hissettirebileceğini biliyorum . Bu, oynattığınız cihaza bağlı olarak bir tasarım seçimi gibi görünüyor. Hangi FPS'leri ölçtünüz?
Anko

@Anko Ben bazı "araştırma" yaptım ve varsayılan FoV 90 ° horz olduğunu farklı oyunlar için forum forumları bir sürü buldum. Ayrıca, bazı CryEngine belgelerini okudum ve örnek oyunda FoV ile oynadım.
dyp

Nedeni FOV bunun için ayarlanır ne olursa olsun değer varsayılan neden için, genellikle sabit olmayan bir değer ayarlamak için hiçbir mantıklı olmasıdır. Çoğu ekran, kullanıcının kafasının ne kadar uzakta olduğunu belirten sensörlere sahip değildir. Bu nedenle 90 derece "iyi bir tahmindir". Sanırım "tüm 20" ekran kullanıcılarımızın ondan 20 cm uzakta oturması gerektiğini söyleyebiliriz. Çoğu kullanıcı ekranlarından daha uzak oturduğundan FOV'u azaltmak istediğinizi mi söylüyorsunuz? ve etrafını görmek için daha fazla kaydırmalısın.Bu oyun benim için daha çok emiyor
Steven Lu

Basit cevap: çünkü oynarken yeterince iyi hissettiriyor ve giderek daha geniş FOV gibi gereksiz bozulmalara neden olmuyor. Herhangi bir 3D editörde kamera açıları ile uğraşmak kolaydır, farklı değerleri deneyin ve kendiniz görün. Basit bir cevap değil: masonik bir komplo.
Patrick Hughes

Yanıtlar:


6

Bence 90g'lık bir FoV'ye sahip olmak, 'insan gözlerine bakarak' taklit etmeye çalıştığınızda doğal olan şeydir. Birinci şahıs bakış açısına göre bir pencereyi sanal bir dünyaya benzetmek için ekranı kullanırsanız hesaplamalarınız doğru olur. Resim dünyayı başınızdan 80 cm uzakta 20 "çerçeveden görmek zorunda kalacaksınız ...


1
Ama "bir pencereden sanal bir dünyaya bakmak", perspektif projeksiyonunun ne demek olduğunu değil mi? Oh, ve ayrıca ekranınızın yüzeyine "yapışan" şeyleri de yansıtabilirsiniz.
dyp

4
Birinci şahıs perspektif oyunları için, çok sınırlı bir FoV'ye sahip olmak rahatsız edici olabilir ve oyun ve daldırma IMO'yu incitebilir, çünkü gerçek hayatta alıştığınızdan çok daha azını görürsünüz. Şahsen, 90 ° 'nin altında bir şey yetersiz buluyorum. Konsol oyunları için yaygın olarak göründüğü gibi 65 ° yatay bir FoV değerine sahip kare bir odanın köşesinde durduğunuzu düşünün - tüm odayı göremezsiniz ve sizi farkındalığı sürdürmek için sağa ve sola bakmaya zorlarsınız. Bu beni gerçek hayatta deli sürücü :)

1
Evet, tabi ki öyle. Bunu bize yapın.123rf.com/400wm/400/400/ronstik/ronstik1112/ronstik111200016/ … parmaklarınızla ve önünüzde 20 inçlik bir ekranı simüle edin (80 cm uzakta). Bu simüle edilmiş 20 inç ekran / çerçeveyi şimdi başınızdan 20 cm uzağa taşıyın ve gerçek görüş alanınızla kabaca eşleşmelidir.
Dirk

3
Gerçekten de, yapay olarak geniş bir görüş alanının neden olduğu yanlış perspektif tamamen doğal değildir ve kişisel olarak stresli ve sinir bozucu yarattığı bozulmayı sıklıkla bulurum. Ancak, her şeyi 20 ° -30 ° gözetleme deliğinden görüntülemeye çalışmak sonsuza kadar tercih edilir, bu da tipik bir tek monitörde "gerçekçi" perspektifin ne anlama geleceği ile ilgilidir. Tünel vizyonu hakkında konuşun!
Ilmari Karonen

3

FOV'un etkisi, dünya üzerinde ne kadar hızlı hareket ettiğiniz gibi görünüyor (hala aynı hız; bu tamamen algılayıcı). Çok geniş yatay bir FOV ile çok hızlı hareket edeceksiniz, çok dar ile çok yavaş hareket edeceksiniz. 90 derece yatay "tatlı nokta" gibi görünüyor ve oyun geliştiricisi oradan bireysel oyunlar için istenen hareket hızını ayarlayabilir.

Aynı zamanda 4 kez 90 derecenin bir daire olan 360 derece olduğu da söz konusudur. Yatay FOV'u ön / sol / arka / sağ kadranlarla iyi eşleşecek şekilde ayarlamak mantıklı görünüyor.

Ve son olarak, önceliğin ve ataletin eski kestanesi var. Herhangi bir oyunun Quake'ten önce oyuncu tarafından ayarlanabilir FOV sunup sunmadığından emin değilim, ancak Quake yaptı ve varsayılan olarak 90 derece yataydı; diğer oyunların 90 dereceye kadar çıktığını hayal etmek kolaydır.

Günümüzde 90 derecenin daha az yaygınlaştığını, oyunların (özellikle modern FPS'ler) biraz daha düşük bir değere (80 veya daha fazla) ayarlandığını belirtmek gerekir.

FOV'nuzu düzeltmek istiyorsanız, böyle bir şey kullanabilirsiniz (bunun tek veya en iyi yol olduğunu iddia etmiyorum, ancak http://www.emsai.net/projects/widescreen adresindeki FOV hesap makinesiyle tutarlı / fovcalc / ; bu 4: 3 temel en boy oranına göre varsayılır (bunu aşağıdaki CalcFovY çağrısında ayarlayabilirsiniz)

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

Sonra şöyle deyin:

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

Hesaplanan fov_x ve fov_y daha sonra aşağıdaki perspektif matrisine eklenebilir (OpenGL kuralı):

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

Bu, çözünürlük ve en boy oranına bakılmaksızın dikey FOV'yi koruyan, en boyuna göre ayarlanmış bir yatay FOV verecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.