Как уменьшить объем памяти, необходимый для просмотра объектов .usdz в AR? - PullRequest
0 голосов
/ 21 января 2019

Я играю с ARKit в Messages extension, и я могу загрузить и показать образцы файлов ТВ и Тачки, но я получаю предупреждения о памяти для ТВ, и это не так уж и много на самом деле.

Могу ли я использовать какие-либо методы, чтобы уменьшить требования к памяти для использования этого объектного файла? Это из подкласса 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 голосов
/ 05 июня 2019

Извините за поздний ответ, но решающее значение имеют разрешение текстур (не размер файла). Когда вы переименовываете файл .USDZ в .ZIP, вы можете разархивировать его и посмотреть, что внутри. Есть текстуры + .USDC файл. Текстуры здесь - это RGB (3B / px) или Greyscale (2B / px), и все они имеют размер 2k (2048px x 2048px).

Так, например, если у вас iPhone X с дисплеем сетчатки, который масштабирует каждую сторону изображения 3 раза, это означает, что устройству требуется (2048 * 3) * (2048 * 3) * 3 = 113 МБ оперативной памяти для отображения 2k RGB rexture.

Этот ретро-телевизор имеет четыре текстуры 2K RGB и четыре текстуры 2k Greyscale, мы можем рассчитать, что только текстуры являются приблизительными. (4 * 113 МБ) + (4 * 75 МБ) = 752 МБ ОЗУ.

Для получения дополнительной информации я настоятельно рекомендую WWDC видео .

...