How FoV works with apect ratio.

Status
Not open for further replies.

NoQuarter

Golden Member
Jan 1, 2001
1,006
0
76
This is a continuation of this thread: http://forums.anandtech.com/showthread.php?t=2080050 cuz there was some stuff I wanted to respond to.. but I'll first explain my layman's knowledge of the methods for determining your field of view (FoV). If you disagree with how I think this works please keep it civil though.. the terminology makes this stuff hard to grasp and explain.

Your field of view in a 3d game is an angular measurement from the point of the camera. Most games in 4:3 have about a 70 degree horizontal FoV and 55 degree vertical FoV . The eye has something around a 150 degree horizontal FoV and a 120 degree vertical FoV and the 70/55 of games is usually just a bit more than how much of your vision your screen takes up at 2 feet away, providing a comfortable experience neither claustrophobic (too low of FoV) or naseuating (too high of FoV causes motion sickness for some). You'll find many console games have a slightly smaller field of view because sitting 6 ft away from your TV takes up less of your own field of view unless you have a big TV, so the game's field of view is reduced to keep people comfortable.

Though the field of view ends up at around 70/55 on a 4:3 screen, it's actually calculated based on your aspect ratio (horizontal resolution / vertical resolution) and either a preset horizontal or preset vertical FoV using one of these formulas: hFoV = 2 * atan (tan(vFoV / 2) * (width / height)) or vFoV = 2 * atan (tan(hFoV / 2) / (width / height)). You can approximate the value by dropping the trig, and width / height is just your aspect ratio (AR). So we can use the resolution to find the aspect ratio (640/480 = 1.333~, 1920/1080 = 1.777~, 1920/1200 = 1.6) and we can approximate that since a 4:3 640x480 screen is 1.333~ times wider than tall, our vertical fov of 55 has a 1.333~ times wider horizontal fov of 73, pretty close to the estimate.

But adjusting the FoV to the shape of your monitor gives very different results depending on if you used the vertical FoV or horizontal FoV as your known value. How you do it gives these behaviors:

Stretch: In this method you choose the vertical FoV and horizontal FoV and they remain locked at that value (55 and 70) and do no math. This means you see the exact same thing on a widescreen monitor as you do on a 4:3. Since the widescreen monitor is wider, the image gets stretched across the monitor. Alternatively the game could be locked with a 90 degree horizontal FoV for widescreen, which would have the opposite effect, the image would look fine on a widescreen monitor and squeezed on the narrower 4:3 monitor. Anamorphic also is locked hor/vert but uses black bars instead of stretching. You could use a table of FoV's based on the AR, but this would result in stretching again if you don't have an AR accounted for or you are playing in windowed mode and resize the window.
180px-Indigo-4x3.jpg
215px-Indigo-16x10.jpg


Pixel-based: This is more of theory than practice, but if it existed your vertical FoV and horizontal FoV would both be unlocked, meaning you would have to set your target FoV at 70 horizontal and 55 vertical for a specific resolution (likely 640x480 for standard def TV) and as you add vertical height you add vertical FoV, and horizontal width you add more horizontal FoV. The problem with this is you need a baseline for where you want the comfortable gaming experience to be. Since games still take into account old TVs the baseline would have to be 70/55 at 640x480 and increase from there. This ends up being far more than anyone would intend for you to see, and mostly be floors and walls - but worst part is the further you get from the center point of the camera with your FoV the more the fish-eye lens distorts the screen. You could use a table of different baselines to give more kicking off points, but this method seems a little too unpredictable unless you preset a lot of baselines, and not hardware agnostic enough to me.
This is what a game in 640x480 would look like in 2560x1600 if the FoV increased relative to resolution (forgot to turn off the HUD in 2nd shot), you can drag the tiny image and drop it in the middle of the big one and see that the 640x480 image still exists in the tiny center of the large res one:
mesmall2.jpg
mebig2.jpg


vert-: With vert- your horizontal FoV is preset and divided by your aspect ratio to find your vertical FoV. Since your horizontal FoV is static, you see the same amount left to right on 4:3 or widescreen. If you preset the horizontal FoV to 70 so your game experience is good on a 4:3 monitor, you would have a vertical FoV of (70 / 1.333~) 52. The bad thing is, if your horizontal is 'equal' then a widescreen is actually a shortscreen. Since you are using the horizontal FoV for your calculation (ie it's locked to 70), when you apply this to a widescreen monitor you would get a vertical FoV of (70 / 1.777~) 39. What has just happened is the top and bottom of the screen were chopped off, and looks ugly. If you preset the horizontal FoV to 90 to be good on widescreen, then a narrower (actually, taller) 4:3 screen would have a vertical FoV of (90 / 1.333~) 67. Not bad but no one really cares about the extra sky and floor from the increased vertical view or people would game in portrait mode.
180px-Darksector-4x3.jpg
215px-Darksector-16x10.jpg


hor+: With hor+ your horizontal FoV is unlocked and the vertical FoV remains locked at ~55 for the math. In this case, what you see from top to bottom remains unchanged at 4:3 to 16:9. On a 4:3 monitor the vertical FoV of 55 is multiplied by the AR for a horizontal FoV of (55 * 1.333~) 73, and applied to the widescreen AR of 16:9 we get a horizontal FoV of (55 * 1.777~) 97, effectively adding more image to the left and right sides (or subtracting from the sides if you move from a wider screen to a taller/narrower one). Since we add horizontally we get to call the widescreen wide instead of short.
180px-L4d-4x3.jpg
215px-L4d-16x10.jpg



You can use a table of presets to cover some of the deficiencies in any of the methods but it's not a forward looking approach and isn't hardware agnostic. Unreal Engine is a vert- engine locked to 70 horizontal FoV for 4:3 monitors. When widescreen came out they modified it with a horizontal FoV table lookup, but it's still a vert- engine. It has a locked horizontal FoV value of 70 at 4:3 and 80 at 16:10. This gives the appearance of a hor+ engine but they're manually covering up for widescreen. The interesting thing about Unreal Engine is that they provide a console command to change the locked horizontal FoV value which goes into the vert- calculation. So you can change the horizontal value to 140 for 48:9 aspect ratio (Eyefinity) which, run through the full formula (can't approximate at extreme AR's), gives 55 vert FoV and makes everything look nice. But really you are just manually tweaking a vert- game to act like hor+ when you do this by approaching the formula from reverse.

I closed the last thread for a good reason. Now I'm going to close this one for the same reason.

You guys can pick up the topic next month when you can (hopefully) stop acting like toddlers.

-ViRGE
 
Last edited by a moderator:
Status
Not open for further replies.