View a markdown version of this page

著色器快取 - Amazon GameLift Streams

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

著色器快取

透過著色器快取,您的應用程式可以略過未來串流工作階段中昂貴的著色器重新編譯。如果您的應用程式發生停滯或載入時間緩慢的情況,擷取著色器快取可以大幅改善最終使用者的體驗。

使用 Amazon GameLift Streams,您可以從特別指定的串流工作階段擷取著色器快取。所有相容串流群組中應用程式的後續串流工作階段會自動使用擷取的著色器快取。使用著色器快取功能不需要對應用程式進行任何程式碼或其他變更。

先決條件

若要使用著色器快取,您必須符合下列要求:

  • 串流群組必須在 2026 年 7 月 31 日當天或之後建立。在此日期之前建立的串流群組不支援著色器快取。

著色器快取的運作方式

遊戲等圖形應用程式受益於著色器快取。快取可避免重複的圖形相關處理和編譯工作。若要從指定的串流工作階段擷取著色器快取,Amazon GameLift Streams 會收集為您的應用程式自動產生的系統著色器快取檔案。服務會儲存此快取,並自動將其套用至相容串流群組的未來工作階段。這可減少在未來工作階段處理著色器所花費的時間。產生或使用著色器快取不需要變更您的應用程式。

著色器快取生命週期有三個階段:

  1. 擷取 – 您在啟用著色器快取擷取的情況下執行串流工作階段。在此工作階段期間,系統會將應用程式使用的著色器程式自動編譯至本機檔案系統快取。當您正常退出應用程式時,Amazon GameLift Streams 會封裝並上傳此本機快取。

  2. 複寫 – Amazon GameLift Streams 會將著色器快取複寫到串流群組的所有串流位置。您可以使用 ListApplicationShaderCaches API 操作來監控複寫狀態。

  3. 使用 – Amazon GameLift Streams 會自動下載著色器快取,並將其套用至相同應用程式的所有後續串流工作階段。著色器快取會用於所有相容的相關串流群組和串流位置。此行為預設為開啟。

擷取著色器快取

若要擷取著色器快取,請遵循下列步驟:

  1. 使用 StartStreamSession API 操作啟動串流工作階段。在請求中,在呼叫 StartStreamSession 時,將 GAMELIFT_STREAMS_PACKAGED_SHADER_CACHE_CAPTURE 設定為1額外的環境變數:

    { "AdditionalEnvironmentVariables": { "GAMELIFT_STREAMS_PACKAGED_SHADER_CACHE_CAPTURE": "1" } }
  2. 像平常一樣在工作階段期間使用您的應用程式。

  3. 完成後,從內建選單或使用其他內建結束命令,正常結束您的應用程式。這可確保著色器快取已準備好收集。

  4. 終止後,Amazon GameLift Streams 會封裝編譯的著色器快取,並開始複寫至所有相容相關聯串流群組的所有串流位置。

提示

在遊戲應用程式中,瀏覽不同的環境、內容和關卡會產生額外的著色器資料。您在擷取期間涵蓋的應用程式越多,著色器快取涵蓋範圍就越全面。改善涵蓋範圍可以進一步減少未來工作階段中的著色器處理時間。

重要

避免使用 TerminateStreamSession API 操作終止工作階段。如果您的應用程式沒有內建結束,請使用 串流工作階段管理員 shell功能遠端登入。然後,在確保應用程式處於閒置狀態且未轉譯新內容之後,停止應用程式程序。

產生著色器快取後,您可以透過啟動將 GAMELIFT_STREAMS_PACKAGED_SHADER_CACHE_CAPTURE設為 的進一步工作階段來改善它1。這些工作階段從現有的著色器快取開始,並產生更新版本。

著色器快取大小限制

小於 10 KB 或大於 4 GB (未壓縮) 的著色器快取會遭到拒絕。

著色器快取工作流程

當您為現有的 Amazon GameLift Streams 應用程式產生著色器快取時,所有相容的相關聯串流群組都會自動開始使用它。

若要在影響生產工作階段之前測試著色器快取,我們建議使用此方法:

  1. 建立個別的應用程式。

  2. 收集該應用程式的著色器快取。

  3. 使用新的串流工作階段驗證結果。

  4. 在生產設定中使用 應用程式。

著色器快取複寫

成功擷取後,Amazon GameLift Streams 會自動在應用程式相容相關聯串流群組中的每個作用中串流位置提供著色器快取。此複寫程序通常會在幾分鐘內完成。

您可以使用 ListApplicationShaderCaches API 操作來監控複寫進度。著色器快取Status欄位指出串流群組所有位置的彙總狀態。可能的狀態包括下列項目。

