Hey guys, HalfwayDead here with a follow up to my input lag video.
I have a completely new setup and tested all the requests that were made last videos excluding
controllers, but more about that later.
After I released my previous video where I measured input lag, I had a couple of comments
from people doing their own testing which is always awesome to see but there was one
that clearly stood out.
The user flippy199 had an oscilloscope to which he connected a controller and a photodiode
which was pointed at the boost exhaust of the car.
This is a very nice setup that works in any scenario, although it will obviously only
test the lag of boosting.
Of course, an oscilloscope can be many times more accurate than a 1000FPS camera and he
suggested that I might want to look into getting one.
So I considered it for a bit but 400€ just for a good oscilloscope did seem like a bit
much.
Of course, there were cheaper alternatives but it wasn't quite clear whether they would
be able to do things like automated measurements.
So I got the idea of looking into Arduinos which are basically small computers with analogue
and digital measurement pins.
They are fully programmable which in return also means that as long as the readings were
precise and fast enough, I would be able to automate the process.
After buying a starter kit and getting to know the basics of how the system works I
decided to buy an Arduino Due, a set of photodiodes and some more breadboards.
The basic idea is that the Arduino sends a mouse click to the PC, although this can also
be done with an external device, and it measures the delay between the click and the photodiodes
changing their resistance.
Since I'm using a lot of them, spanning the entire height of the screen, I can measure
the first reaction anywhere on the screen.
I can just click 1 button, go afk and come back later when I have 5000 samples.
Depending on the specific scenario, it might take quite a while though.
Enough about that, you can contact me if you want more details on how to replicate that
testing.
What data did I collect?
Of course, I didn't just want to redo the entire last video since those results aren't
wrong now that I have a better method but I did have to get at least some reference
so I repeated my Razer Naga tests at 1000FPS in-game and found a 1.2ms higher value than
what I got with the camera.
This is most likely just down to having the photodiodes wait for a bigger response on
the monitor than what I used with the camera.
Also, despite having 11 photodiodes, there is still some space in between them which
can increase the delay by up to 0.6 ms.
Then I went on to using the Arduino to click which reduced the input lag by a whole 4.4
ms, proving that the Naga is far from optimal despite both devices being 1000Hz.
From then on I went down to 240FPS, simply because even on the blank map it is quite
tough to maintain stable 1000.
With the increased amount of samples, the increase in variance at 240FPS isn't important
anymore.
Anyway, the difference in average input lag compared to 1000FPS was once again 5 ms.
At that point, I decided to go through all the requests and open questions from the previous
video and I found a bunch of things that made no impact, which is mostly great.
I tested whether having my 2nd monitor connected makes a difference, and it didn't.
The monitor is even 4k, in my case.
I activated the Discord and Geforce Experience overlay and they made no difference.
Even doing background recordings as well as active recordings with Shadowplay, made no
difference at all.
I've heard that there are some cases where recording can reduce your framerate which
will also negatively impact input lag, but if that's not the case for you then you can
record without worries.
I retested the config setting OneFrameThreadLag=false because I had multiple reports of people claiming
it has an impact for them.
It certainly did not do anything on my computer and it sounds highly unlikely that it would
still do on others.
Either way, I'm at the point now where I would advise against it in any situation because
any theoretical possible gain in input lag will hurt the framerate stability.
And I have tested an external tool called d3d9 Antilag which essentially allows you
to do the same that the aforementioned setting used to do.
However, it only works if you allow Windows full-screen optimizations and here is where
I found the first interesting result.
When this checkbox was disabled, I got 2ms more input lag with seemingly no benefit.
2 ms is not much, so if you notice that you get more stable framerates with full-screen
optimizations on then use them but otherwise, I don't see a reason why you wouldn't want
to disable them.
2 more things that had absolutely no impact were using Teamspeak and the launch option
-AllowBackgroundAudio.
1 particularly interesting request, was comparing graphics settings.
Of course, when you're playing with VSync off the graphics card will do a page-flip
as soon as the frame is done rendering, as I explained in Episode 9.
That means, when the graphics card needs more time to render the image at higher settings,
it's going to increase input lag even with a framerate lock.
On my custom map, with my GTX 970, the difference between the maximum and minimum settings was
around 1.3ms.
On a real map, this is likely going to be bigger.
What is really interesting though, is which settings made the biggest difference.
Because there are so many of them I didn't log these tests but I double checked any difference
I found.
0.5 ms came from the Render Quality setting which basically changes the resolution.
That is to be expected, especially on an empty map but I also found bloom to add 0.5ms which
seems rather odd because you wouldn't expect that to require a lot of performance.
Either way, a difference that small seems rather irrelevant if only input lag is affected
and not the performance.
The rest of the difference was split across the other settings.
Something I missed out on in the previous video regarding VSync is the ability to reduce
the input lag that it causes by capping the framerate 1 FPS below the monitors refresh
rate.
If you want to know the technical reasons for why this works then I'll leave a link
to an explanation in the video description.
With this method I found the input lag to be equal to FastSync at the same framerate.
I also found out that there is an AMD equivalent to FastSync called EnhancedSync.
This means there are plenty of low lag VSync solutions on any system if you can't stand
tearing.
Last but certainly not least, I need to talk about car input lag.
When I first tested it with my fancy new Arduino setup, I found about 8ms higher input lag
for the car than expected from the previous tests from Patch 1.41 despite the engine reaction
being the same.
But I don't like jumping to conclusions, so the very first thing I did, was to get out
the highspeed camera again and I made sure that my new test setup wasn't at fault.
But I got the same result.
What I've been doing for my tests is driving through a wall while looking backwards.
The spawn point is chosen perfectly to make sure that boosting will instantly put the
camera on the other side of the wall.
Due to this setup, I wasn't quite sure whether the measured difference was just because the
camera was delayed or the actual car.
I am of course using 1 stiffness.
So I went and did some hacking to teleport the car as soon as the button press is detected
by the engine.
When I did this, I got the input lag down to the number I had in Patch 1.41.
This tells me that teleporting certainly has no camera lag and that the visual frames are
still using the most recent physics frame.
To make sure that my problem wasn't caused by the car moving too small of a distance
in 1 frame I decided to make the car teleport upon any movement.
Because I'm teleporting after I'm already detecting a movement, all these results had
of course 1 more physics tick worth of input lag.
This caused me to get a total of 2 physics ticks extra input lag compared to 1.41 which
already proved that the act of boosting took 1 extra physics tick to move the car.
The amazing thing about this new test is that it also allows me to test things other than
boosting and I got some interesting results.
Regular acceleration also had a delay of 1 tick but jumps didn't.
I also tested turning which had no delay in how fast the angular velocity of the car changes
but the actual angle that the car is facing was 1 tick delayed.
So it seems that to calculate the change in angle, the angular velocity of the previous
tick is getting used.
Finally, to confirm the difference that I found and to test the other values, I rolled
back to Patch 1.41.
What I found was, that the boost lag was indeed lower but all the other things were the same
as 1.44.
Why/how this happened, I have no clue and I am also not sure if this has happened since
Patch 1.43 or 1.42 as I did no testing on Patch 1.42.
Alright, at the beginning of the video I said that I was going to talk about controllers.
I haven't tested anything related to them so far but I have a plan.
I have decided that I am going to buy all the popular controllers there are to do a
comparison between them.
This is only possible at all because of the amazing support from my patrons.
However, taking all my expenses into account this is actually going to put me at loss of
money but I have some savings and I am confident that investing in the future is the right
thing to do.
If you appreciate this kind of testing and have some money to spare then I highly appreciate
any amount of support.
In case you want a controller that's not on the list tested, then you can suggest it on
my discord and if you or other people are willing to give me one time donations that
cover the cost of the controller then I'm willing to test any of them.
This comparison isn't going to be the next video but I'm obviously not gonna announce
it and then wait half a year either.
To stay up-to-date about this channel or any unlisted changes that I find in the game,
follow me on twitter or join my Discord and I'll see you in 3 weeks for the next video.
No comments:
Post a Comment