Hey guys, HalfwayDead here with another episode of Rocket Science.
In this one, we're going to explain input consistency, run experiments, discuss how
to optimize it, and show how the experiments could be used to test heavy car bug.
Let's get this topic started.
Why would you or anyone care about the topic of input consistency?
Let me illustrate this with this simple example: My car is positioned a short distance away
from the ball, standing still.
I want to get a powerful shot, so I will accelerate with boost, jump, tilt back, and dodge forward.
There is an optimal timing of all the steps in this routine which will maximize the power
of the shot.
Finding the correct approach shall be a topic of a future video.
However, what I want to discuss here are the things, that can get in the way of executing
this shot perfectly, even if you know how to do it.
The most obvious and, one would hope, the biggest influencer of the execution is the
human.
Even when knowing how to hit a powerful shot, any human can easily mess up the corrects
timings by a couple 1/100ths of a second.
But it isn't the only culprit in this equation.
The input device can also make a difference.
I've already mentioned this in my controller input lag test and I'll further elaborate
on the testing scenarios later but a device with only 100Hz polling can cause a deviation
of up to 10 ms.
And regarding wireless controllers, I have previously measured up to 20 ms deviations
due to wireless interference or weak signal strength.
And lastly, we also have the game.
Now to set the record straight, Rocket League physics are deterministic.
That means, if the same inputs get used in the same physics step, the outcome will be
identical every time you repeat the same inputs.
There are still reasons for why that timing could get messed up though, even if the human
and input device have done their job perfectly.
The game only checks the state of the inputs every frame, but the physics run at an independent
rate, which can create alignment inconsistencies.
The same kind of alignment can also happen if the framerate is not in sync with the polling
rate of the input device.
I'll explain that later.
Let's get back to the human aspect.
As always, I didn't want to just state the obvious, that humans are not perfect.
I wanted data.
I wasn't able to find quite what I wanted online so I set up my own experiment.
I opened up and wired up my mouse to connect it to my Arduino.
A necessary step, to make sure the machine error of the measurement is basically 0.
What I did then, was to turn a metronome to 120 BPM and tapped along with the beat, measuring
the times between each button press.
The expected time is 500 ms and that was pretty much exactly my average.
The interesting part, however, is obviously the consistency.
In this case, the standard deviation.
It was just below 15 ms in my case.
A short note here: While I have played the piano since I was 5, and would expect myself
to be above average at this kind of exercise, I didn't feel like I was able to replicate
the same consistency that I can when playing a piece of music.
Therefore, I think that this is not the human limit of timing accuracy, but it is a data
point to start with, and I was also interested in confirming whether the average timing fits
a normal distribution, and it does.
But how does the polling rate tie into this?
To figure that out, I can take the measurements and treat them as if they were made at a lower
polling rate.
The result seems rather uninteresting at first sight.
Even with a polling rate of 100 Hz, which is the lowest of any common controller that
I'm aware off, the inconsistency only increases by 0.3 ms or 1.8% compared to 1000 Hz.
That is a good sign and makes sense if you consider that some professionals are using
the DS3 at the highest level of play, but I also said that 100 Hz polling could screw
you over by almost 10 ms and that is still true.
Let's say you pressed the button 501 ms after the previous press and you barely missed the
polling window of the controller.
As a result, your input will be sent after 510 ms, making it 9 ms worse than it was.
But, and that's a big but, the exact same thing can also make your input 9 ms better
if you pressed the button too early after 491 ms.
In the end, this effect will save you as much as it will screw you over, but the average
inconsistency only goes up slightly because the options are more extreme.
It should be noted that if you go as low as 50 Hz or even lower, the inconsistencies will
start to get significant quite quickly.
In the same sense, someone with better timing accuracy than me might be limited by 100 Hz
polling already.
Earlier, I said that there are other technical reasons for why inputs might be inconsistent.
Those are best shown by going over the entire input process from the button press to physics.
In this example, we're going to assume that we wanted and managed to press down a button
for exactly 50 ms.
Our controller shall have a polling rate of 250 Hz, so it polls every 4 ms. 50 ms / 4
ms = 12.5, it doesn't divide.
We can only have a 48 ms or 52 ms button press.
Which scenario happens, is decided by the timing of the button press within the 4 ms
window.
We can assume those micro timing alignments to be random.
In this case a 50/50 chance for either scenario.
Then we have the game, running at a stable 144 FPS.
The game checks the inputs every frame, so it's going to check every 6.94 ms. 48 ms / 6.94
ms = 6.91.
Which gives 91% chance for the input to last 7 frames and a 9% chance to last 6 frames.
In the 52 ms input case, it could last either 7 or 8 frames.
The physics in Rocket League, however, get calculated independently of the framerate
with 120 ticks a second.
Apply the same kind of math we did it in the last step and you get the end result.
There are 3 scenarios.
Either the game calculates the physics as if you pressed the button for 5 ticks, approximately
42 ms, 6 ticks, 50 ms, or 7 ticks, 58 ms.
The odds of registering the intended 50 ms are only 67% and the other two scenarios are
16% each.
Had we capped the framerate at 120 FPS instead, having it at exactly the same rate as the
physics, we would have a 76% chance for exactly 50 ms.
Any multiple of the physics tick rate will outperform any other framerate in terms of
consistency.
This may sound more dramatic than it is until you calculate that with my inconsistency data
earlier, I would only be able to hit the perfect tick 22% of the time.
The example was also assuming perfectly stable framerate which is unlikely.
So far, we have seen why achieving 100% consistent inputs is basically impossible.
But can we actually measure these effects in a test and see how it affects gameplay.
A theory means nothing unless it holds up in an experiment.
This is the part which took me the longest to make.
You might think it's easy, just create a macro with any gaming software and run it over and
over again.
Sadly, it's not.
The accuracy of these ranges from completely inconsistent to usable in some tests.
Unfortunately, when the whole purpose of the experiment is to measure consistency, then
slight inconsistencies are already unacceptable.
So I went back to my trusted Arduino.
It has a microcontroller that allows me to connect it to the PC just like any real gamepad.
The only difference is, that I am free to program it exactly how I want.
So I got to work and wrote some code that allows me to not only to run macros on the
Arduino but also simulate polling rates and other inaccuracies.
Then, I set up the shot from the initial example I gave at the beginning of the video.
To ensure maximum baseline consistency; I took a couple of steps.
Rocket Labs map, lowest graphics settings, closed down every program I didn't need, and
maximum performance mode in Windows, so the processor doesn't use it's power saving features.
I also locked the framerate to 240, a multiple of the physics tickrate, that I was able to
reach in a very stable manner.
Then I let the experiment run for as much time as was feasible.
For the baseline experiment that was almost 6000 shots which takes over 4 hours.
The results are better than I expected to be quite honest.
The default shot I set up was 3041.75 uu/s and it happened 91% of the time.
Within the entire test, not a single shot was below 3008 uu/s and not a single one above
3062 uu/s.
That's a difference of less than 2 km/h or barely over 1 mph.
Still rather uninteresting on its own so let's go on to the comparisons.
First, I varied the polling rate default 1000 Hz, 250 Hz, 125 Hz, and 100 Hz.
The percentage of perfectly consistent macros is 91%, 67%, 47%, and 26% respectively.
In the macro, there are obviously multiple actions that have to be done at exactly the
correct timing relative to each other.
So those 26 % are most definitely better than the 22% human quota I said earlier.
The worst case shot strength for all polling rates below 1000 Hz was also an additional
km/h lower.
In my controller input lag test, I measured that, despite the lower average input lag
of the DS4 in wireless mode, the input consistency was a little worse.
Other wireless controllers tended to have a slightly lower consistency too.
With the latency distribution data I collected back then, I can now simulate what using a
wireless DS4 would be like with my Arduino.
The result is kinda interesting, but it makes sense.
The amount of times the perfect frame timing is hit is 78%, as opposed to the 67% in the
250 Hz wired case.
However, that is not the full story, which I think is best shown in visual.
Most of the time, the higher polling rate saves the controller and makes it more consistent,
but wireless is never 100% stable and you can get these spikes which have bigger impacts
on actual gameplay than the polling rate will ever have.
I'd personally rather have small inconsistencies often, than bigger inconsistencies rarely,
but you can make an argument to justify either cable or wireless.
What else can we test?
Well obviously framerate.
I've made a big deal out of matching the framerate with physics, so I have to back that claim
up.
I tested a couple of framerates but for the main comparison I went with 144 since it's
bigger than 120 and one that people commonly use.
To make sure this doesn't just come down to a bit of randomness, the experiment was also
run for over 4000 shots.
The amount of perfectly consistent shots went down to 68% instead of 91%.
But, I hear you say, isn't that just the lower framerate in general?
It is not.
With 120 FPS the result was the same again as 240.
In fact, a tiny bit better but that is likely just down to randomness because I didn't test
it as long.
I also unlocked the framerate completely, causing the framerates to go up to around
600-800.
As framerates approach infinity, the theory predicts that the syncing starts getting irrelevant,
but I was still able to measure a 5% drop in consistency here.
More concerning are the results that happen below 120 FPS.
At 60 FPS the intended shot happened exactly 0 times, and there is a good explanation for
that.
If I wanted to start boosting, and then stop boosting 9 physics ticks later, that is literally
impossible.
Since the game only checks the inputs every frame, all actions will last an even amount
of physics ticks.
That means the intended macro cannot be executed perfectly.
In a sense, the 60 FPS case was still consistent, because there were basically only 2 different
results that happened a combined 95% of the time.
Those 2 results have a speed difference of 4 km/h though, which makes that gap bigger
than any of the worst results that happened at higher framerates.
Because of that, you'll always want as high of a framerate as you can get if you can't
get at least 120.
These results are interesting but in real situations, you're probably not going to get
that stable of a framerate.
The reason I did most of the tests this way is that introducing inconsistencies will also
make the experiment results more random.
Regardless, I did want to check whether any of this is relevant when the framerate isn't
as stable.
So I did test exactly that, by putting a Twitch livestream and a youtube video on my second
monitor, left all my usual apps like Spotify and Discord open, and put the graphics settings
to the maximum.
The frame graph looked like this.
So, very inconsistent but it does still hit the capped framerate quite a bit.
Obviously, if you never reach the capped framerate then the cap is irrelevant.
So I did this with 240 and 144 FPS, and the results are quite clear.
The perfect shot with 240 unstable FPS happened slightly more often than with stable 144 FPS.
Unstable 144 FPS was 30% worse.
Stable 144 FPS is of course still better than unstable 240 FPS, because getting a big stutter
will really screw you over.
That wasn't the point of this experiment though.
So all I had left to do, is try it myself.
I got the intended shot, you guessed it, 0 times in 500 tries.
Obviously, I can't imitate a macro, but we can once again look at the visuals to see
something interesting.
First, let's go with the best case scenario I had.
This shows, that if RL is running as well as it can, you should never blame the game
for missing.
The 144 FPS unstable experiment had some major stutters from time to time, and those can
be just as bad as your own whiffs.
Personally, I thought the 60 FPS stable experiment was most interesting though.
If you line up my good shots with those results, you'll see that if you just take my good shots,
they vary no more, if not less.
That would explain why no one who has played 120+FPS likes going back down.
There are just these shots, where you felt like you did well, but it doesn't go exactly
as expected.
But I'm probably starting to interpret a bit too much here to call it science.
Feel free to draw your own conclusions.
TL;DW.
What can you do to get the maximum consistency?
First: Get the best PC you can, so you have enough horsepower to run the game at a stable
high framerate.
Second: Get an input device with the highest possible polling rate that is wired, if feasible.
Third: Cap your framerate at 120 or 240 FPS.
The latter will have a little lower input lag, but it's basically irrelevant for consistency.
Fourth: Optimize graphics settings and power options to tweak performance.
Is your framerate stable?
Congratulations, you have done all you could and now you don't have any excuses left when
you miss the ball, Whoops.
This leaves another question open though.
Is there anything Psyonix could do?
Since the physics aren't tied to framerate, there are indeed options.
I got Bakkes to write me a piece of code that would read the inputs directly to the physics
ticks, skipping visual frames.
My all so smart idea turned out really stupid when I found out that the physics ticks, are
always queued relative to visual frames and therefore calculated at irregular intervals,
even though they act as if they are calculated at regular intervals.
Ergo, the result is identical.
There is a still a possibility to get more consistency through an input buffer.
I'm not gonna explain in detail what it is, but it would increase input lag in order to
improve consistency.
I might try that out in a future video if people are interested and ask players to test
it in freeplay to see if they like it.
Psyonix tends not to experiment and give us too many options, so I don't have the highest
hopes of ever seeing it in the game.
If you're only here because of heavy car bug and you still watched all the way, then I
applaud you for trying to understand everything I talked about so far.
I shall make a short explanation of what I understand as heavy car bug and how this video
relates to it.
Quite a long time ago, some players started to complain about Rocket League on Reddit
and the official forums, stating that the control of their car felt inconsistent, shots
felt weak, and or their cars were outright turning or moving slower.
Moreover, a distinction that I like to make, although I think some people are split on
this, is that the bug only happens sometimes or it only happens on a specific account.
If you don't have anything to compare to, after all, there is no way for you to know
if the inconsistencies you're feeling are out of the ordinary or even your own fault.
So with that out of the way, here is the problem.
No one has been able to reliably reproduce this change in game behaviour and it's supposedly
independent of such proven inconsistency factors as unstable framerates.
There have been a large number of suggestions on possible causes of the symptoms as well
as fixes in the past, but for some, it never seems to go away.
First, I want to get into some of the causes.
Very often, I have heard that the physics actually change when hcb happens.
That is essentially impossible in online games.
The server and your computer calculate the physics independently and if your cars turning
radius on your computer was wrong then the server would send a different location and
you'd get moved to the correct location.
I could also talk about how I test the physics every patch to make sure they stay the same,
but that is obviously only proof that it is that way for me.
But there is a heavy car bug Discord where many affected people have been doing a lot
of tests with the help of some Psyonix developers, and as far as I've understood it, they have
ruled out actual physics changes.
Another suggestion is input lag.
Delayed inputs can feel horrible and I myself would never like running on a TV with high
input lag.
The problem with this suggestion is, that you can obviously have high input lag, but
that it isn't necessarily Rocket Leagues fault.
I have already made lots of videos, explaining and measuring different causes of input lag.
Once again the people in the testing Discord have already been trying to measure the input
lag Rocket League causes through code.
If you're still suspicious, my external testing setup could be reproduced with about $40-$50
which would allow testing your input lag and confirming that it stays constant.
So if it's neither the physics nor the input lag, then it must be that inputs are not reaching
the correct physics ticks.
For which I suggest using a setup such as the one I had in this video.
If the macros can get consistent inputs but you can't, it must be your fault.
If the data shows anything suspicious, then you have something to work with that might
help fix the issue.
So my suggestion is, that you can contact me and I will help you order and setup these
tests on your own computer if you want to.
I do hope, that if there are a lot of people, I can refer you to those that have already
done it, so you can help each other.
Before you go and contact me, I want you to seriously consider that, because it will be
some work and the setup isn't completely free.
I personally do think it's either a visual bug or a placebo.
I'm not just gonna state that though.
I'm going to give you 2 completely free experiments to do right now, that might convince you.
First one is just an anecdote to counter some of the heavy car bug related statements I've
heard.
In the workshop map called "The Wall" there is a tight turn at the very beginning of level
4.
It is possible to get through that turn without powerslide while boosting from the start.
Though, if you try for the first time you'll likely fail.
The only way to do it is to pre-steer before you can see where you're going.
Why am I showing you this?
I think I've heard the statement "See how quick squishys car moves?
My car is always slower."
one too many times.
The top players are able to make turns and twists just in time because they have already
given the input way before you think about it.
When a player lands perfectly on the wall after they've flipped into the ball, it is
because they have done the right inputs before their flip was even over.
Enough about that, the more interesting experiment is the second one.
It's pretty simple, just go into an exhibition match with the slow-mo mutator and play that
for 30 minutes straight.
Alternatively, you can use BakkesMod to create slow-mo in freeplay.
When you go back to normal speed after playing slow-mo for that long, you're gonna feel like
it's way too fast.
It's a great example of a placebo fooling your brain into thinking something is too
fast or too slow.
And you're not immune to this because you have x thousand hours.
I hope no one who thinks the bug is real takes this personally.
I don't have proof that it isn't, but I could never prove that unless I tested all the computers
all the time.
Please, do not take this as an insult.
It doesn't matter who you are, our minds can be fooled.
Science has never accepted a feeling as proof and I will not believe that this is a real
bug until I have seen evidence that shows it.
Before I inevitably cause too many dislikes, I shall end it.
Shoutout to my patrons who continue to support me financially.
Without them, videos like this one would be impossible.
If you want to join the supporters for as little as $1 you get a vote on topic priority
and a guaranteed reply to your questions.
If you want to stay up-to-date about RL changes and the channel, follow me on twitter, or
join my discord, and I'll see you soon for the next video.
For more infomation >> Car strikes woman crossing street in San Bernardino | ABC7 - Duration: 0:34.
For more infomation >> Hospital Employee Struck, Killed By Car In Weston Parking Lot - Duration: 2:18. 
For more infomation >> Video: wanted suspect rams a police car during high-speed chase - Duration: 2:33.
For more infomation >> Nissan's Invisible-to-Visible technology creates the ultimate connected car experience - Duration: 1:42.
For more infomation >> Lounge car debuts on Winter Park ski train - Duration: 2:51.
For more infomation >> Luam mașini pe Extrem Car driving - Duration: 10:49. 
For more infomation >> PD: Hartford police intercept car after woman chased down, forced inside by man - Duration: 0:35.
For more infomation >> Debate over $30 car tabs - Duration: 2:31. 


Không có nhận xét nào:
Đăng nhận xét