12

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

4

2 回答 2

0

在 Xcode 13/12 中没有这样的问题

AR QuickLook框架基于 RealityKit 渲染引擎。AR QuickLook具有控制 AR 场景的最小参数。没有用于控制照明的参数。AR QuickLook 自动继承Light Estimation自 RealityKit。在 Xcode 12.1 及更高版本中,我看不到呈现不亮(黑色)模型的错误。您可以使用以下代码快速测试它:

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
    }
}

附言

如果您仍然遇到不亮 PBR 模型的问题 – 这不是问题AR QuickLook,而是您的 USDZ 模型的问题。

于 2019-09-18T09:53:06.513 回答
0

请确保您的 3D 网格在创建模型时具有 UV 布局。如果没有 UV,3D 对象在 iOS 设备和 QLPreviewController 上会显得很暗,但在 MacOS 上使用 3D 或 ARQuickLook 时可能会很好。

有关更多信息,请参阅下面提到的链接:

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

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

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

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

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

我尝试过的其他技巧是(不推荐):

1) 在创建 USDZ 模型时更改 emissiveColor。使用基于 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 演讲中获得帮助(从 Scenekit 导出 USDZ):

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

于 2019-09-17T16:57:44.747 回答