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 ...
@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.
@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.