ARKit 调试小技巧

1,388 阅读3分钟

说明

AR 开发中,调试一直是个有点难度的事情,不过好在苹果给我们提供了很多工具,来帮助我们进行 debug,本文做一个简单的总结。

ARKit 自带调试与统计

ARKit 自带了一些 debug 选项,我们只需要打开showWorldOrigin,就能看到 AR 原点的位置和姿态,随时观察 AR 效果是否有偏移和抖动;打开showFeaturePoints就能看到相机捕捉到的特征点。同时,又因为 ARKit 继承于 SceneKit,所以也有很多关于渲染的选项,比如显示物体的边界盒showBoundingBoxes可以帮助我们快速找到一些较小的物体。

scnView.debugOptions =  [showWorldOrigin, showFeaturePoints];
/** 展示 AR 中的世界坐标原点 */
    public static let showWorldOrigin: SCNDebugOptions
    /** 展示检测到的 3D 特征点*/
    public static let showFeaturePoints: SCNDebugOptions

    public static var showPhysicsShapes: SCNDebugOptions { get } //展示物体的物理形状

    public static var showBoundingBoxes: SCNDebugOptions { get } //展示物体的边界盒

    public static var showLightInfluences: SCNDebugOptions { get } //展示物体受到灯光的影响

    public static var showLightExtents: SCNDebugOptions { get } //展示灯光范围

    public static var showPhysicsFields: SCNDebugOptions { get } //展示 SCNPhysicsFields 的力和范围

    public static var showWireframe: SCNDebugOptions { get } //展示物体及其线框

    public static var renderAsWireframe: SCNDebugOptions { get } //将物体渲染为线框


    public static var showSkeletons: SCNDebugOptions { get } //展示骨骼

    public static var showCreases: SCNDebugOptions { get } //展示曲面细分

    public static var showConstraints: SCNDebugOptions { get } //展示约束

    public static var showCameras: SCNDebugOptions { get } //展示相机(在 AR 中无用,因为手机就是相机,手机无法看到自己)

另一个有用的选项是显示统计信息,打开后会在最下面展示一个统计条,打击可以展示,查看更多详细信息。不要小看它,当你在 AR 中显示了很多小物体,用肉眼不容易发现时,这个统计可以方便地显示出当前屏幕上物体的多少。

scnView.showsStatistics = true

断点

可能大家会感到疑惑,断点谁都会,这也算?是的,但是在 Xcode 中对断点做了增强,断点不仅只是停在那里,供开发者查看当前各个变量的值,还可以直接以图形方式预览,如 SCNScene, SCNNode, CLLocation, SCNMaterial 及其各种可图形化展示的类型:

a color (NSColor, UIColor, CGColorRef), 
an image (NSImage, UIImage, CGImageRef), 
a layer (CALayer), a SpriteKit scene (SKScene), 
a texture (SKTexture, id<MTLTexture> or GLKTextureInfo)

只要动手打个断点,再点击一下这个小眼睛图标,就直观看到相关内容:

层级图

层级图,也有很多人把它叫面包图,也是一个好工具,惟一不好的是在某些项目中经常会预览失败甚至直接导致 Xcode 崩溃。这时不妨先点击一下那个照相机图标(即Geometry viewer),然后退出,再进入层级图,打击 SCNScene,就能看到 3D 场景了: 同时也可以点击界面上的选项,打开更多调试。比如调试 Shader:

几何体查看器 Geometry viewer

这个是苹果力推的调试工具,可以深入调试 GPU 上的各种问题,由于比较复杂,几乎每年 WWDC 都会讲到相关应用。我原来也写过 WWDC 的总结:
3D与AR/VR应用Debug与优化浅谈
3D与AR/VR应用Debug与优化再谈

Game Performance Template

游戏性能模板,它更多侧重于性能的优化,详见WWDC2018: Metal游戏性能优化