Dlaczego 90 ° horz / 60 ° vert jest domyślnym polem widzenia FPS?

14

O ile rozumiem, pionowe pole widzenia powinno być dostosowane do:

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

Oznacza to, że pole widzenia powinno być zgodne z odległością i rozmiarem ekranu użytkownika.

W wielu FPS istnieje domyślna wartość 90 ° dla poziomego FoV lub 60 ° dla pionowego FoV (przy założeniu 16: 9). Jednym z przykładów jest CryEngine. Ale w przypadku ekranu 16: 9 20 "(przekątna widocznego obszaru, tj. Około 40 cm x 25 cm), ta domyślna wartość wymagałaby od użytkowników patrzenia 20 cm od ekranu w celu uzyskania prawidłowego widzenia z perspektywy czasu.

Więc albo popełniłem błąd w moich obliczeniach, albo musi być powód, dla którego celowo wybrałeś nieodpowiednią wartość FoV.

Jaki jest powód domyślnego FoV 90 ° horz / 60 ° vert?

dyp
źródło
Wiem, że wyższe pola widzenia mogą sprawić, że gra poczuje się szybciej w miarę przesuwania się scenerii . Wydaje się, że jest to wybór projektowy, zależny również od urządzenia, na którym grasz. Jakie FPS mierzyłeś?
Anko
@Anko Cóż, zrobiłem trochę „badań” i znalazłem wiele postów na forum stwierdzających dla różnych gier, że domyślnie FoV to 90 ° horz. Ponadto przeczytałem kilka dokumentów CryEngine i bawiłem się FoV w jego przykładowej grze.
wtorek,
Powód dla dlaczego FOV jest domyślnie cokolwiek wartość jest ustawiona na, jest to, że zazwyczaj nie ma sensu, aby ustawić wartość, która nie jest stała. Większość wyświetlaczy nie ma czujników wskazujących, jak daleko jest głowa użytkownika. Dlatego 90 stopni to „zgadywanie”. Podejrzewam, że można powiedzieć, że jest to równoważne stwierdzeniu „wszyscy nasi użytkownicy ekranu 20” powinni usiąść 20 cm od niego. Czy mówisz, że chcesz zmniejszyć pole widzenia, ponieważ większość użytkowników siedzi dalej od swoich wyświetlaczy? i musisz się więcej kręcić, by zobaczyć swoje otoczenie. To sprawia, że ​​gra jest dla mnie bardziej do kitu
Steven Lu
Prosta odpowiedź: ponieważ czuje się wystarczająco dobrze podczas gry i nie wprowadza nadmiernych zniekształceń, jak robią to coraz szersze pola widzenia. Zmienianie kąta kamery jest łatwe w dowolnym edytorze 3D, wypróbuj różne wartości i przekonaj się sam. Nie prosta odpowiedź: to spisek masoński.
Patrick Hughes,
Powiązane: gamedev.stackexchange.com/a/47619/14808
Laurent Couvidou 10.04.2013

Odpowiedzi:

6

Myślę, że uzyskanie wartości FoV 90 stopni jest czymś naturalnym, kiedy próbujesz naśladować „spojrzenie ludzkimi oczami”. Twoje obliczenia byłyby poprawne, gdybyś użył ekranu do symulacji okna do wirtualnego świata, a nie perspektywy z perspektywy pierwszej osoby. Obraz, który zobaczyłbyś świat przez 20-calową ramę w odległości 80 cm od twojej głowy ...

Sztylet
źródło
1
Ale czyż „spoglądanie przez okno w wirtualny świat” nie jest tym, czym jest projekcja perspektywiczna? Aha, możesz także wyświetlać rzeczy „wystające” z ekranu na powierzchnię ekranu.
wtorek,
4
W przypadku gier z perspektywy pierwszej osoby posiadanie bardzo ograniczonego pola widzenia może być irytujące i zranić rozgrywkę oraz zanurzenie się w IMO, ponieważ widzisz znacznie mniej niż jesteś przyzwyczajony w prawdziwym życiu. Osobiście uważam, że wszystko znacznie poniżej 90 ° jest nieodpowiednie. Wyobraź sobie, że stoisz w rogu kwadratowego pokoju z poziomym polem widzenia 65 °, co wydaje się być powszechne w grach konsolowych - nie będziesz w stanie zobaczyć całego pokoju, zmuszając cię do patrzenia w lewo i prawo w celu zachowania świadomości. To doprowadziłoby mnie do szału w prawdziwym życiu :)
1
Tak, oczywiście, że tak. Zrób to us.123rf.com/400wm/400/400/ronstik/ronstik1112/ronstik111200016/ ... palcami i zasymuluj ekran 20 "przed sobą (80 cm dalej). Teraz wyobraź sobie, że to wszystko, co widziałeś. Jako melak47 wskazał, że byłoby to irytujące. Przesuń ten symulowany ekran / ramkę 20 "teraz 20 cm od głowy i powinien on mniej więcej odpowiadać twojemu rzeczywistemu polu widzenia.
Dirk
3
Rzeczywiście, fałszywa perspektywa wywołana sztucznie szerokim polem widzenia jest całkowicie nienaturalna i osobiście często uważam, że zniekształcenie, które powoduje, jest stresujące i denerwujące. Ale nadal nieskończenie lepiej jest patrzeć na wszystko przez wizjer 20 ° -30 °, co sugeruje „realistyczną” perspektywę na typowym pojedynczym monitorze. Porozmawiaj o wizji tunelu!
Ilmari Karonen,
3

Duży wpływ FOV polega na tym, jak szybko poruszasz się po świecie (to wciąż ta sama prędkość; jest to czysto percepcyjne). Przy zbyt szerokim poziomym polu widzenia będziesz wydawać się poruszać bardzo szybko, ze zbyt wąskimi będziesz wydawał się poruszać bardzo wolno. 90 stopni w poziomie wydaje się być „słodkim miejscem”, a twórca gry może stamtąd dostroić żądaną prędkość ruchu dla poszczególnych gier.

Jest tak również, że 4 razy 90 stopni to 360 stopni, co jest okręgiem. Wydaje się sensowne ustawienie poziomego pola widzenia w taki sposób, aby ładnie odwzorowywało się na ćwiartkach przedniej / lewej / tylnej / prawej.

I wreszcie jest stary kasztan pierwszeństwa i bezwładności. Nie jestem pewien, czy jakiekolwiek gry oferowały regulowaną przez gracza wartość pola widzenia przed Quake, ale Quake zrobił to i domyślnie ustawiony był na 90 stopni w poziomie; łatwo sobie wyobrazić, że inne gry zaczynają stamtąd pod kątem 90 stopni.

Warto zauważyć, że obecnie 90 stopni staje się coraz mniej powszechne, a gry (szczególnie współczesne FPS) mają nieco niższą wartość - około 80.

Jeśli chcesz poprawić aspekt swojego FOV, możesz użyć czegoś takiego (nie udaję, że jest to jedyny lub najlepszy sposób, ale jest zgodny z kalkulatorem FOV pod adresem http://www.emsai.net/projects/widescreen / fovcalc / ; to założenie w stosunku do podstawowego współczynnika proporcji 4: 3 (możesz to zmienić w wywołaniu CalcFovY poniżej))

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

Następnie nazwij to tak:

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

Obliczone fov_x i fov_y można następnie podłączyć do następującej macierzy perspektywicznej (konwencja 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

To da ci poziome pole widzenia z regulacją kształtu, które utrzymuje pionowe pole widzenia niezależnie od rozdzielczości i współczynnika proporcji.

Maximus Minimus
źródło