混合现实捕获概述
注意
请参阅下面的从 PV 相机渲染,获取有关 HoloLens 2 新 MRC 功能的指导。
你可以随时拍摄混合现实捕获 (MRC) 照片或视频,但在开发应用程序时,请记住以下几点。 这包括有关 MRC 视觉质量,以及捕获 MRC 时响应系统更改的最佳做法。
开发人员还可以无缝地将混合现实捕获和插入集成到其应用中。
HoloLens(第一代)上的 MRC 支持最高 720p 的视频和照片,而 HoloLens 2 上的 MRC 支持高达 1080p 的视频和高达 4K 分辨率的照片。
MRC 质量的重要性
无论是 Microsoft Store 页面上的混合现实屏幕截图,还是其他用户在社交网络上共享的捕获内容,混合现实捕获媒体通常是用户首次接触应用的方式。 你可以使用 MRC 演示应用、培训用户、鼓励用户共享其混合世界交互,以及进行用户研究并解决问题。
MRC 如何影响应用
在应用中启用 MRC
默认情况下,要使用户进行混合现实捕获,应用不必执行任何操作。
在应用中为 MRC 启用改进的对齐方式
默认情况下,混合现实捕获将右眼的全息输出与照片/视频 (PV) 相机进行组合。 这两个源以当前运行的沉浸式应用设置的焦点进行组合。
这意味着,由于 PV 相机和右侧显示器之间的物理距离,焦点平面外部的全息影像无法对齐。
设置焦点
沉浸式应用(位于 HoloLens 上)应设置希望其稳定平面所在的焦点。 这可确保在头戴显示设备以及混合现实捕获中实现最佳对齐方式。
如果未设置焦点,则稳定平面默认为 2 米。
从 PV 相机渲染(选择启用)
HoloLens 2 针对沉浸式应用添加了当混合现实捕获正在运行时,从 PV 相机渲染的功能。 若要确保应用正确支持附加渲染,必须选择启用此功能。
与默认 MRC 体验相比,从 PV 相机渲染提供了以下改进:
- 在近距交互时,全息影像与物理环境和手部的对齐状态在所有距离处都应准确。 避免像在默认 MRC 中那样,在除焦点外的距离发生偏移。
- 头戴显示设备中的右眼不会受到影响,因为它不会用于渲染 MRC 输出的全息影像。
最佳实践(特定于 HoloLens)
MRC 应无需额外开发工作即可运行,但要获得最佳混合现实捕获体验,需要注意一些事项。
MRC 使用全息影像的 alpha 通道与相机图像融合
最重要的步骤是确保应用清除至透明黑色,而不是不透明黑色。 在 Unity 中,默认情况下使用 MixedRealityToolkit 完成此操作。 如果要在非 Unity 中开发,可能需要进行单行更改。
如果应用未清除至透明黑色,可能会在 MRC 中看到以下情况:
失败示例:内容周围出现黑边(无法清除至透明黑色)
失败示例:全息影像的整个背景场景显示为黑色。 将背景 alpha 值设置为 1 导致背景变为黑色
预期结果:全息影像与现实世界正确混合(如果清除至透明黑色,则为预期结果)
解决方案;
- 将显示为不透明黑色的任何内容的 alpha 值更改为 0。
- 确保应用清除至透明黑色。
- Unity 默认使用 MixedRealityToolkit 自动清除,但如果使用非 Unity 应用,你应修改与 ID3D11DeiceContext::ClearRenderTargetView() 一起使用的颜色。 要确保清除至透明黑色 (0,0,0,0),而不是不透明黑色 (0,0,0,1)。
现在,你可以根据需要调整资产的 alpha 值,但通常没有必要。 大多数情况下,MRC 可开箱即用。 MRC 假定预乘 alpha。 alpha 值仅影响 MRC 捕获。
在 HoloLens 上启用 MRC 时会发生什么情况
除非另有说明,否则以下内容适用于 HoloLens(第一代)和 HoloLens 2:
- 系统将应用程序渲染限制为 30-Hz。 这将为 MRC 创建一些运行空间,使应用无需保留恒定预留,并且还可以匹配 30 fps 的 MRC 视频录制帧速率
- 录制/流式传输 MRC 时,设备右眼中的全息影像内容可能“闪烁”:文本可能难以阅读,全息影像边缘可能参差不齐(在 HoloLens 2 上选择启用第三个相机渲染可避免这种影响)
- 如果应用程序启用了焦点,则 MRC 照片和视频将遵循应用程序的焦点,这有助于确保全息影像准确定位。 对于视频,焦点是平滑的,因此,如果焦点深度发生显著变化,全息影像可能会逐渐偏移。 与焦点处于不同深度的全息影像可能看起来与现实世界存在偏移量(请参阅以下示例,其中焦点设置为 2 米,而全息影像定位在 1 米)。
从应用内部集成 MRC 功能
混合现实应用可以从应用内部启动 MRC 照片或视频捕获,捕获的内容可供应用使用,而无需存储到设备的“相机交卷”中。你可以创建自定义 MRC 录制器,或利用内置的相机捕获 UI。
具有内置相机 UI 的 MRC
开发人员可以使用相机捕获 UI API 获取用户捕获的混合现实照片或视频,只需几行代码即可。
此 API 启动内置的 MRC 相机 UI(用户可以在其中拍摄照片或视频),并将生成的捕获返回到应用。 如果你需要添加自己的相机 UI 或用于捕获流的较低级别访问权限,可以创建自定义混合现实捕获录制器。
创建自定义 MRC 录制器
虽然用户始终可以使用系统 MRC 捕获服务触发照片或视频捕获,但应用程序可能需要构建自定义相机应用,该应用与 MRC 类似,在相机流中包括全息影像。 这样,应用程序可以启动用户输入的捕获、生成自定义录制 UI 或自定义 MRC 设置,仅举几例。
HoloStudio 使用 MRC 效果添加自定义 MRC 相机
Unity 应用程序应查看 Locatable_camera_in_Unity 以获取用于启用全息影像的属性。
其他应用程序可以通过使用 Windows 媒体捕获 API 来控制相机,并添加 MRC 视频和音频效果,以在静止和视频中包括虚拟全息影像和应用程序音频。
详细了解如何创建自定义 MRC 录制器 (DirectX)。
同时 MRC 限制
当多个应用同时访问 MRC 时,需要注意某些限制。
照片/视频相机访问
在 HoloLens 1 上,当进程录制视频或拍摄照片时,MRC 将无法捕获照片或视频。 反之亦然:如果 MRC 正在运行,应用程序将无法访问相机。
使用 HoloLens 2,可以共享对相机的访问权限。 如果不需要直接控制分辨率或帧速率,可以将 SharedMode 属性与 SharedReadOnly 结合用于初始化 MediaCapture。
内置 MRC 照片/视频相机访问权限
了解内置 MRC 照片/视频相机访问权限 (DirectX)。
开发人员的 MRC 访问权限
建议在使用 MRC 时始终请求相机的独占控制。 这可确保应用程序可以完全控制相机的设置,但前提是你了解上述限制。