你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

暂存空间

在提供头部跟踪数据(如 HoloLens 2)的设备上运行 ARR 时,会将头部姿态发送到用户应用程序和服务器。 在其中定义头部转换的空间称为暂存空间。

若要对齐本地和远程内容,假定客户端和服务器上的暂存空间和世界空间相同。 如果用户决定在相机顶部添加其他转换,则还需要将其发送到服务器以正确对齐本地和远程内容。

移动暂存空间的典型原因是世界锁定工具或其他真实世界定位点技术以及移动 VR 虚拟字符所需。

注意

试验:此功能为实验性功能,会随时间而更改。 因此,可能还需额外升级代码以更新到较新的客户端 SDK 版本。 在当前实现中,更改暂存空间源时,会在短时间内出现本地/远程内容不对齐的情况。

阶段空间最佳做法

由于该功能仍处于实验性,因此需要考虑一些注意事项。 每次更改阶段空间转换时,本地和远程内容将不再一致,直到客户端收到已合并新阶段空间转换的新视频帧。 因此,应考虑以下事项:

  1. 避免连续机车。 当连续机车更改阶段空间转换每个帧时,本地和远程内容将错位,直到机车停止。
  2. 首选远程传送。 为了更好地隐藏不对齐,请考虑在转换过程中立即使用淡到黑色,而不是对转换进行动画处理。

重要

桌面模拟中,相机的世界空间位置由用户应用程序提供。 在这种情况下,必须跳过暂存空间源设置,因为相机转换已成倍增加。

暂存空间设置

若要通知服务器会将其他转换应用于暂存空间,则需要发送按位置定义的源以及世界空间中的旋转。 可以通过“暂存空间设置”访问此设置。

void ChangeStageSpace(RenderingSession session)
{
    StageSpaceSettings settings = session.Connection.StageSpaceSettings;

    // Set position and rotation to the world-space transform of the stage space.
    settings.Position = new Double3(0, 0, 0);
    settings.Rotation = new Quaternion(0, 0, 0, 1);
}
void ChangeStageSpace(ApiHandle<RenderingSession> session)
{
    ApiHandle<StageSpaceSettings> settings = session->Connection()->GetStageSpaceSettings();

    // Set position and rotation to the world-space transform of the stage space.
    settings->SetPosition({0, 0, 0});
    settings->SetRotation({0, 0, 0, 1});
}

Unity 暂存空间脚本

Unity 集成提供了一个名为 StageSpace 的脚本,该脚本可添加到相机的父 GameObject。 成功添加后,此脚本将用于设置暂存空间源。

后续步骤