Class MetaXRFrameSource
- 命名空间
- easyar
- 程序集
- EasyAR.Sense.Ext.MetaXR.dll
在场景中将 Meta XR 的输出连接到 EasyAR 输入的自定义 frame source。通过 EasyAR Sense 的自定义相机功能提供 Meta XR 支持。
这个 frame source 是一种运动跟踪设备,在 ARSession 中会输出运动数据。
为了使用这个 frame source, Meta MRUK (Mixed Reality Utility Kit) 是必需的。你需要根据官方文档配置 Meta MRUK。
public class MetaXRFrameSource : ExternalDeviceMotionFrameSource
- 继承
-
MetaXRFrameSource
- 继承成员
字段
ConfigurePassthroughCamera
是否在运行时配置 Meta.XR.PassthroughCameraAccess。启用时,frame source 会在启动相机前选择合适的相机位置和分辨率。禁用时,将保留 Meta.XR.PassthroughCameraAccess 上的设置。
public bool ConfigurePassthroughCamera
MaxCameraInputFrameRate
向 EasyAR 输入相机数据的最大帧率。此设置不会改变渲染帧率或 Meta.XR.PassthroughCameraAccess 相机帧率。
受 Meta Meta.XR.PassthroughCameraAccess 接口限制,相机数据获取会受到相机更新时序和 GPU 回读延迟的影响,因此实际输入帧率可能低于此值。
EasyAR 相机输入帧率对启用融合模式的图像跟踪、物体跟踪以及其他 EasyAR 功能影响较小,但不建议将该值设为 5 以下。
[Min(1)]
public int MaxCameraInputFrameRate
PreferPreciseCameraTimestamp
是否优先使用可用的 MRUK 精确单调相机时间戳。
目前 MRUK 尚未通过 EasyAR 可用的公共接口提供该时间戳,启用此选项时会通过反射访问私有字段。构建时会进行部分兼容性检查,但无法覆盖所有情况,未来 MRUK 版本变化仍可能导致该路径失效。如果禁用此选项或精确路径不可用,将回退到公开时间戳方案,时间同步精度可能降低。建议保持启用;仅在排查兼容性问题时禁用。
public bool PreferPreciseCameraTimestamp
属性
AvailableCenterMode
仅当创建一个新的frame source时提供。它仅会在Assemble()过程中被访问。
所有可以使用的中心模式。
protected override IReadOnlyList<ARSession.ARCenterMode> AvailableCenterMode { get; }
Camera
仅当创建一个新的frame source时提供。它仅会在Assemble()过程中被访问。
在桌面设备或手机上,该相机代表现实环境中相机设备在虚拟世界中对应的Camera,其投影矩阵和位置都将与真实相机对应,受EasyAR控制。在头显上,该相机仅用于将一些诊断文字展示在眼前,不用于画面渲染,相机也不受EasyAR控制。
protected override Camera Camera { get; }
CameraFrameStarted
仅当创建一个新的frame source时提供。它会在ARSession的整个生命周期内被访问。
相机帧是否开始输入。
protected override bool CameraFrameStarted { get; }
CameraRigCandidate
用于获取渲染相机和 tracking origin 的可选 OVRCameraRig。未指定时,frame source 会在场景中自动查找。
public OVRCameraRig CameraRigCandidate { get; set; }
DeviceCameras
仅当创建一个新的frame source时提供。它会在CameraFrameStarted为true时被访问。
提供相机帧数据的设备相机。如果相机帧数据由多个相机提供,列表中需要包含所有相机。
确保在CameraFrameStarted为true时数值正确。
protected override List<FrameSourceCamera> DeviceCameras { get; }
Display
仅当创建一个新的frame source时提供。它仅会在Assemble()过程中被访问。
提供显示系统信息。你可以使用DefaultSystemDisplay或DefaultHMDDisplay来获取默认的显示信息。
protected override IDisplay Display { get; }
IsAvailable
仅当创建一个新的frame source时提供。它仅会在Assemble()过程中被访问。
当前frame source是否可用。
如果数值等于null,CheckAvailability()会被调用,数值将在Coroutine结束后获取。
protected override Optional<bool> IsAvailable { get; }
IsHMD
仅当创建一个新的frame source时提供。它仅会在Assemble()过程中被访问。
当前frame source是否是头显。如果是头显,诊断信息将显示在相机前的3D板子上。
部分frame filter在设备上运行会有不同。
protected override bool IsHMD { get; }
Origin
设备原点。你需要在OriginType为Custom时定义自己的原点,其它时候不需要重新定义。
protected override GameObject Origin { get; }
OriginType
设备原点类型。
protected override ExternalDeviceFrameSource.DeviceOriginType OriginType { get; }
PassthroughCameraAccessCandidate
可选的 PassthroughCameraAccess 组件。未指定时,frame source 会在场景中自动查找。
public PassthroughCameraAccess PassthroughCameraAccessCandidate { get; set; }
方法
OnSessionStart(ARSession)
仅当创建一个新的frame source时提供。它仅会在StartSession()过程中被访问。
处理session启动,如果这个frame source已经组装进Assembly。这个方法设计上是用来做延迟初始化的,你可以在这个方法中做AR独有的初始化工作。
protected override void OnSessionStart(ARSession session)
参数
session
OnSessionStop()
仅当创建一个新的frame source时提供。它会在StopSession(bool)或其它session停止/损坏过程中被访问。
处理session停止,如果这个frame source已经组装进Assembly。你可以使用这个方法销毁StartSession()以及session运行中创建的资源并恢复内部状态。在session销毁之前这个方法会被保证调用。如果frame source在sessino之前销毁,它将不会被调用,且session将损坏。
protected override void OnSessionStop()