Подтвердить что ты не робот

IOS: проблема с молнией в файле USDZ

Я пытаюсь показать контент AR с QLPreviewController. Все отлично работает, кроме освещения. Если я предварительно просматриваю файл, используя быстрый просмотр Xcode или macOS, освещение становится естественным, но когда я просматриваю его, используя QLPreviewController, объект слишком темный !. Есть ли возможный способ отрегулировать освещение, масштаб и другие параметры?

4b9b3361

Ответ 1

Убедитесь, что ваша 3D-сетка имеет UV-макет при создании модели. Без UV трехмерный объект будет выглядеть темным на устройствах iOS и в QLPreviewController, хотя он может хорошо выглядеть на MacOS при использовании 3D или ARQuickLook.

Для получения дополнительной информации, пожалуйста, обратитесь по ссылке ниже:

https://forums.developer.apple.com/thread/107094

Например, если вы создаете модели с помощью Blender, это может помочь:

https://blender.stackexchange.com/questions/1022/adding-uv-mapping-to-mesh

Если вы откроете объект usdz в XCode, проверьте инспектор материалов, вы обнаружите, что цвет подсветки установлен на Черный. Поэтому в мире AR он выглядит темным, но в ARQuickLook он будет хорошо выглядеть.

Настройка UV-карты решит вашу проблему.

Другие попытки, которые я пробовал (Не рекомендуется):

1) Измените emissiveColor при создании модели USDZ.  Использование инструмента на основе Python (USDPython) для создания файла usdz.

https://developer.apple.com/download/more/?=USDPython

usdzconvert Model.obj -diffuseColor modelDiffuse.png -normal modelNormal.png -metallic 1 -roughness 1 -occlusion 1 -emissiveColor 0.5,0.5,0.5

2) Установите цвет подсветки на Белый.

Сначала конвертировать .usdz в .scn → изменить освещение → конвертировать .scn в .usdz

let scnScene = SCNScene(named: "sceneName", inDirectory: "art.scnassets", options: nil)

scnScene!.write(to: fileUrl.appendingPathComponent("Model.usdz"), delegate: nil)

Вы можете получить помощь в этом выступлении на WWDC (Экспорт USDZ из Scenekit):

https://developer.apple.com/videos/play/wwdc2019/602/

Ответ 2

В большинстве случаев, если вы используете следующий простой код, ваша модель .usdz выглядит нормально при использовании QLPreviewController:

import QuickLook
import ARKit

class ViewController: UIViewController,
                      UICollectionViewDelegate,
                      QLPreviewControllerDelegate,
                      QLPreviewControllerDataSource {

    override func viewDidAppear(_ animated: Bool) {
        let previewController = QLPreviewController()
        previewController.dataSource = self
        previewController.delegate = self
        present(previewController, animated: true, completion: nil)
    }

    func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
        return 1
    }

    func previewController(_ controller: QLPreviewController,
                    previewItemAt index: Int) -> QLPreviewItem {

        guard let path = Bundle.main.path(forResource: "toy_biplane",
                                               ofType: "usdz")
        else {
            fatalError("Couldn't find a file.")
        }
        let url = URL(fileURLWithPath: path)
        return url as QLPreviewItem
    }
}

Но иногда есть две возможные проблемы с освещением:

Проблема 1: низкий уровень освещения в сцене .usdz.

Решение 1: Если у вас возникают проблемы с уровнем освещения в вашей сцене, поэтому все текстуры на ваших 3D-моделях выглядят слишком темными, попробуйте добавить еще один источник света (.omni, .spot или .directional) в ваш файл .usdz. Помните, что по умолчанию освещение составляет 1000 люмен.


Проблема 2: проблемы с рендерингом на GPU, из-за чего все текстуры на модели .usdz выглядят черными. На данный момент нет официальной информации по этой теме, но многие разработчики жалуются, что существует проблема "черной текстуры" при рендеринге шейдеров PBR на моделях USDZ на некоторых устройствах. Так что, похоже, ошибка.

Решение 2: используйте другой шейдер (не .physicallyBased), например .blinn или .phong.