I'm creating AR app (Xcode 10.1, Swift 4.2.1).
I'd like to load USDZ
3D object into an empty SceneKit's scene and then process it as MDL
mesh.
Here's my code:
import ARKit
import SceneKit.ModelIO
let scene = SCNScene(named: "art.scnassets/emptyScene.scn")!
if let filePath = Bundle.main.path(forResource: "Helicopter",
ofType: "usdz",
inDirectory: "art.scnassets") {
let refURL = URL(fileURLWithPath: filePath)
let refNode = SCNReferenceNode(url: refURL)
refNode?.load()
scene.rootNode.addChildNode(refNode!)
}
let helicopterGeo = refNode!.geometry
let mdlMesh = MDLMesh(scnGeometry: helicopterGeo!) // ERROR APPEARS HERE
try! mdlMesh.makeVerticesUniqueAndReturnError()
let flattenedGeometry = SCNGeometry(mdlMesh: mdlMesh)
let flattenedNode = SCNNode(geometry: flattenedGeometry)
scene.rootNode.addChildNode(flattenedNode)
But compiler gives me an error:
"Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value"
The question is: what approach should I use to assign a "Helicopter.usdz"
geometry to a helicopterGeo
constant?
Help me find a workaround, please!
You can download USDZ
file for testing HERE.