90 ° 수평 / 60 °가 기본 FPS FOV (Field of View) 인 이유는 무엇입니까?


14

내가 이해하는 한, 수직 시야는 다음과 같이 조정되어야합니다.

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

즉, FOV (Field of View)는 사용자의 화면 거리와 크기와 일치해야합니다.

많은 FPS에서 기본값은 수평 FoV의 경우 90 °, 수직 FoV의 경우 60 °입니다 (16 : 9 가정). 한 예로 CryEngine이 있습니다. 그러나 16 : 9 20 인치 화면 (가시 영역의 대각선, 즉 약 40cm x 25cm)의 경우이 기본값을 사용하면 원근감있게 올바른 시야를 얻으려면 화면에서 20cm의 눈이 있어야합니다.

따라서 계산에서 실수를했거나 의도적으로 부적절한 FoV 값을 선택해야하는 이유가 있어야합니다.

기본 FoV가 90 ° 수평 / 60 ° 수직 인 이유는 무엇입니까?


FOV가 높을수록 풍경이 이동함에 따라 게임 느낌이 더 빨라질 수 있음을 알고 있습니다 . 그것은 당신이 그것을 연주하는 장치에 따라 디자인 선택으로 보일 것입니다. 어떤 FPS를 측정 했습니까?
Anko

@Anko 글쎄 "연구"를했고 기본 FoV가 90 도라는 다른 게임을 언급하는 많은 포럼 게시물을 발견했습니다. 또한 CryEngine 문서를 읽고 예제 게임에서 FoV와 함께 놀았습니다.
dyp

이유 화각이로 설정 어떤 값으로 기본 이유에 대한, 그것은 일반적으로 일정하지 않은 값을 설정하는 데 어떤 의미가 없다는 것입니다. 대부분의 디스플레이에는 사용자의 머리가 얼마나 떨어져 있는지 알려주는 센서가 없습니다. 따라서 90 도는 "좋은 추측"입니다. "20 명의 모든 사용자가 화면에서 20cm 떨어져 있어야합니다"라고 말하는 것과 같다고 가정합니다. 대부분의 사용자가 디스플레이에서 멀리 떨어져 있기 때문에 FOV를 줄이려고한다고 말하는가? 주변 환경을보기 위해 더 많이 이동해야하므로 게임이 더
Steven Lu

간단한 대답 : 재생하는 동안 충분히 기분이 좋아지고 점진적으로 더 넓은 FOV처럼 과도한 왜곡이 발생하지 않기 때문입니다. 모든 3D 편집기에서 카메라 각도를 쉽게 확인할 수 있으며 다른 값을 시도하고 직접 확인하십시오. 간단한 대답은 아닙니다 : 음모 음모입니다.
패트릭 휴즈

답변:


6

나는 90deg의 FoV를 갖는 것이 '인간의 눈을 통해 보는 것'을 모방하려고 할 때 자연스러운 느낌이라고 생각합니다. 화면을 사용하여 창을 1 인칭 시점이 아닌 가상 세계로 시뮬레이션하면 계산이 정확합니다. 머리에서 80cm 떨어진 20 인치 프레임을 통해 세계를보아야 할 이미지 ...


1
그러나 "창을 통해 가상 세계를 바라본다"는 것은 투시 투영에 관한 것입니까? 아, 그리고 당신은 또한 화면 표면에 "튀어 나와있는"것을 투사 할 수 있습니다.
dyp

4
1 인칭 시점 게임의 경우 FoV가 매우 제한되어 있으면 실생활에서 사용하는 것보다 훨씬 적게 볼 수 있기 때문에 게임 플레이 및 몰입 IMO에 자극을 줄 수 있습니다. 개인적으로, 나는 90도 이하의 것이 부족하다고 생각합니다. 콘솔 게임에서 흔히 볼 수있는 것처럼 수평 FoV가 65 ° 인 정사각형 방 구석에 서 있다고 상상해보십시오. 전체 방을 볼 수 없으므로 인식을 유지하기 위해 왼쪽과 오른쪽을 계속보아야합니다. 그것은 실생활에서 나에게 견과류를 운전할 것이다 :)

1
물론입니다. 이 수행 us.123rf.com/400wm/400/400/ronstik/ronstik1112/ronstik111200016/... 손가락을 당신의 앞 (거리 80cm)에 20 "화면을 시뮬레이션 할 수 있습니다. 이제 당신이 볼 수있는 모든 상상.으로의 melak47을 이 시뮬레이트 된 20 인치 화면 / 프레임을 머리에서 20cm 떨어진 곳으로 옮기면 실제 시야와 대략 일치해야합니다.
Dirk

3
실제로, 인위적으로 넓은 시야에 의해 유도 된 잘못된 관점은 완전히 부자연스럽고, 개인적으로 스트레스가 많고 성가신 왜곡을 종종 발견합니다. 하지만 여전히 무한 함축 전형적인 단일 모니터에 무엇을 "현실"관점에 관한 20 ° -30 ° 들여다 보는 구멍을 통해보기 모든 것을 시도하는 것이 바람직합니다. 터널 비전에 대해 이야기하십시오!
Ilmari Karonen

3

FOV의 효과는 세계를 얼마나 빠르게 움직이는 지에 달려 있습니다 (여전히 같은 속도입니다. 순전히 지각입니다). 가로 FOV가 너무 넓 으면 매우 빠르게 움직이는 것처럼 보이고 너무 좁 으면 매우 느리게 움직이는 것처럼 보입니다. 수평 90 도는 "스위트 스폿"인 것처럼 보이며 게임 개발자는 개별 게임에 대해 원하는 이동 속도를 조정할 수 있습니다.

또한 4 곱하기 90 도는 360 도인 원입니다. 앞 / 왼쪽 / 뒤 / 오른쪽 사분면에 잘 맞도록 수평 FOV를 설정하면 의미가있는 것 같습니다.

그리고 마지막으로 오래된 우선 순위와 관성이 있습니다. Quake 이전에 어떤 게임에서 플레이어 조정 가능 FOV를 제공했는지 확실하지 않지만 Quake는 수평으로 90도를 설정했습니다. 다른 게임이 거기에서 90도 정도 올라 오는 것을 상상하기 쉽습니다.

게임 (특히 현대 FPS)이 약간 낮은 값 (약 80 또는 약 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.