Skip to main content
本主題說明如何管理遊戲的端對端延遲,以確保提供回應迅速的遊戲體驗。
此資訊截至 2019 年 11 月為最新。部分功能可能自那時起已變更或更新。

端對端延遲

玩家所感受到的延遲,是從按下控制器按鈕到顯示器上發生反應之間的時間。 圖 1. 偵測延遲的能力。 偵測延遲的能力 圖 1 顯示一項延遲偵測研究的結果。當延遲達到 175 毫秒時,所有參與者都能偵測到。在 75 毫秒時,略多於半數的參與者能偵測到。低於 75 毫秒時,偵測會變得越來越困難。延遲為 60 毫秒時,只有少數參與者能偵測到。延遲為 60 毫秒的遊戲即定義為回應迅速。 圖 2. 畫面的產生方式。 畫面的產生方式 圖 2 顯示畫面產生方式的簡化流程。
  1. 系統將控制器狀態傳送給遊戲。
  2. 遊戲讀取資訊並更新模擬。
  3. 模擬結果會轉譯出新的畫面。
  4. 系統將新轉譯的畫面傳送到顯示器。
圖 3. 可能產生延遲的區域。 可能產生延遲的區域 圖 3 顯示可能發生延遲而使遊戲回應不佳的區域。 圖 4. 理想狀況。 理想狀況 圖 4 顯示在轉譯至顯示器時,理想情況下應在盡可能接近模擬步驟時讀取控制器輸入。系統會追蹤畫面傳送的時間以及到達顯示器的時間。

三步驟的控制器輸入問題

控制器輸入問題可分解為下列步驟。
  1. 相關的控制器輸入:盡快取得玩家輸入。
  2. 有效的時序:盡可能有效率地處理遊戲狀態的變更並轉譯結果。
  3. 回應迅速的顯示器:盡快繪製玩家的顯示畫面。

相關的控制器輸入

控制器已有所改進,且變得越來越複雜。這種複雜性隨著時間增加了延遲。控制器會因下列問題而增加延遲。
  • 無線傳輸:
    • 流量
    • 資料可靠性
  • 介面額外負荷:
    • 裝置管理
    • 安全性
  • 系統/作業系統額外負荷:
    • 識別
    • 剖析
    • 呈現

有線與無線控制器

大部分 XBOX 控制器都以無線方式使用。不過,這種使用方式可能有下列問題。
  • 控制器可能與手機等其他裝置共用無線頻譜。
  • 由於無線控制器需要電池,其耗電會帶來挑戰。
  • 資料可能遺失。遊戲必須考量傳輸延遲的情況。
  • 由於 USB 輪詢速度快,有線控制器的額外負荷只會增加 1 毫秒的延遲。
  • 無線控制器的額外負荷最多可增加 3 毫秒的延遲。

控制器輸入取樣率與相位

當取樣的輸入與遊戲不同相位時,取樣率也可能造成問題。 圖 5. 輸入取樣率與相位。 輸入取樣率與相位 圖 5 顯示一個以 125 赫茲取樣的控制器範例。這可保證在單一畫面內會有兩次控制器讀數。不過,這種取樣也會產生間隙,您可能會在需要之前就取得讀數。有時則可能在之後才取得讀數。在圖 5 中,延遲會在 0 毫秒到 8 毫秒之間不一致地漂移。 讓控制器以最大速度輪詢的解決方案也有其本身的問題。
  • 電池使用量:每秒輪詢一千次會快速耗盡電池。
  • 較高的 CPU 額外負荷:所有輪詢到的資料輸入都需要剖析和處理。

動態延遲輸入功能

請使用動態延遲輸入 (也稱為「同步輸入」) 取代最大化輪詢方法。此功能會自動最佳化控制器輸入時序,並執行下列動作:
  • 監視輸入查詢的節奏。
  • 監視無線和有線效能。
  • 確保在要求時,最新的輸入已經剖析且可供使用。
  • 追蹤已轉譯畫面的呈現時間。
  • 根據輸入查詢的節奏、無線/有線效能和呈現時間,維持一個「信賴」等級。
  • 在 PIX 中提供信賴等級,以供效能調查使用。
