Rift of the NecroDancer

Rift of the NecroDancer

59 次評價
Latency Calibration is Surprisingly Hard
由 JiminP 發表
Many think that Rift of the NecroDancer's calibration test and timing judgments are inconsistent.
But do they? (Spoiler: Yes, but not in a way you would expect.)
I've conducted a few experiments, and found out some interesting aspects of latency calibration in the game.
4
2
10
2
2
   
獎勵
加入最愛
已加入最愛
移除最愛
Introduction
참고: 한국어 버전은 여기를 클릭하면 볼 수 있습니다.

Skip this section and start from the next section if you're only interested in adjusting the latency settings.


I think that I'm not too bad at this game. Still, I often get the feeling that the timing judgment of this game is a bit inconsistent. When I play with Coda, often the hardest part is the one with lowest enemy density.

Moreover, it seems that quite a few people are struggling on latency settings on this game. Here are several comments I've read on Reddit.

  • "... The readjustment after the test for video and audio calibration being so drastic for me never seemed right."
  • "... When using this games calibration it suggested +20 video, +60 audio. I played with that for awhile and felt it was off."
  • "Yeah, I felt it. When I was playing with auto calibration it felt off, because when I was doing perfectly with my beat, the game just gave me randomly "good" or "great". And when I turned it off it was just perfect, as it was."
  • "Definitely felt this. Using the calibration test has led to recommended adjustments from +30 to -20. I gave up and manually adjusted to get something that feels right."

To see why the calibration test does not work for many people, and to find the best latency setting values for myself, I started my investigation.

In the end, I learned how do the latency settings work, and various quirks of them, including ones that likely made a lot of people frustrated. In addition, I've devised my own way of calibrating latency settings, which I'll share here.

Note: This guide is for the version as of 2025-02-25. I suspect that this guide will be outdated sooner or later....
Definitions
Before we start, let me define some terms I'll use throughout the guide.
  • AL: Audio Latency setting value
  • VL: Video Latency setting value
  • CT: Reported Calibration Test value
    • "You seem to be a little late on beat. Want to adjust by 20ms and test again?": CT = 20ms
    • "You seem to be a little early on beat. Want to adjust by -20ms and test again?": CT = -20ms
    • "Looks like you're good to go! You can re-calibrate at any time.": CT = 0ms
  • "Play without sound" = mute all sounds and do the calibration.
  • "Play blindfolded" = don't look at the screen, and play from memory while focusing on the music.

For example, the image above shows:
  • AL = 44ms
  • VL = 17ms
  • CT = 34ms
Recommended Settings
I recommend configuring these settings before doing latency calibrations. However, do note that none of these settings are mandatory, and if you prefer, you may modify them as you wish.

Audio Settings
Set volumes for Monster SFX, Hit SFX, and Telegraph SFX to 0%.

Caveat: If you've played other rhythm games with keysounds on, then setting those volumes to 0% might be not optimal for you. If you do need to set those volumes greater than 0%, then I recommend against using Audio Calibration for fine-tuning AL.

Accessibility Settings
Enable Early/Late Hits and Accuracy Bar. However...
  • If you are not used to manually adjusting latencies in rhythm games, I recommend against enabling Early/Late Hits during calibration.
    • This is to prevent you from unconsciously adjust your timing based on immediate feedback. This is harmful for accurate calibration.
    • If you can keep that from happening, then do enable them during calibration.
    • Nevertheless, even when you're not, do enable them during normal gameplay.
  • Accuracy Bar is not shown during Calibration Test.

