Advertisement
tavarner17

FOV scale draft

Feb 28th, 2014
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.73 KB | None | 0 0
  1. Some consequences of UE3's Mousing Structure
  2.  
  3. This is a hopefully brief explanation of why Mouse Scaling is necessary to prevent mousing errors inside zoom. I'll start basic with the relationship between FOV and Inches per 360, and move into how to scale this in the game in such a way that UE3 doesn't fuck it up. Im
  4.  
  5. #FOV, Sensititivity, and Zoom
  6.  
  7. This first paragraph will be extremely basic for clarity's sake, so bear with me and don't be offended.
  8.  
  9. Most people would know that your FOV, or Field of View, is the window through which your screen displays to world inside the game. It's measured as an angle in degrees, and most people run somewhere between 90 and 120 FOV in T:A. Your mouse sensitivity dictates how quickly your character will turn in the game. It can get pretty convoluted, but the end result can always be measured in Inches/Centimeters per 360. That means "how much horizontal mouse movement will it take to turn my character all the way around." Your window into the game world captures every angle from your postion.
  10.  
  11. Zoom is simply a change in your FOV; it gets smaller. Everything looks bigger because a smaller wedge is broadcasted onto the same screensize. See an example [here.](http://i.imgur.com/BNaKrYM.jpg)
  12.  
  13. These characteristics all relate because of how our FOV window shifts when we move the mouse. Sensitivities "feel" faster when it requires less mouse movement to encounter a whole new landscape displayed through our FOV window. This means that it will take less mouse movement to see an entirely unfamiliar landscape on your screen. Note that this is strictly dependent on FOV.
  14.  
  15. I feel it's easiest to explain this through an example. Lets make an assumption that your sensitivity measure at 36 centimeters per 360 degree turn, and you have a 90 FOV. Clearly if you move your mouse 9 cm your body will turn 90 degrees. With a 90 degree FOV, if you turn 90 degrees you will encounter a whole landscape, regardless of sensitivity. So at our 36 cm per 360 sensitivity and 90 FOV, you will encounter a whole new landscape. Now lets change our FOV to 45. This means if we turn our body 45 degrees, the monitor displays a completely new picture, with no landmarks from our previous view. Now for the kicker: **With the same sensitivity, it wil only take 4.5 centimeters of movement to completely shift our window.**
  16.  
  17. Games make up for this by scaling the sensitivity based on the FOV currently running. They usually do this with the goal such that you will encounter a new landscape at the same distance you move your mouse. So if you zoom in from 90 FOV to 45 FOV, your sensitivity will be cut in half and your "screen speed," or amount of new landscape per distance traveled on your mouse, will remain the same.
  18.  
  19. #Where Epic fucked up, and Hirez neglected to fix it.
  20.  
  21. In Shreq's analysis [here,](http://www.reddit.com/r/Tribes/comments/1w8ahr/ta_mousing_an_attempt_at_busting_the_below_5_sens/) we learned about how T:A stores mousing input using Rotator structs. The main drawback of the Rotator structs is that they only store integer values and always round decimals down. Using Rotators was fuckup number one, on Epic's part.
  22.  
  23. Fuckups number two and three deal specifically with the scaling function in UE3 games. It's know in the input ini as bEnableFOVScaling, and can be set to True or False. It activates a function to scale your sensitivity based on your FOV. The function looks like this:
  24.  
  25. Real sensitivity = Sensitivity * FOV * 0.01111
  26.  
  27. Fuckup number two thing is obvious; they throw in decimals which get fucked by the Rotator. Fuckup number three is less obvious; the multiplier 0.01111 doesn't actually scale the sensitivity properly.
  28.  
  29. Hirez fucked up because they didn't realize this was a problem. There are easy fixes to these problems both as a developer and as a player.
  30.  
  31. #Scaling the FOV per Sens
  32.  
  33. The easiest way to fix these problems is to turn off the bEnableFOVScaling function callout within the TribesInput.ini, and then to write scripts that adjust your sensitivity per your predictable FOV.
  34.  
  35. The math part is easy. Your sensitivity should always adjust exactly proportionat to your FOV. So if you zoom in on your scope and your FOV is now one fifth what it was, your sensitivity should also be one fifth what it was, in order to preserve the distance required to encounter a completely new landscape.
  36.  
  37. Before we set up the scale, there is some relevant data.
  38.  
  39. * Full zoom on Sniper Rifles is 20 FOV
  40.  
  41. * Half zoom on Sniper Rifles is 40 FOV
  42.  
  43. * Recall that due to rotators rounding down, the absolute lowest sensitivity the game can handle is 1.
  44.  
  45. I'll start by saying that there are MANY correct ways to scale your sensitivity, and even more wrong ways. I'm going to start with as low ingame sensitivity as possible.
  46.  
  47. Sens=1 when FOV=20
  48.  
  49. now lets take it a step further and double it.
  50.  
  51. Sens=2 when FOV=40
  52.  
  53. You see the pattern now, lets see where this progression goes.
  54.  
  55. Sens=3 when FOV=60
  56.  
  57. Sens=4 when FOV=80
  58.  
  59. Sens=5 when FOV=100
  60.  
  61. Sens=6 when FOV=120
  62.  
  63. Under this pattern you can see our sensitivity scales properly per FOV.
  64.  
  65. Another correct scaling pattern would be this:
  66.  
  67. Sens=2 when FOV=20
  68.  
  69. Sens=3 when FOV=30
  70.  
  71. Sens=4 when FOV=40
  72.  
  73. Sens=5 when FOV=50
  74.  
  75. Sens=6 when FOV=60
  76.  
  77. Sens=7 when FOV=70
  78.  
  79. Sens=8 when FOV=80
  80.  
  81. Sens=9 when FOV=90
  82.  
  83. Sens=10 when FOV=100
  84.  
  85. Sens=11 when FOV=110
  86.  
  87. Sens=12 when FOV=120
  88.  
  89. This also scales the sens correctly, but with two consequences: a) Your sens is twice your sens in the previous scale, and b) you have more FOV options available.
  90.  
  91. Other scales include:
  92.  
  93. Sens=3 when FOV=20
  94.  
  95. Sens=4 when FOV=26.667
  96.  
  97. Sens=5 when FOV=33.333
  98.  
  99. Sens=6 when FOV=40
  100.  
  101. and
  102.  
  103. Sens=20 when FOV=20
  104.  
  105. Sens=30 when FOV=30
  106.  
  107. Sens=100 when FOV=100
  108.  
  109. You may be able to see a sort of balance as a player: lower sens scales mean you can run a higher DPI, but higher sens scales mean you can run more precise FOV options.
  110.  
  111. Remember that in every level of zoom, your FOV is a multiple of 20, so the ALL of these scales are viable.
  112.  
  113. #Scripting and implementing the zoom scale
  114.  
  115. To implement the zoom scale, you need to be able to always know what FOV will be running in game and compensate using your chosen scale. Again there are many options to do this, but this is what I choose to run.
  116.  
  117. FOVSetting=100
  118. MouseSensitivity=5
  119. Bindings=(Name="MouseScrollUp", Command="NextWeapon",bIgnoreShift=True)
  120. Bindings=(Name="MouseScrollDown", Command="NextWeapon",bIgnoreShift=True)
  121. Bindings=(Name="MouseScrollUp", Command="MagnifyZoom | SetSensitivity 1",Shift=True)
  122. Bindings=(Name="MouseScrollDown", Command="DemagnifyZoom | SetSensitivity 2",Shift=True)
  123. Bindings=(Name="LeftShift", Command="PressedZoom | MagnifyZoom | OnRelease ReleasedZoom | SetSensitivity 1 | OnRelease SetSensitivity 5")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement