使用計算機資源透過全像攝影遠端應用程式為您的應用程式提供電源
本文說明下列全像攝影遠端處理的使用案例:
- 您想要讓電腦的資源為您的應用程式提供支援,而不是依賴 HoloLens 上線資源:您可以建立並建置具有全像攝影遠端功能的應用程式。 使用者會在 HoloLens 上體驗應用程式,但應用程式實際上會在電腦上執行,這可讓應用程式利用電腦更強大的資源。 如果您的應用程式具有高解析度資產或模型,而且您不想讓幀速率受到影響,這會特別有用。 我們將此稱為 全像攝影遠端應用程式。 來自 HoloLens 的輸入 --注視、手勢、語音和空間對應--會傳送至計算機,內容會在虛擬沉浸式檢視中呈現。 轉譯的框架接著會傳送至 HoloLens。
這種類型的全像攝影遠端功能也適用於 Windows Mixed Reality (WMR) 沉浸式頭戴裝置。 例如,如果您的 WMR 頭戴式裝置已連線到一台新的電腦,而且您想要將應用程式從功能更強大的電腦串流至虛擬電腦,這會很有用。
若要深入瞭解全像攝影遠端,請參閱 全像攝影遠端處理概觀
請注意, 如果您想要在開發程式期間預覽和偵錯應用程式,也可以使用全像攝影遠端處理。
全像攝影遠端的兩個可用模式
模式 1:在計算機上以連線模式執行的遠端應用程式、以接聽模式在 HoloLens 2 上執行的 Player。
Player 會在遠端應用程式嘗試連線時接聽連入連線。
模式 2:在電腦上以接聽模式執行的遠端應用程式、在連線模式中 HoloLens 2 上執行的 Player。
當 Player 嘗試連線時,遠端應用程式會接聽連入連線。
設定全像攝影遠端播放機應用程式
若要單獨在模式 1 中使用全像攝影遠端處理,請在本文的 HoloLens 2 (上,從 Microsoft Store 安裝 Holographic Remoting Player 應用程式,我們將它稱為「播放器」) 。 如下所述,下載並執行應用程式之後,您會看到要連線的版本號碼和IP位址。 建議您使用最新版的 Player。
全像攝影遠端處理需要快速的計算機和 Wi-Fi 連線。 您可以在上面連結的 Player 文章中找到更多詳細數據。
若要在上述兩種模式中使用全像攝影遠端處理,您必須複製全像攝影遠端處理範例播放程式,並使用 Visual Studio 將它部署到 HoloLens 2。
使用 Unity 建置在電腦上執行以進行全像攝影遠端處理的遠端應用程式
在功能表欄上,選取 [ 編輯 > 項目設定]。
在左側數據行中,選取 [XR 外掛程式管理]。
確定您位於 [通用 Windows 平台 設定] 索引標籤中。
在 [OpenXR 外掛程式] 區段中,選 Microsoft HoloLens 功能群組和全像攝影遠端應用程式功能群組。
取消選取 [ 在啟動時初始化 XR ] 複選框。
撰寫一些程式代碼來設定遠端設定並觸發 XR 初始化。 應用程式可以呼叫模式 1 的 Connect 函式,或呼叫 Mode 2 的 Listen 函式。 若要查看範例,請下載我們的 Open XR Unity Mixed Reality 範例,然後在 RemotingSample 專案中檢視AppRemoting.cs腳本。
針對模式 1 的連線模式,請使用填入的
RemotingConfiguration
呼叫Microsoft.MixedReality.OpenXR.Remoting.AppRemoting.Connect
。 範例應用程式會在 Inspector 中公開此資訊,並示範如何從文字字段填入 IP 位址。 呼叫Connect
會設定組態並自動初始化 XR,這就是為什麼它必須呼叫為協同程式的原因:StartCoroutine(Remoting.AppRemoting.Connect(remotingConfiguration));
針對模式 2 的接聽模式,以填入的
RemotingListenConfiguration
呼叫Microsoft.MixedReality.OpenXR.Remoting.AppRemoting.Listen
。 範例應用程式會在偵測器中公開此資訊。 呼叫Listen
會設定組態,並等候來自全像攝影遠端處理範例播放程序的連線,這就是為什麼它必須呼叫為協同程式的原因:StartCoroutine(Remoting.AppRemoting.Listen(remotingListenConfiguration));
執行時,您可以使用 API 取得目前的連線狀態
AppRemoting.TryGetConnectionState
,並選擇性地使用AppRemoting.Disconnect()
中斷連線並取消初始化 XR。 這可用來中斷連線,並重新連線到相同應用程式會話內的不同裝置。 RemotingSample 應用程式提供可套用的 Cube,在點選時會中斷遠端會話的連線。
以上述模式執行全像攝影遠端應用程式和 Player 應用程式
模式 1:在電腦上以連線模式執行全像攝影遠端應用程式,並在接聽模式中執行播放機:
如果 Player 已從 HoloLens 2 上的市集安裝,請略過您建置並執行範例播放機應用程式的下方步驟編號 2 和 3。 請改為執行已安裝的 Player,並繼續進行步驟 4。
使用 VS 2019 開啟全像攝影遠端處理範例播放機應用程式,然後執行下列其中一項:
若要使用 USB 纜線在 HoloLens 2 上執行:
- 設定組建選項,如下所示:
- 開啟專案的 [ 屬性 ] 頁面,然後流覽至 [ 組態屬性>偵錯]。
- 按兩下 [ 除錯程式] 以啟動 下拉式清單,然後選取 [ 裝置]。
- 在 [ 命令行自變數 ] 字段中,新增 “-listen”。
若要使用 Wifi 在 HoloLens 2 上執行:
- 設定組建選項,如下所示:
- 開啟專案的 [ 屬性 ] 頁面,然後流覽至 [ 組態屬性>偵錯]。
- 按兩下 [ 除錯程式] 以啟動 下拉式清單,然後選取 [ 遠端電腦]。
- 在 [ 命令行 自變數] 字段中,新增 HoloLens 的 Wifi IP 位址。
若要將 SamplePlayer 解決方案部署至 HoloLens 2,請在 Visual Studio 中按 [播放] 按鈕。 您將能夠看到 HAR 範例播放程式在 HoloLens 2 上執行,並顯示其為「正在等候 HoloLens 2 IP 位址上的連線」。
在主計算機上執行的遠端應用程式中,新增上方顯示 HoloLens 2的IP位址,然後選取 [連線]。
建立連線之後,在 HoloLens 2 上執行的 Player 將會開始「接收」。
模式 2:在您的電腦上以接聽模式執行遠端應用程式,並在連線模式中執行 HAR 播放程式應用程式:
在計算機上執行之遠端應用程式的 2D UI 畫面上,按兩下 [ 接聽]。
開啟專案的 [ 屬性 ] 頁面,然後流覽至 [ 組態屬性>偵錯]。
按兩下 [ 除錯程式] 以啟動 下拉式清單,然後選取 [ 裝置]。
在 [ 命令行 自變數] 字段中,新增主計算機的IP位址。
若要將 SamplePlayer 解決方案部署到 HoloLens 2,請在 Visual Studio 方案中,按兩下 [播放] 按鈕。 您將能夠看到 HAR 範例播放程式在 HoloLens 2 上執行,並顯示其為「連線至命令行自變數中指定的 IP 位址」。
建立連線之後,在 HoloLens 2 上執行的全像攝影遠端範例播放機應用程式將會開始「接收」。
提示
若要獲得最佳結果,請確定您的應用程式正確設定 。/focus point。 這有助於全像攝影遠端處理,以最適合您的場景來適應無線連線的延遲。
從先前的全像攝影遠端 API 移轉
若要深入瞭解全像攝影遠端,請參閱 全像攝影遠端處理概觀
UnityEngine.XR.WSA.HolographicRemoting
從 Unity 檔上的範例程式代碼:
XR。WSA。HolographicRemoting | OpenXR.Remoting.AppRemoting |
---|---|
HolographicRemoting.ConnectRemotingSession() |
AppRemoting.Connect(RemotingConfiguration) |
HolographicRemoting.DisconnectRemotingSession() |
AppRemoting.Disconnect() |
HolographicRemoting.ConnectionState |
AppRemoting.TryGetConnectionState(out ConnectionState, out DisconnectReason) |
UnityEngine。XR。WindowsMR。WindowsMRRemoting
XR。WindowsMR。WindowsMRRemoting | OpenXR.Remoting.AppRemoting |
---|---|
WindowsMRRemoting.Connect() |
AppRemoting.Connect(RemotingConfiguration) |
WindowsMRRemoting.Listen() |
AppRemoting.Listen(RemotingListenConfiguration) |
WindowsMRRemoting.Disconnect() |
AppRemoting.Disconnect() |
WindowsMRRemoting.TryGetConnectionState(out ConnectionState) 和 WindowsMRRemoting.TryGetConnectionFailureReason(out ConnectionFailureReason) |
AppRemoting.TryGetConnectionState(out ConnectionState, out DisconnectReason) |
WindowsMRRemoting.isAudioEnabled , WindowsMRRemoting.maxBitRateKbps , WindowsMRRemoting.remoteMachineName |
透過結構傳入AppRemoting.Connect RemotingConfiguration |
WindowsMRRemoting.isConnected |
AppRemoting.TryGetConnectionState(out ConnectionState state, out _) && state == ConnectionState.Connected |