从SceneKit导出USDZ导致模型呆板

问题描述 投票:1回答:1

我试图使用新的iOS13功能,从一个SCNScene导出usdz文件,使用 func write(to url: URL, options: [String : Any]? = nil, delegate: SCNSceneExportDelegate?, progressHandler: SCNSceneExportProgressHandler? = nil) -> Bool 的功能,如果我使用一个没有修改的内置.scn文件,它的工作效果很好,但是当我尝试插入我自己的纹理时,却遇到了各种问题。

如果我使用一个没有修改的baked in .scn文件,它的效果很好,但是当我尝试插入我自己的纹理时,我遇到了各种问题。

let scene = SCNScene(named: "scene.scnassets/original.scn")!
let node = scene.rootNode.childNode(withName: "Plane", recursively: true)
let plane = SCNPlane(width: 1, height: 1)
node?.geometry = plane
node?.geometry?.firstMaterial?.diffuse.contents = UIColor.black
node?.geometry?.firstMaterial?.roughness.contents = NSNumber(value: 0.0) //or UIColor.black doesn't work either

let documentsUrl = self.fileManager.urls(for: .documentDirectory, in: .userDomainMask)
guard !documentsUrl.isEmpty,
let url = documentsUrl.first else {
    completion(nil)
    return
}
let finalUrl = url.appendingPathComponent("result.usdz")
_ = scene.write(to: finalUrl, delegate: nil)

original.scn只是有一个有光泽的平面,我又尝试在改变材质时将粗糙度设置为0。不过得到的usdz总是把粗糙度设置为0.9。有谁遇到过这种情况,并找到了解决的方法?

ios swift scenekit usdz
1个回答
2
投票

默认的照明模型是 SCNLightingModelBlinn 意思是说,用在 plane 几何体不是基于物理的。USDZ只支持基于物理的材质,在导出时,SceneKit会尝试从Blinn材质中建立一个PBR材质,并会推断出一个 roughness 代表您。

修正包括设置 lightingModelNameSCNLightingModelPhysicallyBased.

© www.soinside.com 2019 - 2024. All rights reserved.