Team-Fortress-2

cl_interp_ratio 1 和 2 之間的區別

  • July 26, 2021

有很多關於“完美”的論壇文章,cl_interp但沒有人真正提到過cl_interp_ratio。大多數玩家將其設置為12 (default),但沒有多少人解釋原因。

這背後的原因是什麼?價值觀之間有什麼區別?cl_interp_ratio甚至做什麼?

要完全理解cl_interpand cl_interp_ratio,您需要了解這些數字在幕後的實際作用。隨機設置它們實際上會使您的連接比預設設置更糟。

我將簡要概述插值,這對於 Source 引擎(例如 TF2)上的遊戲意味著什麼,不同的值cl_interpcl_interp_ratio含義,以及如何測試您的連接以找到適用的值你的連接。

插值

插值是一個數學術語。它是一種基於先前數據點猜測數據點的方法。作為一個非常簡單的範例,假設您正在等待接收八個數字,但實際上您只收到五個:

4, 8, ?, ?, 20, 24, ?, 32

現在,根據您收到的數據,您認為缺少的 3 個數字是什麼?如果您說121628,那是因為您認識到該模式正在上升 4,並且能夠假設該模式將保持不變。

當我們談論與遊戲有關的插值時,它通常是作為對失去數據的滯後補償的一種形式。遊戲不斷從伺服器接收數據,但可能會在此過程中失去一些數據包。根據閥門:

多人客戶端通常需要在接收到的每個伺服器更新時渲染三個或更多幀(假設 60fps+ 和cl_updaterate 20)。

Source 的插值系統通過緩沖伺服器更新然後在播放它們之間平滑插值的間隙來防止通常會導致的抖動運動。它還可以防止因丟包引起的故障。

閥門 - 插值

這在 Source 遊戲 (TF2) 中意味著什麼

如果沒有插值,其他玩家在執行時似乎會在螢幕上“結結巴巴”或“抖動”,尤其是在經常丟包的不良連接上。然而,Interpolation 的實現增加了玩家對遊戲世界的看法的人為延遲,因為它需要緩沖一些更新以插入失去的更新並平滑地顯示它們。因此,擺弄這些值是正常延遲(不良連接)與人工延遲(插值)之間的平衡

那麼這對cl_interpand意味著什麼cl_interp_ratio

  • cl_interp應該(幾乎總是)為 0,因為這將確保您的客戶端調整到伺服器的精確更新速率。更改此值會影響最小插值延遲(“lerp”),提高它會增加 lerp,因此會增加人工延遲。

預設情況下,它設置cl_interp 0.1為 100 毫秒的延遲,是撥號網際網路時代的遺留物。

  • cl_interp_ratio可能會有所不同,並且是您想要調整插值設置的設置。

通過設置cl_interp_ratio為 1,您僅使用來自伺服器的一個更新來猜測下一個(缺少的)更新是什麼。如果您碰巧連續刪除兩個更新,則客戶端將被迫隨機猜測(這會導致“抖動”位置)。所以這個值真的取決於你的連接質量。

你應該使用什麼

  • cl_interp_ratio 1如果您幾乎沒有丟包。這會緩沖一個伺服器更新以進行插值。
  • cl_interp_ratio 2用於包失去的連接。這緩衝了兩個更新,並有助於可能定期丟棄多個數據包的客戶端。
  • cl_interp_ratio 3(甚至 4 個)用於嚴重的封包遺失。這將緩衝 3(或 4)個更新,用於丟包率非常高的客戶端。

例如,您還可以使用實數,而不僅僅是整數,cl_interp_ratio 1.6但這只是增加了 interp 時間,而實際上並未使用更多更新。大多數人堅持使用整數。

如何測試

net_graph 1您可以使用開發人員控制台在 TF2 中打開您的網路圖。這將顯示您目前的 le​​rp 值:

  • 如果您沒有調整任何設置,您的網路圖將在 100 毫秒報告您的 lerp。
  • 如果您設置cl_interp_ratio 1它應該說大約 15 毫秒。
  • 如果它是橙色的,這意味著您將比率設置為低於 2。
  • 如果它變成黃色,它只是警告您它可能低於伺服器。
  • 如果文本保持白色,則 TF2 認為這是一個安全設置。

當然,您也可以通過花時間在不同的設置上進行測試並在遇到任何問題時對其進行調整,但 netgraph 將為您提供更精確的概述。您應該在玩一些遊戲時將其保持打開狀態,並註意其價值。

結論

直接回答您的問題:緩衝來自伺服器的一兩個更新之間的區別cl_interp_ratio 1cl_interp_ratio 2區別是為了補償不良的網路連接和失去/失去的數據。

您應該只使用cl_interp_ratio(not cl_interp),通常cl_interp_ratio應該是 1 到 4 之間的數字。

參考

引用自:https://gaming.stackexchange.com/questions/254631