使用信賴等級來決定要啟用或停用此功能。 此外,您可以手動標示重要的讀數,或選擇不使用此功能。此功能僅適用於 XBOX Series X|S。

系統改進

系統已進行多項變更,有助於改善輸入回應性和整體延遲。其中包括下列各項:
  • 以直接記憶體存取 (DMA) 為基礎的新設計,可將作業系統的參與降到最低。
  • GameInput API,可從連接的輸入裝置收集歷史資訊。
  • 有線控制器的按鈕按下會觸發更新。動態延遲輸入對類比輸入仍然有幫助。
  • 改善無線資料的復原能力。
  • 追蹤與圖形畫面時間相關的時序。
輸入延遲的目標如下。
  • 無線輸入延遲降低超過 50%。
  • 有線輸入延遲降低超過 75%。
  • 有線控制器的平均輸入延遲約為 1 毫秒。

有效的時序

圖 6. 畫面節奏。 畫面節奏 圖 6 顯示畫面在與其他正在處理的畫面平行執行時的產生方式。 圖 7. 畫面間隔時間。 畫面間隔時間 圖 7 顯示畫面間隔時間。「畫面間隔」的長度決定呈現的頻率,並指定畫面轉譯及傳送至顯示器的速率。 圖 8. 畫面週期。 畫面週期 圖 8 顯示值為 2 的「畫面週期」。這表示畫面在一個間隔中開始,並在下一個間隔中完成。

PresentX 畫面節奏

PresentX 透過將轉譯和呈現頻率的表達方式抽象化,來變更畫面節奏。 先前,畫面時間是以顯示器重新整理速率 (VSync) 為基礎。對於目前的顯示器而言,這會變得複雜,因為其重新整理速率會隨著可變重新整理速率 (VRR) 等功能而改變。此外,畫面週期先前是以遊戲交換鏈數量的間接函數來計算。 相較之下,PresentX 使用持續時間來計算畫面時間,並使用定義的管線深度作為畫面週期。 圖 9. PresentX 畫面節奏:以 60 Hz 為目標。 PresentX 畫面節奏:以 60 Hz 為目標 圖 9 顯示以 60 Hz 畫面播放速率為目標的簡化 PresentX 畫面節奏。 下列程式碼範例顯示 SetFrameIntervalX API。
圖 9 中使用的 SetFrameIntervalX 程式碼如下。
在程式碼範例中,請注意下列事項:
  • LengthInMicroseconds 設定為 16,667 微秒。
  • PeriodInIntervals 設定為 2。
  • 常見的畫面間隔有各自的定義。在此範例中,定義為 D3D12XBOX_FRAME_INTERVAL_60_HZ。

PresentX 畫面排程

PresentX 可讓您正式控制 CPU 節流。在每個畫面上使用畫面排程會調整時序,讓間隔更為緊密。使用 PresentX 時,您會明確宣告等待。Present 中由圖形驅動程式執行的隱含執行階段節流已不復存在。 您可以使用以事件為基礎、由中斷驅動的排程來產生要顯示的新畫面。在畫面間隔內定義畫面原點時間,並根據統計資料中的工作負載持續更新原點。 下列程式碼範例顯示 ScheduleFrameEventX API。
圖 9 中使用的 ScheduleFrameEventX 程式碼如下。
呼叫 ID3D12Device::ScheduleFrameEventX 以建立畫面間隔內要節流 CPU 的時間。指定 D3D12XBOX_FRAME_EVENT_ORIGIN 的 Type 和 IntervalOffsetInMicroseconds 時間位移,以排程畫面的原點事件。CPU 會受到節流,直到間隔內經過指定的 IntervalOffsetInMicroseconds 時間量為止。 現在已有在畫面開始時觸發的事件,請輪詢或封鎖該畫面的管線 ORIGIN 事件。識別畫面的管線權杖現在由 WaitFrameEventX 建立。此權杖會傳遞至 PresentX。 下列程式碼範例顯示 WaitFrameEventX API。
在圖 9 的範例中,WaitFrameEventX 程式碼如下。
此範例程式碼顯示逾時設定為 0。管線權杖出現在最後。

PresentX 呈現

