Tuesday, November 24, 2015

Why other forms of mouse acceleration are bad

As I said in the introduction to this blog, other acceleration options are notoriously bad.  I'm going to break down why, but I want to preface all of this with the statement that povohat's mouse accel driver has none of the listed issues if you are using it correctly.

Games with mouse acceleration forced on never provide a good experience since you always need to tweak the variables of mouse acceleration depending on your mouse's USB refresh rate (125hz feels vastly different to 1000hz with accel), your mouse's DPI, in game sensitivity, and so on.  Furthermore, a lot of games only check how far the mouse moved just before it draws a new frame.  So if you get into a low framerate area during a heavy battle, you might be moving your mouse at a static speed but find that suddenly it's turning twice as fast as normal!  That's unbearably terrible - your frame rate should never destroy your ability to predict where you will be aiming when you move your mouse.

So, either a game needs to check for mouse input between frames (Reflex, for example is implementing 1000hz input scanning regardless of game FPS to maintain consistency), or you need a driver to handle the acceleration calculations.

But as most know, plenty of mouse drivers still do very poorly with accel.  The most well known is Windows' "Enhance Pointer Precision."  What does it actually do?  It's what we call "threshold based accel."  Basically, if you are moving your mouse slow enough, it acts like a flat mouse sensitivity with no acceleration.  Once you pass a certain speed of moving your mouse, your sensitivity suddenly doubles.  The curve of mouse sensitivity vs mouse speed would look something like this (vertical axis is effective mouse sensitivity where a flat line means no accel):

In theory, it isn't a bad idea - If you're tracking someone at a long range, you can use low sensitivity, and you can get a nice flick in close range to reorient yourself and still stay in the fight.  The problem occurs when you are trying to fight someone at a medium range.  You might be tracking your opponent and keeping up just fine, then suddenly he gets close enough that your tracking sensitivity doubled.  Ew.  That just throws people off, and there's a good reason every FPS community out there will tell you to turn it off.

edit: Per Mark Cranness in the comments of this post, this form of acceleration hasn't been used in Windows for a number of years.  The modern "enhance pointer precision" curve apparently looks like this.  It's definitely better than a lot of bad accel options out there, but configuring it is quite difficult compared to povohat's driver! :)

Next up: Logitech mouse acceleration.  Full disclosure, I haven't used Logitech's driver mouse accel since probably 2001, but this is what the curve looked like back then:

It starts out low and then begins raising as a parabola.  y=x^2 style accel.  The problem with this mouse acceleration is that as you move the mouse faster, it becomes completely uncontrollable.  It's also rather difficult (but not impossible) to get muscle memory working for flicks since the difference in sensitivity becomes very large.  Logitech's accel options of "low," "medium," and "high," controlled how quickly the accel would raise, but it was always uselessly fast when you flicked.

So, what did Quake 3's mouse accel option look like?  Linear, like this:

