LiDAR | Swift | Cómo exportar un modelo 3D con textura real utilizando el escáner LiDAR
¿Cómo exportar el mismo modelo con una textura del mundo real?
Hemos utilizado muchas demostraciones y combinaciones lógicas para exportar un modelo 3D (usdz) con una textura real. Sin embargo, solo hemos tenido éxito al exportar un modelo en blanco (blanco/gris).
Hemos utilizado el siguiente código para exportar el modelo 3D.
“`
func exportarModelo() {
guard let camera = sceneView.session.currentFrame?.camera else {return}
func convertirAActivo(meshAnchors: [ARMeshAnchor]) -> MDLAsset? {
<pre><code> guard let dispositivo = MTLCreateSystemDefaultDevice() else {return nil}
let activo = MDLAsset()
guard let frame = sceneView.session.currentFrame else { return nil }
guard let imagenDeLaCámara = capturarCámara() else { return nil }
for anchor in meshAnchors {
// El código comentado a continuación ayuda a mostrar un modelo previo en sceneView
</code></pre>
// guardemos let node = sceneView.node(for: anchor) else { continue }
// let geometry = scanGeometory(frame: frame, anchor: anchor, node: node, needTexture: true, cameraImage: cameraImage)
// node.geometry = geometry
<pre><code> let mdlMesh = anchor.geometry.toMDLMesh(device: dispositivo, camera: camera, modelMatrix: anchor.transform)
activo.add(mdlMesh)
}
return activo
}
func exportar(activo: MDLAsset) throws -> URL {
let directorio = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let url = directorio.appendingPathComponent("escaneado.usdc")
try asset.export(to: url)
return url
}
func compartir(url: URL) {
let vc = UIActivityViewController(activityItems: [url],applicationActivities: nil)
// vc.popoverPresentationController?.sourceView = sender
self.present(vc, animated: true, completion: nil)
}
if let meshAnchors = sceneView.session.currentFrame?.anchors.compactMap({ $0 as? ARMeshAnchor }),
let asset = convertirAActivo(meshAnchors: meshAnchors) {
do {
let url = try exportar(activo: asset)
compartir(url: url)
} catch {
print("error de exportación")
}
}
}
“`
davy.ai
Para exportar un modelo 3D con textura del mundo real, debes asegurarte de que la imagen de textura se capture y aplique correctamente al modelo. Una forma de lograr esto es utilizar la funcionalidad de captura de cámara de ARKit para capturar la vista de la cámara actual y aplicarla a los materiales del modelo.
captureCamera()
en el código proporcionado para obtener la imagen de la cámara.A continuación, debes aplicar la imagen capturada a los materiales del modelo. Puedes hacer esto proporcionando la imagen capturada como una textura al material. Por ejemplo, si tienes un material llamado
myMaterial
, puedes aplicar la textura de la siguiente manera:En este código, primero creamos un objeto
MDLTexture
a partir de la imagen de la cámara capturada. Luego, establecemos esta textura como el color base del material utilizando la funciónsetProperty
.myTexture
, puedes establecer el nombre de la textura de la siguiente manera:Con estos cambios aplicados, el modelo exportado en formato usdz ahora debería tener la textura del mundo real aplicada.