PresentX API 的一項新功能是可能達到雙重緩衝的延遲,即使已設定三重緩衝轉譯也一樣。這表示雖然您可以設定三重緩衝,但如果畫面能及時完成,就會維持雙重緩衝,直到超過畫面時間而需要三個畫面緩衝區為止。 此呼叫需要將 D3D12XBOX_FRAME_PIPELINE_TOKEN 作為 D3D12XBOX_PRESENT_PLANE_PARAMETERS 的一部分,以追蹤端對端延遲。PresentX 也支援從非同步計算佇列呈現。 如需詳細資訊,請參閱 Xfest 19 中關於將圖形移植到 XBOX Series X|S 的簡報。

畫面統計資料的逐步流程

圖 10. GetFrameStatisticsX。 GetFrameStatisticsX 圖 10 顯示 GetFrameStatisticsX API。 此程式碼著重於下列各項:
  • D3D12XBOX_FRAME_STATISTICS_TYPE_FRAME_INPUT
  • D3D12XBOX_FRAME_STATISTICS_TYPE_FRAME_INTERVAL
  • D3D12XBOX_FRAME_STATISTICS_TYPE_FRAME_EVENT
  • D3D12XBOX_FRAME_STATISTICS_TYPE_RENDER
  • D3D12XBOX_FRAME_STATISTICS_TYPE_PRESENT
  • D3D12XBOX_FRAME_STATISTICS_TYPE_DISPLAY
此流程從一個畫面開始,顯示其使用位置,然後說明其價值所在。 圖 11. 畫面統計資料:畫面開始。 畫面統計資料:畫面開始 圖 11 顯示畫面在圖形管線中開始處理的位置。 圖 12. 畫面統計資料:畫面原點已發出訊號。 畫面統計資料:畫面原點已發出訊號 圖 12 顯示畫面 ORIGIN 從何處發出訊號,以及何時呼叫 WaitFrameEventX。 圖 13. 畫面統計資料:D3D12XBOX_FRAME_EVENT_STATISTICS。 畫面統計資料:D3D12XBOX_FRAME_EVENT_STATISTICS 圖 13 顯示畫面事件統計資料可供使用的位置。如需詳細資訊,請參閱 D3D12XBOX_FRAME_EVENT_STATISTICS。 圖 14. 畫面統計資料:查詢輸入。 畫面統計資料:查詢輸入 圖 14 顯示查詢輸入的位置。模擬現在已準備好執行。 圖 15. 畫面統計資料:D3D12XBOX_INPUT_STATISTICS。 畫面統計資料:D3D12XBOX_INPUT_STATISTICS 圖 15 顯示處理輸入管線權杖的位置。 如需詳細資訊,請參閱 D3D12XBOX_INPUT_STATISTICS。 圖 16. 畫面統計資料:模擬完成。 畫面統計資料:模擬完成 圖 16 顯示模擬完成的時間點。 圖 17. 畫面統計資料:轉譯畫面。 畫面統計資料:轉譯畫面 圖 17 顯示 CPU 開始記錄並執行命令清單以轉譯畫面的位置。接著 GPU 開始處理命令清單以轉譯畫面。 圖 18. 畫面統計資料:PresentX。 畫面統計資料:PresentX 函式 圖 18 顯示 CPU 完成畫面轉譯時的 PresentX 呼叫。 圖 19. 畫面統計資料:GPU 到達最後一個 ResourceBarrier 轉換。 畫面統計資料:GPU 到達最後一個 ResourceBarrier 轉換 圖 19 顯示 GPU 到達 PresentX 中所使用之交換資源從寫入狀態進行的最後一個 ResourceBarrier 轉換的位置。 圖 20. 畫面統計資料:D3D12XBOX_RENDER_STATISTICS。 畫面統計資料:D3D12XBOX_RENDER_STATISTICS 圖 20 顯示從轉譯統計資料來看 GPU 完成寫入的位置。如需詳細資訊,請參閱 D3D12XBOX_RENDER_STATISTICS。 圖 21. 畫面統計資料:GPU 已觸發。 畫面統計資料:GPU 已觸發 圖 21 顯示 GPU 被觸發以進行呈現的位置。 圖 22. 畫面統計資料:D3D12XBOX_PRESENT_STATISTICS。 畫面統計資料:D3D12XBOX_PRESENT_STATISTICS 圖 22 顯示 GPU 轉譯結束時的呈現統計資料,以及資訊何時可供 CPU 擷取。如需詳細資訊,請參閱 D3D12XBOX_PRESENT_STATISTICS。 圖 23. 畫面統計資料:VBLANK 中斷。 畫面統計資料:VBLANK 中斷 圖 23 顯示與畫面間隔結束同時發生的下一個 VBLANK 中斷。已呈現的交換資源會翻轉至顯示器。 圖 24. 畫面統計資料:D3D12XBOX_DISPLAY_STATISTICS。 畫面統計資料:D3D12XBOX_DISPLAY_STATISTICS 圖 24 顯示顯示統計資料。如需詳細資訊,請參閱 D3D12XBOX_DISPLAY_STATISTICS。 圖 25. 畫面統計資料:D3D12XBOX_FRAME_INTERVAL_STATISTICS。 畫面統計資料:D3D12XBOX_FRAME_INTERVAL_STATISTICS 圖 25 顯示畫面間隔統計資料。如需詳細資訊,請參閱 D3D12XBOX_FRAME_INTERVAL_STATISTICS。 此流程會逐畫面提供可據以採取行動的延遲資料,讓您可以調整並縮短玩家按下控制器按鈕到顯示器上發生反應之間的時間差。

