3 years ago
Fix the mouse input
I just went to play BFV for the first time in monts and the difference is night and day Is it really impossible to port the code use for BFV? I have never seen a AAA title where the mouse input is ...
I figured out how to make mouse aim feel steady and smooth in Battlefield 1. I recommend using a mouse that has around 20,000dpi and can poll steady at 1,000Hz or more.
*Disclaimer* I'm not saying people's mice are the problem. I'm saying the game's controller input loop is the problem and here's how to brute force past it.
First a quick summery of what I'm doing. I'm running the mouse at an extremely high dpi in order to increase the optical sensor's polling rate for small mouse movements. If you've ever used a polling rate checker like MouseMovementRecorder.exe which is included in MarkC Windows 10 + 8.1 + 8 + 7 Mouse Acceleration Fix. You'll notice the optical sensor's polling rate is very low for slow mouse movements at low DPI values. Increasing DPI also increases the polling rate for slow mouse movements.
In other words, increasing the DPI also increase the polling rate so we can brute force past Battlefield's broken controller input loop.
Here are my settings.
Make sure to turn down Windows OS mouse sensitivity to notch 2. This is why I recommend a 20,000dpi mouse. Otherwise the mouse pointer will move really slow.
That's pretty much it. Set your in-game mouse sensitivity to 0 (always zero for infantry) and make sure to turn off raw mouse input. Raw mouse input doesn't work with such high dpi settings. We need Windows OS to reduce the sensitivity. I also discovered reducing Windows OS mouse sensitivity eliminates mouse jitter at 20,000dpi which I found surprising.
It's also important to test your mouse with MouseTester to make sure your mouse polls smoothly. For example, I have a Razer Viper 8K mouse that can poll up to 8,000Hz but it only polls steady at 2,000Hz and lower.
Razer Viper 8K - 8,000Hz
Razer Viper 8K - 4,000Hz
Razer Viper 8K - 2,000Hz
As you can see, my 8,000Hz mouse can really only poll steady at 2,000Hz. The blue dots have to be right on top of the green line, otherwise the mouse isn't polling steady which causes mouse stutter.
@OskooI_007 I don't think you've played BF 2042 long enough to know what's wrong. Since I can't find you in BF 2042 stats, I assume you've never played it.
It's not just about reaction time but that the mouse doesn't do what it's supposed to do at certain speeds 1 to 1.
And your placebo fixes won't help anyone, just forcing higher DPI more polling rate even though you have a motion sync mouse is a total waste of time in my eyes.
And even if it brings you less ms you are still bound to the game engine if it has 20ms latency and you double your mouse speed from 1000hz to 2000hz you still only save 0.5ms and are still at 19.5ms so it just doesn't work.
@Ne0tax wrote:@OskooI_007I don't think you've played BF 2042 long enough to know what's wrong. Since I can't find you in BF 2042 stats, I assume you've never played it.
It's not just about reaction time but that the mouse doesn't do what it's supposed to do at certain speeds 1 to 1.
And your placebo fixes won't help anyone, just forcing higher DPI more polling rate even though you have a motion sync mouse is a total waste of time in my eyes.
And even if it brings you less ms you are still bound to the game engine if it has 20ms latency and you double your mouse speed from 1000hz to 2000hz you still only save 0.5ms and are still at 19.5ms so it just doesn't work.
What happen with the input now?
I always thought Raw mouse input was jacked up? If I turn it off, I lose X/Y movement. Explain this to my like I am 5, how do I enable X/Y movement on mouse with Raw input "off"?
@Ne0tax wrote:@OskooI_007I don't think you've played BF 2042 long enough to know what's wrong. Since I can't find you in BF 2042 stats, I assume you've never played it.
It's not just about reaction time but that the mouse doesn't do what it's supposed to do at certain speeds 1 to 1.
And your placebo fixes won't help anyone, just forcing higher DPI more polling rate even though you have a motion sync mouse is a total waste of time in my eyes.
And even if it brings you less ms you are still bound to the game engine if it has 20ms latency and you double your mouse speed from 1000hz to 2000hz you still only save 0.5ms and are still at 19.5ms so it just doesn't work.
I rented 2042 on EA Play for a month when it first came out, but haven't played it since. The issue I'm experiencing with Battlefield's mouse input loop is it drops/skips mouse polls which is really noticable at lower Hz.
At a low dpi setting the mouse will only poll at ~50Hz for slow mouse movements. At 20,000dpi the mouse is polling 1,000+ Hz without even moving it.
Dropping 1 out of 50 mouse polls is a lot more noticable than 1 out of 1,000. The higher polling also prevents issues where tiny micro aim adjustments fail to register even though you're moving the mouse.
What issues are you experiencing with the mouse in Battlefield?
@Adamonic wrote:I always thought Raw mouse input was jacked up? If I turn it off, I lose X/Y movement. Explain this to my like I am 5, how do I enable X/Y movement on mouse with Raw input "off"?
Maybe there's an overlay like discord that's hijacking the mouse cursor when raw input is turned off? I'm not sure what's going on. My mouse works with raw input turned off.
@Adamonic wrote:
@ATFGunrYes in game. What is the line in the prefs file that needs to be edited?
'GstInput.MouseRawInput 1' in PROFSAVE_profile
Sorry @Adamonic, I didn't know this setting is bugged and not working in 2042.
*Edit* DICE has fixed this bug and raw input can be turned off without breaking the mouse now.
@OskooI_007Thx, if I turn it off I lose mouse xy.
Any other thoughts? Discord not open. Nothing else running beside Origin.
Raw Input Off = loss of Mouse X/Y whether I turn it off in game or out of the game.
@OskooI_007 Battlenonsense has tested this and found that at DPI settings below 1600 the input lag increases.
His video is actually very interesting: https://www.youtube.com/watch?v=6AoRfv9W110
But using 20000DPI is a pain with a lot of games, where sensitivity settings cannot cope with the high DPI.
BF2042s problem is that the engine doesn't handle input correctly (apparently from all input-devices) and has nothing to do with the mouse, it is the game that has an issue.
@cso7777 wrote:@OskooI_007Battlenonsense has tested this and found that at DPI settings below 1600 the input lag increases.
His video is actually very interesting: https://www.youtube.com/watch?v=6AoRfv9W110
But using 20000DPI is a pain with a lot of games, where sensitivity settings cannot cope with the high DPI.BF2042s problem is that the engine doesn't handle input correctly (apparently from all input-devices) and has nothing to do with the mouse, it is the game that has an issue.
True. You're right, the engine doesn't handle input correctly but nobody seems to know what's causing it. I believe I've narrowed the problem down to the engine dropping mouse polls.
Increasing polling rate with high dpi isn't about lowering input lag. High dpi is about increasing the polling rate for small mouse movements so when the engine does drop polls it's not as noticable. Which translates into steady aim with no jitter, responsive micro aim corrections, and smooth mouse movement.
High mouse dpi and polling doesn't fix the game engine dropping polls, it works around the issue by minimizing the affect dropped polls have on mouse movement.
Unfortunately raw input is bugged in 2042 and turning it off breaks the mouse.
@OskooI_007 wrote:
Increasing polling rate with high dpi isn't about lowering input lag. High dpi is about increasing the polling rate for small mouse movements so when the engine does drop polls it's not as noticable. Which translates into steady aim with no jitter, responsive micro aim corrections, and smooth mouse movement.
High mouse dpi and polling doesn't fix the game engine dropping polls, it works around the issue by minimizing the affect dropped polls have on mouse movement.
This does not make sense unfortunately due to the way mouse inputs are handled in Windows. Given that no mouse (unless you are still running one connected via PS/2 😉 ) can really 'send' anything to the PC they always require polling. You can configure how fast Windows (the driver) will poll the mouse and most users use 1000Hz I guess (this is not setting for the mouse, even if the mouse software presents it that way) but actually a setting how often Windows asks for changes in mouse state. In theory, you could even poll any mouse faster, say with 4000Hz, but for mice which internally sample slower, this would just not give you new values 3 out of 4 times and that's why the software limits the range of possible polling rates you can select.
This is the first step -- how often Windows is aware of changes in mouse state (position + buttons) and this is always required, even with 'raw mouse input' enabled. The only difference between raw mouse input on and off is that for 'ON' the mouse movements are taken 'as read from the mouse' and with the setting to 'ON', also the sensitivity adjustments and mouse acceleration features of Windows will be taken into account. For that reason you should always use raw mouse input as especially mouse acceleration will screw with your aim.
The second question is about the polling rate of the GAME (here it is said that with BF2042 we now have 250Hz). So in theory, if the game polls at 250Hz it will get the accumulated result of 4 polling results of Windows. To be precise and as they are not synced, rarely this will be of 3 or 5 polls because of beat.
Let's assume your theory is correct and BF2042 would 'miss' inputs of one of its polls you would miss the accumulated distance traveled during that time. For say 20000 DPI this would mean more 'increments' would be missed but with in game sens this is in the end reflects the same in game movements delta that is neglected. If there is any movement at all in these 4ms in question, this will either be registered or not.
The ONLY way your 'hack' would/could be effective would be if the distance traveled within those 4 ms would be so small (meaning mouse movement so slow) that it would not register at least one increment on lower DPI settings but result in one or more for the 20000 DPI configuration. Otherwise it would just mean smaller or bigger numeric values to be neglected (that are scaled by in game sens to the same value anyway).
@DuaneDibbleyI never stated I was overclocking the mouse past it's maximum polling rate. What I'm doing is increasing the polling rate for slow mouse movement.
I explained how mice poll slower when mouse movement is slow. Like 50Hz polling slow. By increasing dpi that slow mouse movement now polls at 1,000Hz. Mice can poll slower than their bInterval value by NAKing polling requests.
I explained how the mouse gets extremely stuttery in BF1 when mouse polling is set to 125Hz and the framerate capped to 125fps. Increasing mouse polling makes this stutter less noticable. The stutter is being caused by dropped mouse polls.
I have a high level understanding of USB protocol. Including USB descriptors such as bInterval. I also understand the Windows OS driver polls the mouse and the mouse responds to those polls.
The game isn't directly polling the mouse. The OS mouse driver is. That's why mice can be polled at 1,000Hz by the driver, with the game's input loop sampling the driver at 250Hz. The 250Hz engine samping is where mouse polls are being dropped. Not at the OS mouse driver level.
All I can say is I've field tested 20,000dpi with high polling rates for small mouse movements in Battlefield 1 and I've noticed a huge difference in how the mouse behaves. Smoother, more steady, and no jitter at high dpi.