使用电脑资源通过全息远程处理远程应用为应用提供支持
本文介绍全息远程处理的以下用例:
- 你希望电脑的资源为应用提供支持,而不是依赖于 HoloLens 板载资源:可以创建和生成具有全息远程处理功能的应用。 用户在 HoloLens 上体验应用,但应用实际上在电脑上运行,这允许应用利用电脑更强大的资源。 如果你的应用具有高分辨率资产或模型,并且你不希望帧速率受到影响,这尤其有用。 我们称之为 全息远程处理远程应用。 来自 HoloLens(凝视、手势、语音和空间映射)的输入将发送到电脑,其中内容以虚拟沉浸式视图呈现。 然后,呈现的帧将发送到 HoloLens。
这种类型的全息远程处理也适用于Windows Mixed Reality (WMR) 沉浸式头戴显示设备。 例如,如果 WMR 头戴显示设备已连接到背包电脑,并且你希望将应用从功能更强大的电脑流式传输到背包电脑,这可能很有用。
若要了解有关全息远程处理的详细信息,请参阅 全息远程处理概述
请注意,如果要 在开发过程中预览和调试应用,也可以使用全息远程处理。
全息远程处理中的两种可用模式
模式 1:在电脑上以连接模式运行的远程应用,在HoloLens 2上运行的播放器在侦听模式下运行。
当远程应用尝试连接时,播放器将侦听传入的连接。
模式 2:在电脑上以侦听模式运行的远程应用,在HoloLens 2以连接模式运行的播放器。
当玩家尝试连接时,远程应用侦听传入连接。
设置全息远程处理播放器应用
若要仅在模式 1 中使用全息远程处理,请在本文HoloLens 2 (上安装 Microsoft Store 中的全息远程处理播放器应用,我们将它称为“播放器”) 。 如下所述,下载并运行应用后,你将看到要连接到的版本号和 IP 地址。 建议使用最新版本的可用播放器。
全息远程处理需要快速的电脑和 Wi-Fi 连接。 可以在上面链接的 Player 文章中找到更多详细信息。
若要在上述两种模式下使用全息远程处理,需要克隆全息远程处理示例播放器,并使用 Visual Studio 将其部署到HoloLens 2。
使用 Unity 生成在电脑上运行的远程应用进行全息远程处理
在菜单栏上,选择“编辑>项目设置”。
在左侧列中,选择“ XR 插件管理”。
确保位于“通用 Windows 平台设置”选项卡中。
在“OpenXR 插件”部分中,选择“Microsoft HoloLens功能组”和“全息远程处理远程应用功能组”。
取消选中“启动时初始化 XR 检查”框。
编写一些代码以设置远程处理配置并触发 XR 初始化。 应用可以在模式 1 中调用 Connect 函数,也可以调用模式 2 的 Listen 函数。 若要查看示例,请下载 Open XR Unity 混合现实示例,然后在 RemotingSample 项目中查看AppRemoting.cs脚本。
对于模式 1(连接模式),使用填充的
RemotingConfiguration
调用Microsoft.MixedReality.OpenXR.Remoting.AppRemoting.Connect
。 示例应用在检查器中公开此内容,并演示如何从文本字段中填写 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 应用提供了一个可点击的多维数据集,如果点击该多维数据集,该多维数据集将断开远程处理会话的连接。
在上述模式下运行全息远程处理远程应用和播放器应用
模式 1:在电脑上以连接模式运行全息远程处理远程应用,在侦听模式下运行播放器:
如果播放器已从HoloLens 2的应用商店中安装,请跳过下面生成并运行示例播放器应用的步骤 2 和 3。 请改为运行已安装的 Player 并继续执行步骤 4。
使用 VS 2019 打开全息远程处理示例播放器应用,然后执行下列作之一:
若要使用 USB 电缆在HoloLens 2上运行,
- 配置生成选项,如下所示:
- 打开项目的 “属性” 页,然后导航到 “配置属性>调试”。
- 单击 “调试器”以启动 下拉列表,然后选择“ 设备”。
- 在 “命令行参数” 字段中,添加“-listen”。
若要使用 Wifi 在HoloLens 2上运行,
- 配置生成选项,如下所示:
- 打开项目的 “属性” 页,然后导航到 “配置属性>调试”。
- 单击 “调试器”以启动 下拉列表,然后选择“ 远程计算机”。
- 在 “命令行参数” 字段中,添加 HoloLens 的 Wifi IP 地址。
若要将 SamplePlayer 解决方案部署到HoloLens 2,请按 Visual Studio 中的播放按钮。 你将能够看到在 HoloLens 2 上运行的 HAR 示例播放器,显示它正在“正在等待HoloLens 2 IP 地址的连接”。
在主机电脑上运行的远程应用中,添加上面显示的HoloLens 2的 IP 地址,然后选择“连接”。
建立连接后,HoloLens 2上运行的播放器将开始“接收”。
模式 2:在电脑上以侦听模式运行远程应用,在连接模式下运行 HAR 播放器应用:
在电脑上运行的远程应用中的 2D UI 屏幕上,单击“ 侦听”。
打开项目的 “属性” 页,然后导航到 “配置属性>调试”。
单击 “调试器”以启动 下拉列表,然后选择“ 设备”。
在 “命令行参数” 字段中,添加主机电脑的 IP 地址。
若要将 SamplePlayer 解决方案部署到 HoloLens 2,请在 Visual Studio 解决方案中单击“播放”按钮。 你将能够看到在HoloLens 2上运行的 HAR 示例播放器,显示它是“连接到命令行参数中给定的 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) |
Unity Engine。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 |
通过RemotingConfiguration 结构传入AppRemoting.Connect |
WindowsMRRemoting.isConnected |
AppRemoting.TryGetConnectionState(out ConnectionState state, out _) && state == ConnectionState.Connected |