回應迅速的顯示器

現代顯示器會因下列因素而增加額外的延遲:
  • 傳輸額外負荷,也就是從 HDMI 纜線接收資料所需的時間。
  • 處理 4K 或更大影像所需的時間,包括製造商特有的影像增強功能。
  • 將影像縮放為顯示器原生解析度所需的時間。
  • 將畫面繪製到顯示器所需的時間。
  • 繪製選單、音量控制項或玩家控制顯示器可能需要之任何其他項目的覆疊所需的時間。

自動低延遲模式

自動低延遲模式 (ALLM) 是 HDMI 2.1 規格中定義的功能。ALLM 可讓視訊來源 (在這些範例中為 XBOX 主機) 指示所有相容元件進入低延遲模式。使用 ALLM 的顯示器會減少影像處理,以便在呈現影像前將延遲降到最低。這是系統層級的功能,與 VRR 類似。您不需要執行任何動作,但玩家必須確保已在主機的顯示設定中啟用 ALLM。XBOX One 和 XBOX Series X|S 都支援此功能。

120 Hz 顯示器

XBOX 支援 120 Hz 顯示器。由於 HDMI 傳輸速率與顯示器重新整理速率本質上相互關聯,因此對每秒 60 個畫面 (FPS) 的遊戲也有好處。

錯過 VBLANK

如果遊戲錯過 VBLANK,由於同一個轉譯畫面會顯示一次以上,玩家可能會感受到頓挫。在 60 Hz 顯示器上,這種頓挫最多可能持續 16.6 毫秒。如果遊戲在 120 Hz 顯示器上錯過 VBLANK (因為顯示器重新整理速率較快),頓挫可能只有 16.6 毫秒的一半,也就是最多 8.3 毫秒。 圖 26. 在 60 Hz 與 120 Hz 下錯過 VBLANK。 在 60 Hz 與 120 Hz 下錯過 VBLANK 圖 26 比較在 60 Hz 與 120 Hz 下錯過 VBLANK 的情況。錯過 VBLANK 時會發生頓挫,並增加一個畫面的延遲。在 120 Hz 顯示器上,VBLANK 發生得較快。下一個畫面也較快,與 60 Hz 顯示器相比,增加的延遲量大幅減少。

120 FPS 遊戲

有了 120 Hz 顯示器,XBOX Series X|S 就能實現 120 FPS 遊戲。下列程式碼示範如何將畫面間隔時間設定為 8,333 微秒,讓遊戲進入 120 Hz 模式。

VRR

VRR 是 HDMI 2.1 中定義的功能。使用 VRR 可在其支援的範圍內順暢地重新整理顯示器,例如在 30 Hz-120 Hz 之間,而不是強制以 60 Hz 為節奏。您不需要執行任何動作即可使用 VRR,不過在需要穩定重新整理的情況下 (例如選單、載入場景或過場動畫) 可以將其關閉。XBOX 目前支援 HDMI VRR 和 AMD FreeSync。XBOX One 支援 40-60 Hz 的範圍,但顯示器可能具備不同的 VRR 功能。實際上,系統可以順暢地呈現時間延長約 4 毫秒的畫面。