Also, you may want to enable other accessibility settings such as Static Monsters and Static Portraits, but (unless you're experiencing frame drops) I don't think that they affect timing judgments in a significant way.
The Method
Note: While doing calculations, be careful on negative values. For example, subtracting -20ms from 30ms would result in 50ms (= 30 - (-20)), not 10ms.

Initial Calibration
First, do these three steps.
  1. Do Audio Calibration.
    • You may try it multiple times, record each AL, and use the average value as your new AL.
  2. Do Video Calibration.
    • You may try it multiple times, record each VL, and use the average value as your new VL.
  3. Go to Manual Calibration. Compute AL - VL, and use that value as your new AL.

Note: Whenever you have changed AL via confirming on Audio Calibration, you MUST also do step 3. More on this later.

Adjustment
After having set up AL and VL, you should test your calibrations via Calibration Test.

Note: NEVER press the "Adjust & Retry" button after having completed a Calibration Test.
  1. Play without sound, and confirm "Looks like you're good to go!".
    • If not, then adjust both AL and VL manually as following.
    • Set AL - (CT/2) as your new AL.
    • Set VL + (CT/2) as your new VL.
  2. Play blindfolded, and confirm "Looks like you're good to go!".
    • If not, then adjust AL manually as following.
    • Set AL + CT as your new AL.
    • Leave VL unchanged.
  3. Play normally, and confirm "Looks like you're good to go!".
    • If not, retry from the first step (of either "Adjustment" or "Initial Calibration").

Gameplay Testing
After gameplay, if you feel that you get too many earlies, then try increasing AL by 5ms and decrease VL by 5ms; in the other direction if you get too many lates.
  • This assumes that your video latency is more unstable than your audio latency.
  • Otherwise, you may do steps under "Adjustment" but with actual gameplay instead of Calibration Test. In this case, getting too many earlies corresponds to a small negative CT (something like -5ms), and getting too many lates corresponds to a small positive CT (something like +5ms).
However, on more difficult patterns, people tend to hit enemies earlier than when they should be.
Therefore, unless you're very experienced in other rhythm games, then I would recommend keeping latency settings and instead you should try adjusting your own timing - as long as they work fine for calibration test and on easier charts.



That's it!

... However, you are probably wondering what the heck is going on behind all those steps (and why). Maybe your timing still feels off after having executed all the steps. Or maybe, you are the developer of this game (thanks for a wonderful game <3) and wondering what is this guy up to with these weird procedure.

If you are one of those people, then continue reading.
Explaining the Latency Settings
Here are what each latency setting compensates.
  • Audio Latency: Compensate for relative audio delay - the difference between audio latency and video latency.
  • Video Latency: Compensate for input delay.

This is a bit different from what the names suggest, but this is found by doing experiments on how increasing values for each setting affect playing blindfolded and playing without sound:

Setting
Blindfolded
No Sound
Audio Latency
more lates
no effect
Video Latency
more lates
more lates

If VL only compensated video latency, then it should not affect blindfolded plays. However, it does, which proves that it actually compensates for input delay.

Actually, doing so is natural for programmers, so this is pretty typical for rhythm games. For example, the arcade rhythm game Chunithm works in the exact same way (Offset A corresponds to AL, and Offset B corresponds to VL).
Quirks and Problems
OK, so the names are a bit misleading, but otherwise nothing unusual. So, what causes the inconsistencies felt by many people?

Audio Calibration: Not Taking VL into Account
As an example, let's assume that a player, with perfect skill:
  1. Got AL = 20ms on Audio Calibration.
  2. Got VL = 15ms on Video Calibration.

Audio Calibration confirms that the true (as we assumed that the player is perfect) audio latency is 20ms. However, as the compensation by the game for audio latency is AL+VL, Video Calibration incorrectly sets the audio latency compensation to 35ms, deviating from 20ms.

Moreover, as Audio Calibration does not take VL into account, doing it again will leave AL unchanged, creating discrepancy between Audio Calibration and Calibration Test.

In this situation, the correct values should be AL = 5ms and VL = 15ms. This is the reason behind step 3 of "Initial Calibration" in my method - after VL has been obtained, AL obtained via Audio Calibration must be adjusted by removing the portion compensated by VL.

Audio Calibration: Wrong Audio
I've found that the calibration ticks for Audio Calibration is incorrect. This would add small (something like 10ms or less) inaccuracies for measuring AL.

Video Calibration
AFAIK there's nothing wrong with it. Still, as the calibration UI does not represent an actual gameplay, the measured VL can be inconsistent. Playing an actual game without sound is more accurate.

Calibration Test: "Adjust & Retry" Considered Harmful
It's a handy feature for casual players. However, it adds CT/2 to both AL and VL, which compensates audio latency by CT and video latency by CT/2. I don't think that doing so (using one value to adjust two latency compensations at the same time, in general) is a good idea.

Calibration Test: Clipped CT
The CT value is clipped to ±40ms. For example, if the calculated CT is 50ms after calibration test, the reported CT would be 40ms. This is not wrong (after all, you would likely want to iterate calibrations if the latencies are high), but if you do need to set AL and VL manually via CT, then together with the following problem, the clipping will cause some issues.

Calibration Test: "Good to Go!" Is a Lie
Based on my experiments, the message is displayed as long as -15ms ≤ CT ≤ 15ms. This is too wide, especially considering that CT is an average (or median, or something like that) of 20 timing deltas, and for something like Coda play, 15ms is a seriously large bias that needs to be adjusted further.

Moreover, together with CT clipping, this makes manually adjusting AL and VL properly via CT much more tricky than it should be.

Calibration Test: Amplified CT?
I still have no idea what exactly causes it, but based on my experiments, changing VL by 1 and playing without sound results in CT changing by 2. This implies that CT would not converge to zero while adjusting VL via Calibration Test.

No Evidence
So far I have not found a significant evidence for these:
  • I suspected (and still do tbh) that the timing judgement jitters during gameplay. However, so far I can't rule out that it's me who is inconsistent. The timing window for this game is not wide, after all.
  • Other than what I've already stated above, I found no evidence of significant jittering while using Audio Calibration, Video Calibration, and Calibration Test. (For VL, some jitters are unavoidable due to framerates.)
Experiment Data
As part of my investigation, I did Calibration Test many times. I mean a lot. I have done nothing but teleport bread play Calibration Test for four hours.

Here are my results, showing negative side-effects of CT values being hidden/clipped, and giving evidence that CT changes more than VL does.

Note: I played fullscreen, on a 60Hz monitor, with a (cheap) headphone connected via 3.5mm audio jack.

My CT, when AL=0, varying VL.

My CT, when VL=-1 (I was testing something else), varying AL.
The Method (the Hard Way)
The initial calibration for obtaining AL and VL is the same as the non-hard way. Let the initial values be AL0 and VL0 respectively.

Basically, draw two graphs like I did above.
  1. Fix AL = AL0. For various VL around VL0 (start from VL0 - 15ms and VL0 + 15ms), play many Calibration Tests (without sound) to gather data points (VL, CT).
  2. Discard data with incorrect CTs, and find the x-intercept of the regression line of the remaining data. Update VL0 to that value.
  3. Fix VL = VL0. For various AL around AL0 (start from AL0 - 30ms and AL0 + 30ms, play many Calibration Tests (blindfolded) to gather data points (AL, CT).
  4. Discard data with incorrect CTs, and find the x-intercept of the regression line of the remaining data. Update AL0 to that value.
  5. Play Calibration Test normally to confirm that AL = AL0 and VL = VL0 feels correct.

There could be a friendlier guide to people who don't know how to draw a regression line, but I'm too tired writing this guide to devise one :(
Conclusion
I propose these changes to be made, which I believe that will make the gaming experience more pleasant overall.
  • (High Priority) Either Audio Calibration and Video Calibration should take into account that VL affects audio latency compensation, or the functionality of VL should change so that it only affects video latency compensation.
  • (High Priority) Timings of ticks for Audio Calibration should be corrected.
  • Calibration Test results should always show raw CT values. I think that it's fine for "Adjust & Retry" to use clipped CT values.
  • Add "Manual Calibration" option to the Calibration Test result scene.
  • (Low Priority) Video Calibration should be based on actual gameplay.

Until the changes are made, you should be aware of the issues while calibrating latencies on this game.
9 則留言
SomeWade 7 月 12 日 下午 3:51 
Tremendous Guide.
White_Okami 4 月 4 日 上午 10:55 
Thank you for making this guide, the calibration in this game kinda drives me crazy.. I usually dont play many rythmgames but i never had a problem in metal hellsinger i was mostly perfect on bear but here it was very frustrating for some reason..
Appl_Jax 3 月 19 日 下午 7:09 
There appears to be an undocumented way to sync the visuals so you can see and hear the game perceives your inputs. Go to Audio or Video Calibration and press 'R'.

Though I don't know what it's purpose is, it only allows you to simultaneously change audio and video but doesn't appear to have any meaningful effect until you play.
MystiQue 3 月 17 日 上午 7:03 
I might be wrong, but it also seems like you need to reset your latency for audio and video if you're doing multiple tests back to back to get a median value, cause it seems like your next calibration just keeps it set to whatever the last calibration showed you. I just did 5 video calibrations back to back and despite pressing my inputs at very similar times, my ms kept increasing, quite rapidly sometimes. Here are the values I got:

Video Latency:
30 ms
44 ms
59 ms
87 ms

TL;DR when trying to get a value, manually adjust latency to 0 ms before running another test.
Touhning 3 月 16 日 上午 8:30 
Excellent guide ! I followed the method and was able to get a lot more "Perfects" on the maps I was trying to score on at the moment.

But then ... I tried other maps, with a higher BPM and it felt so wrong, "Perfects" were not so effortless and I had to focus so much to get them.

I mean, it might just be me that needs to get used to the speed or the timings that are tighter (I guess ?) but if you have some tips I could really appreciate it.

For now, I tried to adjust manually with +5 AL and -5 VL or the other way around but yeah, it's a little weird.
Dreyvas 3 月 2 日 上午 8:35 
Thanks for this. Absolutely excellent stuff.
🦢🦢🦢 🦢🦢 2 月 28 日 上午 6:47 
finally a latency guide, was waiting for one since the release, thanks
Atlas Veldine 2 月 26 日 下午 12:30 
It's also insane to me that the calibration tool has the gall to report as high as 80ms audio latency. My god. I play other rhythm games at anywhere between 0ms-20ms latency, how in the hell is this game adding so much of a delay to the audio output?

I like having hit sounds on, and rhythm games are damn near unplayable for me with hit sounds once the audio latency goes above 20ms.

Anyway, thanks for the enlightening post. Much appreciated.
Atlas Veldine 2 月 26 日 下午 12:30 
I have no idea why you've not received any comments on this, but this is beyond excellent work, and satisfies my question of, "Why in the ever-loving-fuck is this game's calibration so fucking *bad*?" Video Latency being Input Latency irritates me to no end; you'd expect Video Latency to adjust the timing of visuals, not the offset by which the input manager utilizes. That would be Input Latency, not Video. Seriously. Ugh.

I agree, by the way: this game's latency jitters like crazy during gameplay. I'll hit perfects with no early/lates for a bit, then all of a sudden early great, early great, early great, over and over, until suddenly, late perfect, late perfect, late great, late great, and so on. It drives me mad. I'm incredibly sensitive to latency in games, and it makes playing this one very frustrating.