一个用于在 RealityKit 中可视化边界框的 VisionOS 库


logo


多年以来,世界各地的 3D 软件工程师一直尝试解决一个看似简单的问题:“我的内容是否在正确的位置?”

你好,我叫 Ivan。过去一周,我一直斗争,并试图弄清楚,为什么我的 RealityKit 内容被剪辑了,而且整体不在正确的位置。

screenshot

在将彩色球体放在随机位置并进行故障排除的几天后,我得出结论,visionOS 预览中的体积以其当前形式而言是损坏的。剪辑内容的大小看似是任意的,其位置也是如此。我打开了一个雷达(FB13129449),希望能够解决这个问题,但这还意味着就目前而言,我们必须坚持使用功能齐全的模拟器。

如果不具备执行快速重新加载和调整的功能,“我的内容是否在正确的位置?”这个问题就会变得更加难以回答。虽然 Xcode 确实提供了有界框调试可视化,但它不是非常有帮助,因为它显示了模型和 OS 元素,却没有显示真正有用的东西:体积本身的边界。此外,如果你大胆地以与原始视图方向不一致的方式启动应用程序,则有界框不会与你的体积原点对齐,而是与 ARKit 的世界原点对齐(或者我猜测如此)。

因此,我决定创建一个小型实用工具,在每个角上绘制大型丑陋的块状方框,以便你可以辨别事物。它并不是非常复杂,但非常有用。此外,开源的好处在于我可以在自述文件中发牢骚。

如何使用它?

将 RealityBounds 导入你的项目 (文件 > 添加包依赖项...),然后将此存储库的 URL (https://github.com/IvanMathy/RealityBounds) 粘贴到右上角的搜索框中。

import SwiftUI
import RealityKit
import RealityBounds

struct GameWindow: View {
  var body: some View {
    RealityView { content in
      content.add(BoundsVisualizer())
    }
  }
}

screenshot

这就假定了你的体积是默认大小,如 [1, 1, 1]。如果不是,你可以轻松提供自定义尺寸:

content.add(BoundsVisualizer(bounds: [1,2,3]))

重要 请确保你先使用 .defaultSize(width: 1, height: 2, depth: 3, in: .meters) 调整窗口的大小。

screenshot

你还可以自定义指标的大小和长度,以更改边框的视觉外观:

content.add(BoundsVisualizer(bounds: [1,1,1], size: 0.01, length: 0.4))

screenshot

由于虚拟环境非常繁忙,默认颜色很容易丢失。你可以通过传递材质来更改指示器的颜色/材质:

let mat = UnlitMaterial(color: .green)
content.add(BoundsVisualizer(bounds: [1,1,1], material: mat))

screenshot

为什么它不在 Xcode 预览中工作?

因为预览剪辑的内容与体积窗口不同,我绞尽脑汁也想不出如何让它正常工作。我已按照前面提到的那样打开了一个雷达。

还有其他内容吗?

你应该 关注我的 Mastodon,因为那是我的主要发帖地点,涉及 visionOS 开发的内容。此外,我还以 @OKatBest 的 handle 现身于其他平台。

GitHub

visionOS