IOS: проблема с молнией в файле USDZ
Я пытаюсь показать контент AR с QLPreviewController
. Все отлично работает, кроме освещения. Если я предварительно просматриваю файл, используя быстрый просмотр Xcode или macOS, освещение становится естественным, но когда я просматриваю его, используя QLPreviewController
, объект слишком темный !.
Есть ли возможный способ отрегулировать освещение, масштаб и другие параметры?
Ответы
Ответ 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
.