如何减少在AR中查看.usdz对象所需的内存?

时间:2019-01-21 20:15:55

标签: ios arkit

我正在Messages extension中使用ARKit进行游戏,并且能够加载并显示示例电视和独轮车文件,但是我收到了电视的内存警告,并且它的确不是那么大。

我是否可以使用任何技术来减少使用此目标文件的内存需求?这是来自SCNNode的子类。

func loadModel() {
    let bundle = Bundle(for: VirtualObject.self)
    guard let fileURL = bundle.url(forResource: "retrotv", withExtension: "usdz")
        , let modelNode = SCNReferenceNode(url: fileURL)
        else { return }

    modelNode.load()
    modelNode.scale = SCNVector3(0.005, 0.005, 0.005)

    self.addChildNode(modelNode)
    modelLoaded = true
}

其余代码来自使用Apple的UIKit示例。

1 个答案:

答案 0 :(得分:0)

很抱歉无法提供最新答案,但至关重要的是纹理分辨率(不是文件大小)。将.USDZ文件重命名为.ZIP时,您实际上可以将其解压缩并查看其中的内容。有纹理+ .USDC文件。这里的纹理是RGB(3B / px)或灰度(2B / px),它们都是2k(2048px x 2048px)。

因此,例如,如果您的iPhone X的视网膜显示屏将图像的每一侧缩放3倍,则意味着该设备需要显示(2048 * 3)*(2048 * 3)* 3 = 113MB的RAM内存2k RGB反射。

这款复古电视具有四个2k RGB纹理和四个2k灰度纹理,我们可以计算出单独的纹理是近似的。 (4 * 113MB)+(4 * 75MB)= 752MB RAM。

有关更多信息,我强烈推荐此WWDC video