XBOX Series X|S 支援的重新整理速率

  • 120 Hz
  • 60 Hz
  • 40 Hz
  • 30 Hz
  • 20 Hz
  • 15 Hz

使用 VRR 時錯過 VBLANK

如先前所述,錯過 VBLANK 在 60 Hz 顯示器上可能產生最多 16.6 毫秒的頓挫,在 120 Hz 顯示器上則可能產生最多 8.3 毫秒的頓挫。不過,使用 VRR 時不會觀察到頓挫,因為顯示器的 VBLANK 會延遲到轉譯畫面完成為止。唯一的額外延遲是 VBLANK 被延遲的時間量,而不是固定的顯示器重新整理時間。 圖 27. 使用 VRR 時錯過 VBLANK。 使用 VRR 時錯過 VBLANK 圖 27 比較使用 60 Hz 顯示器的遊戲與已啟用 VRR 之遊戲的頓挫量。

40 FPS 遊戲

使用 120 Hz 顯示器可以實現 40 FPS 遊戲。系統會以 120 Hz 重新整理速率將同一個轉譯畫面傳輸三次。換句話說,在 40 FPS 時,畫面時間為 25 毫秒,系統會以 8.3 毫秒的重新整理速率將該畫面傳輸三次,即 25 毫秒。我們建議您支援 40 FPS 遊戲,因為與 30 FPS 相比,延遲可減少 8.3 毫秒。 下列程式碼範例示範如何將 40 FPS 遊戲的畫面間隔時間設定為 25,000 微秒。

摘要

控制器輸入延遲的改進帶來:
  • 更快速、更相關的控制器更新。
  • 降低作業系統額外負荷。
畫面排程的改進帶來:
  • 更直接的時序控制。
  • 更完善的畫面統計資料,以及改進的 PIX 輸入與圖形追蹤。
遊戲輸出延遲的改進帶來:
  • 新的顯示標準。
  • 更快的重新整理速率。
如需回應迅速之遊戲體驗的詳細資訊,請參閱下列範例。

後續步驟

如果您想要檢閱與此概觀相關之簡報資料中的資訊,請從 XBOX Developer Download Secure Data Storage (SDS) 下載下列檔案。
  • 投影片:Xfest 2019 Graphics Track PowerPoints ([2019.11]-Xfest2019GraphicsTrackPowerPoints.ZIP) 中的 XF2019_Graphics_04_Day1_Responsive_Gaming.pptx
  • 視訊簡報:Xfest 2019 Graphics Track Videos ([2019.11]-Xfest2019GraphicsTrackVideos.ZIP) 中的 XF2019_Graphics_04_Day1_Responsive_Gaming.mp4

下載 Microsoft PowerPoint 簡報和影片

  1. 前往 Game Development Kit (GDK) 下載。
  2. 在 Select file type 下,選取 Conference Materials,然後選取 Confirm。
  3. 在 Select build/version number 下,選擇下列其中一個圖形簡報。
    • Xfest 2019 Graphics Track PowerPoints
    • Xfest 2019 Graphics Track Videos
  4. 選取 Download Now,然後等候 .zip 檔案下載完成。
  5. 前往本機的 [下載] 資料夾,然後從壓縮資料夾中解壓縮 (擷取) 檔案。

下載本文中提及的 Microsoft Game Development Kit 主機範例

  1. 前往 Game Development Kit (GDK) 下載。
  2. 在 Select file type 下,選取 GDK,然後選取 Confirm。
  3. 在 Select build/version number 下,選擇最新的 Microsoft GDKX (Sample only) 選項。
  4. 選取 Download Now,然後等候 .zip 檔案下載完成。
  5. 前往本機的 [下載] 資料夾,然後從壓縮資料夾中解壓縮 (擷取) 檔案。
  6. 選取 GDKSamples > Graphics,然後搜尋範例。

另請參閱

進階 GameInput 主題 (目錄) GameInput 動態延遲輸入 遊戲串流延遲補償深入探討 XBOX One 上的畫面排程與呈現 XBOX Series X|S 圖形功能概觀 PIX PIX 整合
Last modified on October 6, 2026