iOS:USDZ文件中闪电的问题

12

我正在尝试使用QLPreviewController展示AR内容。除了光照之外,一切都运作良好。如果我在Xcode或macOS的快速查看中预览文件,则光照自然,但是如果我使用QLPreviewController预览它,则物体会过于暗淡!是否有可能调整光照、缩放和其他设置?


请问您能否分享代码以获取更多信息? - Karthick Ramesh
2个回答

0
请在创建模型时确保您的3D网格具有UV布局。如果没有UV,3D对象将在iOS设备和QLPreviewController上显示为暗色,尽管在使用3D或ARQuickLook时在MacOS上可能看起来很好。
有关更多信息,请参阅下面提到的链接:

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/


请问您是如何创建这个模型的? - Amyth

0

Xcode 13/12没有这些问题

AR QuickLook框架是基于RealityKit渲染引擎的。 AR QuickLook具有最少的参数来控制AR场景。没有控制照明的参数。 AR QuickLook从RealityKit继承自动Light Estimation。 在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 模型的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接