Swift iOS:USDZ文件中的lightning问题

Swift iOS:USDZ文件中的lightning问题,swift,augmented-reality,arkit,qlpreviewcontroller,arquicklook,Swift,Augmented Reality,Arkit,Qlpreviewcontroller,Arquicklook,我正在尝试使用qlviewcontroller显示AR内容。除了灯光外,一切都很好。如果我使用Xcode或macOS的quick look预览文件,灯光是自然的,但是当我使用QLPreviewController预览文件时,对象太暗了!。 是否有任何可能的方法来调整照明、比例和其他设置?请确保在创建模型时3D网格具有UV布局。如果没有UV,3D对象在iOS设备和QLPreviewController中会显示为黑色,但在MacOS上使用3D或ARQuickLook时可能会显示为良好 有关更多信息,

我正在尝试使用
qlviewcontroller
显示AR内容。除了灯光外,一切都很好。如果我使用Xcode或macOS的quick look预览文件,灯光是自然的,但是当我使用
QLPreviewController
预览文件时,对象太暗了!。
是否有任何可能的方法来调整照明、比例和其他设置?

请确保在创建模型时3D网格具有UV布局。如果没有UV,3D对象在iOS设备和QLPreviewController中会显示为黑色,但在MacOS上使用3D或ARQuickLook时可能会显示为良好

有关更多信息,请参阅以下链接:

例如:如果您使用Blender创建模型,这可能会有帮助:

如果在XCode中打开usdz对象,请检查材质检查器,您将发现照明颜色设置为黑色。这就是为什么它在AR世界中看起来很暗,但在ARQuickLook中看起来很好

设置UV贴图将解决您的问题

我尝试过的其他黑客方法有(不推荐使用):

1) 创建USDZ模型时更改emissiveColor。 使用基于Python的工具(USDPython)生成usdz文件

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讲座中获得帮助(从Scenekit导出USDZ):

在Xcode 12中没有此类问题
AR QuickLook
框架基于RealityKit渲染引擎
AR QuickLook
具有仅控制模型负载的最小参数。AR场景中没有用于控制照明的参数。AR QuickLook从RealityKit继承了自动光照估计。在Xcode 12.1中,我没有看到呈现未亮(黑色)模型的bug。您可以使用以下代码快速测试它:

import QuickLook

class ViewController: UIViewController,
                      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: "path/to/gramophone",
                                               ofType: "usdz")
        else {
            fatalError("Couldn't find a file.")
        }
        let url = URL(fileURLWithPath: path)
        return url as QLPreviewItem
    }
}
p.S.


如果您仍在使用未点亮的PBR型号时遇到问题–这不是
AR QuickLook
的问题,而是您的USDZ型号的问题。

我可以知道您是如何创建该型号的吗?请共享代码以获得更多信息吗?
import QuickLook

class ViewController: UIViewController,
                      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: "path/to/gramophone",
                                               ofType: "usdz")
        else {
            fatalError("Couldn't find a file.")
        }
        let url = URL(fileURLWithPath: path)
        return url as QLPreviewItem
    }
}