So now, what we've got is a mouse acceleration that grants you the ability to track at low speeds, a gradual/predictable increase in sensitivity, and a sane sensitivity at the high end.  Quake 3's console variable let you specify exactly how much you wanted (the slope of the line), so you could fit it to your preferences.  If you changed to a different mouse with a different DPI, you can tweak the curve exactly as you wanted to.  This is why pro players in Quake 3 started using mouse acceleration - you get the benefits of low sensitivity (great long range tracking) and high sensitivity (you won't lose your target in close range).

Finally, how I'd like to show how I'm using mouse acceleration:

So, I've got linear mouse acceleration going on, which has some great benefits.  What is new is that I have a "sensitivity cap" where suddenly acceleration stops happening.  The most amazing part about that sensitivity cap is that my muscle memory for flicks will work perfectly.  I know how much mousepad it takes to do a 180, and I can perform it on command.  Even better - if I change to playing a game where there are more long range fights, I can drop my base sensitivity but have it cap out at the same top level, and I can still do my 180 flicks by muscle memory!


  1. Threshold based accel was used in Windows 2000 and prior.
    'Enhance pointer precision' based accel was introduced in XP and uses a smoothly varying curve based on 4 points (5 if you count the first zero point).
    The sensitivity curve for Windows 8+10 looks like this:
    Image @ google drive
    (Note: mouse movement scale from 0 to 75 is perhaps not the best scale, but matches your other images.)

    1. Thank you for the correction. This definitely shows how old I am, right? :P

    2. How would i emulate the XP Enhanced Pointer precision? Please contact me Mark/Kovaak or anyone who will know, i am happy to comission somebody to figure this out for me, hell i've lost enough hours trying

    3. easy bois. you need to set an offset for the movement in the beginning and sens cap for the high-end of your "curve". you need to adjust the breaking point to your needs. if you want it to kick in later you need to raise the offset in the beginning.

    4. This comment has been removed by the author.

  2. I would like to copy the mouse acceleration from microsoft 8- 10 in to the program, anyone have the numbers?

    1. I strongly suspect povohat's mouse driver can't directly understand the Windows curve, because it uses a very different method of calculating accel : thresholds and exponents and such, rather than a curve lookup.

      It might be possible to approximate the Windows curve, or it might be very difficult or impossible, I don't know which...

    2. This comment has been removed by the author.

    3. profile with approximated the Windows curve. Feels like same

      Create NAMEFILE.profile and paste
      In programm open NAMEFILE.profile
      I hope it help u)

    4. is this for real? you da man, i wanted the windows acceleration thing but without the strange cap. now I can have both! thank you

  3. how can i decrease the vertical sensitivity of the mouse?

    1. Once you have the driver installed, use the gui and lower the "post-scale y" value. X is for horizontal, Y is for vertical. So if your Y value is half your X, that makes your up and down sensitivity half of your side to side.

    2. Thank you. when i was using windows 10, the vertical sensitivity adjusted automatically and I felt a good difference in the games. (it has improved recoil) But on windows 8 I feel that the vertical is too high. Anyway, Thank you again.
      (I don't speak english, so... sorry for my bad english).

  4. Kovaak if you ever get to see this then i would be forever grateful for a response from you.

    1000 hertz 3200 DPI 6/11 Win sens. What do i need to create a perfect curve similar to the one you use for these specs?

    hey ive simply lost my mind trying to find it, im probably not understanding something here.

    1. Set power above 2. Adjust acceleration from 0.01.

    2. It was very tricky for me at first to get this going, but once I did, its very easy to understand. Set your mouse to something like 1000hz 2400dpi. Then windows to the 6/11 notch for mouse speed and pointer accel off.

      Then set up your
      sens: 1
      accelleration 100
      sense cap 2
      offset: 15
      power 2
      pre X Y 1
      post X Y .5

      and make sure scale sense with post cap is on.

      now.. your acceleration is 100 or something SUPER high, so what you want to do is go into Kovaks aim trainer and go slow and do a Flick. alt tab to the GUI and increase your OFFSET. go back and do a flick. keep doing this until you find what your offset is where you can't do the flick each time successfully. mine was around 50. but its different for each mouse.

      once you have 50, turn off your acceleration back to 1 and your post scale x y back t 1 , and get it so its
      sens 1/ accel / 1 / sense cap 2 / offset 0 /power 2 post x y =1

      now its time to get your low sens, so you set your post scale to .25 and thats is where you go lower or higher. Setting your post scale lower and sens in game is lower, post scale higher, sens in game is higher. get what feels good for sens there and you want your acceleration (mine is 0.029) to make the BAR graph stop at 50. since you know 50 is where you had your max flick. your graph should go from bottom up like a ramp and flatten out at 50. Then you adjust your offset from 0 to 20 ish and thats where the acceleration kicks in (after your offset). so it would look like a ___/--- line. sorry if this is confusing but maybe reading it and rewatching the Kovak youtube videos will help you get it.

    3. Thank you. This method working very well for me, worth the time to set up

  5. Nice post !! looking forward for another great post of your's Gaming Mouse online

  6. It doesn't seem to work for less than 400 dpi devices

  7. 1000hz 800dpi what do I set it 2

  8. When your website or blog goes live for the first time, it is exciting. That is until you realize no one but you and your. Best Gaming Motherboard 2019:Buying Guide, Lists, Reviews

  9. I am very much pleased with the contents you have mentioned. I wanted to thank you for this great article. The cheapest Logitech G903

  10. I really loved reading your blog. It was very well authored and easy to understand. Unlike other blogs I have read which are really not that good.Thanks alot! Logitech G903 LIGHTSPEED Gaming Mouse Review

  11. I use 1200DPI with 500hz what should I set my curve to be

  12. I want that logitech curve, but the program isnt working for me. My mouse feels exactly the same regardless of the values I put in.

  13. hi i want to put windows 7 acceleratoin in custom curv or raw accel anyone knows how w7 curve is ? or what is its epp