轉譯模式
遠端轉譯提供兩種主要作業模式: TileBasedComposition 模式和 DepthBasedComposition 模式。 這些模式會決定工作負載如何分散到伺服器上的多個 GPU。 模式必須在連線時間指定,而且無法在執行時間期間變更。
這兩種模式都有優點,但也具有固有的功能限制,因此挑選最適合的模式是特定使用案例。
模式
現在會更詳細地討論這兩種模式。
'TileBasedComposition' 模式
在 TileBasedComposition 模式中,每個相關的 GPU 都會在畫面上轉譯特定的子物件(磚)。 主要 GPU 會在將磚作為視訊畫面傳送至用戶端之前,先從磚撰寫最終影像。 因此,所有 GPU 都需要有一組相同的資源才能轉譯,因此載入的資產必須符合單一 GPU 的記憶體。
此模式中的轉譯品質略高於 DepthBasedComposition 模式,因為 MSAA 可以處理每個 GPU 的完整幾何集。 下列螢幕擷取畫面顯示反鋸齒同樣適用于這兩個邊緣:
此外,在此模式中,每個部分都可以切換至透明材質,或透過階層式StateOverrideComponent 切換到 檢視 模式
'DepthBasedComposition' 模式
在 DepthBasedComposition 模式中,每個相關的 GPU 都會以全螢幕解析度轉譯,但只有網格子集。 主要 GPU 上的最終影像組合會負責根據元件深度資訊正確合併。 當然,記憶體承載會分散在 GPU 上,因此允許轉譯不符合單一 GPU 記憶體的模型。
每個 GPU 都會使用 MSAA 來反鋸齒本機內容。 不過,在不同 GPU 的邊緣之間可能會有固有的別名。 此效果可藉由後置處理最終影像來減輕,但 MSAA 品質仍然比 TileBasedComposition 模式更差。
下圖說明 MSAA 成品:
反鋸齒在雕塑和窗簾之間正常運作,因為兩個部分都呈現在相同的 GPU 上。 另一方面,幕牆之間的邊緣會顯示一些鋸齒,因為這兩個部分是由不同的 GPU 所組成。
此模式的最大限制是,幾何部分無法動態切換為透明材質,也無法 讓階層式StateOverrideComponent 的檢視 模式運作 。 不過,其他狀態覆寫功能(外框、色彩色調...)可以正常運作。 此外,在轉換時間標示為透明的材質也會在此模式中正常運作。
效能
這兩種模式的效能特性會根據使用案例而有所不同,而且很難推理或提供一般建議。 如果您不受上述限制的限制(記憶體或透明度/查看),建議您嘗試這兩種模式,並使用各種相機位置來監視效能。
設定轉譯模式
透過 在 期間 RenderingSession.ConnectAsync
,會指定 RendererInitOptions
遠端轉譯伺服器上所使用的轉譯模式。
async void ExampleConnect(RenderingSession session)
{
RendererInitOptions parameters = new RendererInitOptions();
// Connect with one rendering mode
parameters.RenderMode = ServiceRenderMode.TileBasedComposition;
await session.ConnectAsync(parameters);
session.Disconnect();
// Wait until session.IsConnected == false
// Reconnect with a different rendering mode
parameters.RenderMode = ServiceRenderMode.DepthBasedComposition;
await session.ConnectAsync(parameters);
}
API 文件
- C# 轉譯Session。連線Async()
- C# RendererInitOptions 結構
- C++ RenderingSession::連線To連線AsyncRuntime()
- C++ RendererInitOptions 結構