In many 3D games, players have had the option to change their Field Of View (FOV) that relates to how wide of an angle they see the 3D world projected onto their 2D screen. While many players are aware of the fact that some games measure different things (often horizontally, but sometimes it’s vertically), there is added confusion due to how games scale/adjust the FOV as screen aspect ratios change. FILM notation’s goal is to have a universal way to describe all existing and possible FOV measurements and scalings, and FILM stands for the ways in which we can scale and measure FOV:
Fill the base image to the screen, or
Inscribe by drawing more of the game around the base image, or
Lock one dimension and allow the other to change. One of these three applies, then we...
Measure FOV, horizontally, vertically, or diagonally.
The simplest cases to talk about in this notation are when a game always measures in a single dimension and doesn’t care about the screen’s aspect ratio. These are hML, vML, and dML (horizontal, vertical, and diagonal). It is impossible for “Inscribe” or “Fill” to apply to these cases, because they are agnostic of the aspect ratio.
If a game measures FOV horizontally no matter the aspect ratio, we can say it is hML (Horizontally Measured, Locked). This means that if we change between 4:3 and 16:9 (or any other aspect ratio) without changing the FOV number, we will still see the same amount horizontally, but the amount we see vertically will change. (narrower aspect ratios see more vertically, wider aspect ratios see less vertically)
KovaaK’s FPS Aim Trainer at 960x720 (4:3), 90 hML (“Clamped Horizontal”)
KovaaK’s FPS Aim Trainer at 1280x720 (16:9), 90 hML (“Clamped Horizontal”)
If a game measures FOV vertically, it’s vML (Vertically Measured, Locked). An example of this is when characters scope/aim down sights in Overwatch (Overwatch measures hipfire FOV differently, and we’ll get to that later). Note in the following example that regardless of aspect ratio, the screen ends at the top and bottom in the same position, and aspect ratio only affects how far the screen extends left/right.
Overwatch’s Ana, scoped at 1280x800 (16:10), 30 vML
Overwatch’s Ana, scoped at 1280x720 (16:9), 30 vML
Overwatch’s Ana, scoped at 1280x536 (21:9), 30 vML
In the original Quake 1 engine, almost all iterations of id Tech (all Quakes excluding Quake Champions), and the Source engine, they decided to do it differently. They decided that they liked how 90 horizontal FOV looked on 4:3 screen resolutions like 640x480 and 800x600, and they felt that when the screen expanded to wider aspect ratios that it should keep the vertical FOV from the 4:3 aspect ratio and let the horizontal expand outward.
Under these engines, an example of “90 FOV” on 4:3 really does mean 90° of vision horizontally, but “90 FOV” on 16:9 is really 106.26° of vision horizontally. In all aspect ratios, “90 FOV” here is always 73.74 vertical FOV, because the vertical is what the engine locks based on the FOV setting.
Under FILM notation, we call this 4ML3 (4 Measured, Locked to 3). Horizontally measured, but vertically locked.
Quake 1 at 960x720 (4:3), “90” FOV
Quake 1 at 1280x760 (16:9), “90” FOV
Another example of this style of scaling but at a different base resolution is Fortnite (beginning in the April 2019 patch) and Quake Champions which both use 16ML9 (16 Measured, Locked to 9). So if you are on a 16:9 resolution, the FOV number you choose in the QC's options menu is accurate in terms of horizontal FOV measurement, but it scales down horizontally for narrower aspect ratios and scales up horizontally for wider aspect ratios. Fortnite currently is locked to 80 FOV, 16ML9.
Overwatch, when hipfiring, scales FOV differently. Fundamentally it’s measuring horizontally and under a 16:9 aspect ratio, but when you drop to a narrower aspect ratio (e.g.: 4:3), it clips the sides of the image off. And when you go to a wider aspect ratio (e.g.: 21:9), it clips the top and bottom of the image off. We call this a Fill operation, and it’s what your desktop does when you apply a new wallpaper that doesn’t match the resolution of your screen. You can think of this as expanding the image while maintaining the original aspect ratio of the image until all corners of the screen have something showing.
Overwatch is said to use 16MF9 (16 Measured, Fill 9), which means players must use the 16:9 aspect ratio to see the most of the screen. Any other aspect ratio will cut off either the sides or top/bottom.
Overwatch’s Ana, hipfire at 1280x800 (16:10), 103 16MF9 (loses left/right)
Overwatch’s Ana, hipfire at 1280x720 (16:9), 103 16MF9 (sees the most)
Overwatch’s Ana, hipfire at 1280x536 (21:9), 103 16MF9 (loses top/bottom)
Before the April 2019 patch, Fortnite used to measure horizontally in the 16:9 aspect ratio, but it did the exact opposite of Overwatch. When players used a narrower aspect ratio than 16:9, it maintained the horizontally visible FOV and lets the vertical FOV get bigger. When players used a wider aspect ratio than 16:9, it maintained the vertically visible FOV and let the horizontal FOV get bigger. The game Inscribed the 16:9 image on the screen, then drew more stuff outside of the original image.
We call this 16MI9 (16 Measured, Inscribe 9)
Fortnite, at 1280x800 (16:10), 80 16MI9 (gains up/down)
Fortnite, at 1280x720 (16:9), 80 16MI9 (sees the least)
Fortnite, at 1280x536 (21:9), 80 16MI9 (gains left/right)
Valorant's FOV scaling threw a bit of a wrench into this format - instead of doing any of the above, the team at Riot decided that they wanted the game screen to always see the same amount of 3D world regardless of changes in aspect ratio. The base image is 16:9, and any changes to a different aspect ratio will either stretch or squish the image while maintaining the same horizontal and vertical FOV.
(This makes me want to officially rename this notation to "FILMS" instead of "FILM" wherein the S would stand for Stretch/Squish...)
Quick math examples of how to determine what the actual FOV is for this stuff.
110 4ML3 on a 16:9 resolution:
Since the 110 is the horizontal FOV on a 4:3 resolution, we need to find the vertical FOV:
2 * arctan(tan(110 degrees / 2) * 600 / 800) in degrees= 93.9329235°
Then we take the vertical FOV and apply it to a 16:9 resolution to find the actual horizontal FOV:
2 * arctan(tan(93.9329235 degrees / 2) * 1920 / 1080) in degrees = 124.587073°
Therefore, 110 4ML3 on a 16:9 resolution = 124.587073° horizontal.
See also: Focal Length Sensitivity Scaling.