狀態 說明
INITIALIZED Amazon GameLift Streams 收到請求並正在準備著色器快取。
PROCESSING Amazon GameLift Streams 正在將著色器快取複寫至相關聯串流群組中的串流位置。
READY 著色器快取已複寫,可用於串流工作階段。
ERROR 著色器快取處理期間發生錯誤。建立新的著色器快取,然後再試一次。
DELETING Amazon GameLift Streams 正在刪除著色器快取。

當狀態為 時READY,著色器快取會自動套用至應用程式的所有新串流工作階段。

新佈建的串流容量會立即收到著色器快取。現有的串流群組容量最多可能需要一小時才能取得新的著色器快取。

停用著色器快取耗用量

根據預設,Amazon GameLift Streams 會在啟動應用程式之前下載並套用著色器快取。若要針對特定工作階段停用此行為,請設定下列環境變數:

{ "AdditionalEnvironmentVariables": { "GAMELIFT_STREAMS_PACKAGED_SHADER_CACHE_IGNORE": "1" } }

若要改善現有的著色器快取,請僅提供 GAMELIFT_STREAMS_PACKAGED_SHADER_CACHE_CAPTURE。若要捨棄現有的快取並收集全新的快取,請提供 GAMELIFT_STREAMS_PACKAGED_SHADER_CACHE_IGNOREGAMELIFT_STREAMS_PACKAGED_SHADER_CACHE_CAPTURE

著色器快取相容性

您可以將應用程式與多個串流群組建立關聯。若要了解應用程式目前與哪些串流群組相關聯,請使用 GetApplication API 操作並檢閱 AssociatedStreamGroups 欄位。

並非所有相關聯的串流群組都必須與收集的著色器快取相容。您可以使用 ListApplicationShaderCaches API 操作來判斷哪些相關聯的串流群組相容。在其回應中, AssociatedStreamGroups 欄位僅包含與著色器快取相容的關聯串流群組。

圖形硬體和驅動程式會決定系統編譯著色器程式的方式。因此,快取無法在不同硬體和軟體組態之間轉移。透過 Amazon GameLift Streams,著色器快取相容性取決於擷取期間使用的串流群組屬性:

  • 基礎圖形硬體 (GPU) 的確切模型

  • 已安裝的 GPU 驅動程式版本

實際上,這表示 Amazon GameLift Streams 著色器快取具有下列相容性限制。

  • 著色器快取不適用於使用不同 GPU 硬體的串流類別,這表示不同世代的串流類別。例如, gen5n_highgen6n_high 串流類別不相容,但 gen6n_highgen6n_ultra 不相容。同樣地, gen6n_progen6e_pro 也不相容。

  • 在已安裝不同 GPU 驅動程式版本的串流群組之間,著色器快取不相容。串流群組在生命週期內使用相同的 GPU 驅動程式版本,但新建立的版本可能會收到更新版本。如需 Amazon GameLift Streams 上目前適用於新串流群組的 GPU 驅動程式版本詳細資訊,請參閱 GPU 驅動程式版本

  • 著色器快取在 Windows、 Linux和 Proton執行時間之間不相容。

Amazon GameLift Streams 會自動判斷此相容性,並僅使用收集的著色器快取搭配相容的工作階段。

範例:不同世代的串流類別

您的應用程式與兩個串流群組相關聯:

  • 第一個串流群組使用串流類別 gen5n_high

  • 第二個串流群組使用 串流類別 gen6n_high

相同的著色器快取在這兩個不同世代的串流群組之間不相容。若要支援兩個串流群組,請為每個串流類別產生個別的著色器快取。

範例:不同的 GPU 驅動程式版本

您有一個使用 串流類別的gen6n_high串流群組,並已為其產生著色器快取。稍後您建立另一個串流群組,但仍使用相同的串流類別 gen6n_high

這個新的串流群組現在使用不同且較新的 GPU 驅動程式版本。透過使用 ListApplicationShaderCaches,您會發現新的串流群組未列在 下AssociatedStreamGroups。因此,現有的著色器快取與新的串流群組不相容。使用新的串流群組產生新的著色器快取。

對著色器快取問題進行故障診斷

  • ListApplicationShaderCaches 會顯示狀態 ERROR – 著色器快取處理期間發生錯誤。建立新的著色器快取,然後再試一次。

  • ListApplicationShaderCaches 不會列出新的著色器快取

    • 著色器快取太小或太大,無法收集。

    • 應用程式未正常結束。

    • 收集期間發生錯誤。

    建立新的著色器快取,然後再試一次。